tests/testthat/test-utils.R

test_that("ct_cache_dir respects option", {
  op <- options(comtrade.cache_dir = "/tmp/test-comtrade-cache")
  on.exit(options(op))

  expect_equal(comtrade:::ct_cache_dir(), "/tmp/test-comtrade-cache")
})

test_that("ct_cache_dir uses default when option not set", {
  op <- options(comtrade.cache_dir = NULL)
  on.exit(options(op))

  dir <- comtrade:::ct_cache_dir()
  expect_true(grepl("comtrade", dir))
})

test_that("ct_validate_year rejects invalid years", {
  expect_error(comtrade:::ct_validate_year(1900), "1962")
  expect_error(comtrade:::ct_validate_year("abc"), "numeric")
  expect_error(comtrade:::ct_validate_year(3000), "current year")
})

test_that("ct_validate_year accepts valid years", {
  expect_equal(comtrade:::ct_validate_year(2023), 2023L)
  expect_equal(comtrade:::ct_validate_year(c(2020, 2021)), c(2020L, 2021L))
})

test_that("ct_validate_flow accepts valid flows", {
  expect_equal(comtrade:::ct_validate_flow("X"), "X")
  expect_equal(comtrade:::ct_validate_flow("m"), "M")
  expect_equal(comtrade:::ct_validate_flow(c("X", "M")), c("X", "M"))
})

test_that("ct_validate_flow rejects invalid flows", {
  expect_error(comtrade:::ct_validate_flow("Z"), "must be one of")
})

test_that("ct_records_to_df handles empty input", {
  out <- comtrade:::ct_records_to_df(list(), c("a", "b"))
  expect_s3_class(out, "data.frame")
  expect_equal(nrow(out), 0L)
  expect_named(out, c("a", "b"))
})

test_that("ct_records_to_df converts records", {
  records <- list(
    list(a = 1, b = "x"),
    list(a = 2, b = "y")
  )
  out <- comtrade:::ct_records_to_df(records, c("a", "b"))
  expect_equal(nrow(out), 2L)
  expect_equal(out$a, c(1, 2))
  expect_equal(out$b, c("x", "y"))
})

test_that("ct_records_to_df handles missing fields", {
  records <- list(
    list(a = 1),
    list(a = 2, b = "y")
  )
  out <- comtrade:::ct_records_to_df(records, c("a", "b"))
  expect_equal(nrow(out), 2L)
  expect_true(is.na(out$b[1]))
})

test_that("ct_resolve_country handles ISO3 codes", {
  code <- comtrade:::ct_resolve_country("GBR")
  expect_equal(code, "826")
})

test_that("ct_resolve_country handles numeric codes", {
  code <- comtrade:::ct_resolve_country(826)
  expect_equal(code, "826")
})

test_that("ct_resolve_country handles World", {
  expect_equal(comtrade:::ct_resolve_country("WORLD"), "0")
  expect_equal(comtrade:::ct_resolve_country("W00"), "0")
})

test_that("ct_cache_read returns NULL for missing file", {
  op <- options(comtrade.cache_dir = tempdir())
  on.exit(options(op))

  result <- comtrade:::ct_cache_read("nonexistent.rds")
  expect_null(result)
})

test_that("ct_cache write and read roundtrip works", {
  op <- options(comtrade.cache_dir = tempdir())
  on.exit(options(op))

  test_data <- data.frame(x = 1:3, y = letters[1:3])
  comtrade:::ct_cache_write("test_roundtrip.rds", test_data)
  result <- comtrade:::ct_cache_read("test_roundtrip.rds", max_age = 60)

  expect_equal(result, test_data)

  # Clean up
  file.remove(file.path(tempdir(), "test_roundtrip.rds"))
})

Try the comtrade package in your browser

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

comtrade documentation built on April 13, 2026, 5:07 p.m.