tests/testthat/tests-wdi_get.R

test_that("wdi_get_handles invalid language input", {
  expect_error(
    wdi_get(
      entities = "USA", indicators = "NY.GDP.MKTP.CD", language = "xx"
    )
  )
})

test_that("wdi_get checks invalid parameter values", {
  expect_error(wdi_get("USA", "NY.GDP.PCAP.KD", frequency = "weekly"),
               "must be either 'annual', 'quarter', or 'month'")
  expect_error(wdi_get("USA", "NY.GDP.PCAP.KD", format = "tall"),
               "must be either 'long' or 'wide'")
})

test_that("wdi_get handles invalid per_page input", {
  expect_error(
    wdi_get(
      entities = "USA", indicators = "NY.GDP.MKTP.CD", per_page = -1
    )
  )
  expect_error(
    wdi_get(
      entities = "USA", indicators = "NY.GDP.MKTP.CD", per_page = "1000"
    )
  )
})

test_that("wdi_get handels invalid most_recent_only input", {
  expect_error(
    wdi_get(
      entities = "USA", indicators = "NY.GDP.MKTP.CD",
      most_recent_only = "yes"
    )
  )
})

test_that("wdi_get handels invalid progress input", {
  expect_error(
    wdi_get(
      entities = "USA", indicators = "NY.GDP.MKTP.CD", progress = "yes"
    )
  )
})

test_that("wdi_get creates valid output structure for single indicator", {
  skip_if_offline()

  result <- wdi_get(
    entities = "USA",
    indicators = "NY.GDP.MKTP.CD",
    start_year = 2010, end_year = 2020,
    language = "en", per_page = 10, progress = FALSE
  )
  expected_names <- c("indicator_id", "entity_id", "year", "value")
  expect_true(is.data.frame(result))
  expect_true(all(expected_names %in% names(result)))
  expect_equal(nrow(result), 11)
})

test_that("wdi_get_creates valid output structure for multiple indicators", {
  skip_if_offline()

  result <- wdi_get(
    entities = "USA",
    indicators = c("NY.GDP.MKTP.CD", "SP.POP.TOTL"),
    start_year = 2010, end_year = 2020,
    language = "en", per_page = 10, progress = FALSE
  )
  expected_names <- c("indicator_id", "entity_id", "year", "value")
  expect_true(is.data.frame(result))
  expect_true(all(expected_names %in% names(result)))
  expect_true(any(result$indicator_id == "NY.GDP.MKTP.CD"))
  expect_true(any(result$indicator_id == "SP.POP.TOTL"))
})

test_that("wdi_get returns a tibble", {
  skip_if_offline()

  result <- wdi_get("USA", "NY.GDP.PCAP.KD")
  expect_s3_class(result, "tbl_df")
})

test_that("wdi_get handles single indicator, entity & default parameters", {
  skip_if_offline()

  result <- wdi_get("USA", "NY.GDP.PCAP.KD")
  expected_colnames <- c("indicator_id", "entity_id", "year", "value")
  expect_true(all(expected_colnames %in% colnames(result)))
  expect_equal(unique(result$entity_id), "USA")
  expect_equal(unique(result$indicator_id), "NY.GDP.PCAP.KD")
})

test_that("wdi_get handles multiple indicators and multiple entities", {
  skip_if_offline()

  result <- wdi_get(c("USA", "CAN"), c("NY.GDP.PCAP.KD", "SP.POP.TOTL"))
  expected_colnames <- c("indicator_id", "entity_id", "year", "value")
  expect_true(all(expected_colnames %in% colnames(result)))
  expect_true(all(result$entity_id %in% c("USA", "CAN")))
  expect_true(all(result$indicator_id %in% c("NY.GDP.PCAP.KD", "SP.POP.TOTL")))
})

test_that("wdi_get handles different date ranges and frequencies", {
  skip_if_offline()

  result_annual <- wdi_get(
    "USA", "NY.GDP.PCAP.KD",
    start_year = 2010, end_year = 2015, frequency = "annual"
  )
  result_quarter <- wdi_get(
    "NGA", "DT.DOD.DECT.CD.TL.US",
    start_year = 2010, end_year = 2015, frequency = "quarter"
  )
  result_month <- wdi_get(
    "USA", "DPANUSSPB",
    start_year = 2010, end_year = 2015, frequency = "month"
  )

  expect_equal(range(result_annual$year), c(2010, 2015))
  expect_true("quarter" %in% colnames(result_quarter))
  expect_true("month" %in% colnames(result_month))
})

test_that("wdi_get handles format parameter (long and wide)", {
  skip_if_offline()

  result_long <- wdi_get("USA", "NY.GDP.PCAP.KD", format = "long")
  result_wide <- wdi_get("USA", "NY.GDP.PCAP.KD", format = "wide")

  expect_true("indicator_id" %in% colnames(result_long))
  expect_false("indicator_id" %in% colnames(result_wide))
})

test_that("wdi_get handles empty data gracefully", {

  mock_data <- data.frame(
    indicator = I(data.frame(
      id = character(),
      value = character()
    )),
    country = I(data.frame(
      id = character(),
      value = character()
    )),
    countryiso3code = character(),
    date = character(),
    value = numeric(),
    unit = character(),
    obs_status = character(),
    decimal = integer()
  )

  with_mocked_bindings(
    perform_request = function(...) mock_data,
    {
      result <- wdi_get("USA", "NY.GDP.PCAP.KD")
      expect_equal(nrow(result), 0)
    }
  )
})

test_that("create_date constructs date range correctly", {
  expect_equal(create_date(2010, 2015), "2010:2015")
  expect_null(create_date(NULL, NULL))
})

test_that("validate_frequency checks valid frequencies", {
  expect_error(validate_frequency("weekly"),
               "must be either 'annual', 'quarter', or 'month'")
  expect_silent(validate_frequency("annual"))
  expect_silent(validate_frequency("quarter"))
  expect_silent(validate_frequency("month"))
})

test_that("validate_progress checks if progress is logical", {
  expect_error(validate_progress("yes"), "must be either TRUE or FALSE")
  expect_silent(validate_progress(TRUE))
  expect_silent(validate_progress(FALSE))
})

test_that("validate_source checks if source is valid", {
  with_mocked_bindings(
    wdi_get_sources = function(...) tibble(source_id = c(1, 2, 3)),
    {
      expect_error(validate_source(4), "is not supported")
      expect_silent(validate_source(1))
      expect_silent(validate_source(NULL))
    }
  )
})

test_that("validate_format checks valid formats", {
  expect_error(validate_format("tall"), "must be either 'long' or 'wide'")
  expect_silent(validate_format("long"))
  expect_silent(validate_format("wide"))
})

Try the wbwdi package in your browser

Any scripts or data that you put into this service are public.

wbwdi documentation built on April 4, 2025, 2:14 a.m.