test_that(".empty", { df <- widr:::.empty("a", "b") expect_equal(nrow(df), 0L) expect_named(df, c("a", "b")) }) test_that(".recode_imp", { expect_equal(widr:::.recode_imp("region"), "regional imputation") expect_equal(widr:::.recode_imp("survey"), "adjusted surveys") expect_equal(widr:::.recode_imp("tax"), "surveys and tax data") expect_equal(widr:::.recode_imp("full"), "surveys and tax microdata") expect_equal(widr:::.recode_imp("rescaling"), "rescaled fiscal income") expect_equal(widr:::.recode_imp("x"), "x") expect_identical(widr:::.recode_imp(NULL), NA_character_) expect_identical(widr:::.recode_imp(NA), NA_character_) }) test_that(".parse_indicator", { df <- data.frame(indicator = "sptinc_p99p100_992_j", country = "US", year = "2020", value = 0.2, stringsAsFactors = FALSE) out <- widr:::.parse_indicator(df) expect_equal(out$variable, "sptinc992j") expect_equal(out$percentile, "p99p100") expect_error(widr:::.parse_indicator(data.frame(indicator = "x", country = "US", year = "2020", value = 0.2, stringsAsFactors = FALSE))) }) test_that(".filter_vars", { v <- data.frame(percentile = c("p99p100", "p90p100", "p99p100"), age = c("992", "992", "999"), pop = c("j", "j", "i"), stringsAsFactors = FALSE) expect_equal(nrow(widr:::.filter_vars(v, "all", "all", "all")), 3L) expect_equal(nrow(widr:::.filter_vars(v, "p99p100", "all", "all")), 2L) expect_equal(nrow(widr:::.filter_vars(v, "all", "999", "all")), 1L) expect_equal(nrow(widr:::.filter_vars(v, "all", "all", "i")), 1L) expect_equal(nrow(widr:::.filter_vars(v, "p99p100", "992", "j")), 1L) }) test_that(".strip_extrap", { df <- data.frame(year = c("2000", "2001"), value = 1:2, stringsAsFactors = FALSE) expect_equal(widr:::.strip_extrap(df, list(extrapolation = NULL)), df) expect_equal(widr:::.strip_extrap(df, list(extrapolation = NA)), df) expect_equal(widr:::.strip_extrap(df, list(extrapolation = "")), df) df2 <- data.frame(year = as.character(2000:2003), value = 1:4, stringsAsFactors = FALSE) extrap <- jsonlite::toJSON(matrix(c(2001L, 2003L), nrow = 1L)) out <- widr:::.strip_extrap(df2, list(extrapolation = extrap, data_points = NULL)) expect_equal(nrow(out), 2L) dp <- jsonlite::toJSON(c("2002")) out2 <- widr:::.strip_extrap(df2, list(extrapolation = extrap, data_points = dp)) expect_true("2002" %in% out2$year) expect_false("2003" %in% out2$year) }) test_that("download_wid validation", { mock_vars <- function(ind, areas) { data.frame(variable = "sptinc", country = "US", percentile = "p99p100", age = "992", pop = "j", stringsAsFactors = FALSE) } mock_fetch <- function(vars, size, fn) { data.frame(indicator = "sptinc_p99p100_992_j", country = "US", year = "2015", value = 0.2, stringsAsFactors = FALSE) } expect_error(download_wid(), "Specify") expect_error(download_wid(indicators = "all", areas = "all"), "Specify") expect_error(download_wid(indicators = "sptinc", areas = "US", pop = "z"), "pop") expect_error(download_wid(indicators = "sptinc", areas = "US", perc = "bad"), "percentile") expect_error(download_wid(indicators = "sptinc", areas = "US", years = "x"), "integer") expect_error(download_wid(indicators = "sptinc", areas = "US", ages = 0), "age") with_mocked_bindings( .get_variables_areas = mock_vars, .chunk_fetch = mock_fetch, { expect_warning(download_wid(indicators = "sptinc", areas = "US", years = 1799L), "1800") }, .package = "widr" ) }) test_that("download_wid workflow", { mock_vars <- function(ind, areas) { data.frame(variable = "sptinc", country = "US", percentile = "p99p100", age = "992", pop = "j", stringsAsFactors = FALSE) } mock_fetch <- function(vars, size, fn) { if (size == 10L) { data.frame(indicator = c("sptinc_p99p100_992_j", "sptinc_p99p100_992_j", "sptinc_p99p100_992_j"), country = c("US", "US", "US"), year = c("2015", "2014", "2015"), value = c(0.2, 0.19, 0.2), stringsAsFactors = FALSE) } else { data.frame(indicator = "sptinc_p99p100_992_j", variable = "sptinc", country = "US", countryname = "US", shortname = "x", shortdes = "x", pop = "x", age = "x", source = "x", method = "x", quality = "x", imputation = NA_character_, stringsAsFactors = FALSE) } } with_mocked_bindings( .get_variables_areas = mock_vars, .chunk_fetch = mock_fetch, { res <- download_wid(indicators = "sptinc", areas = "US") expect_s3_class(res, "wid_data") expect_equal(nrow(res$data), 2L) expect_equal(res$data$year, c("2014", "2015")) res_meta <- download_wid(indicators = "sptinc", areas = "US", metadata = TRUE) expect_false(is.null(res_meta$metadata)) res_yr <- download_wid(indicators = "sptinc", areas = "US", years = 2014L) expect_equal(nrow(res_yr$data), 1L) expect_message(download_wid(indicators = "sptinc", areas = "US", verbose = TRUE), "Fetching") res_all <- download_wid(indicators = "all", areas = "US") expect_s3_class(res_all, "wid_data") }, .package = "widr" ) }) test_that("download_wid edge cases", { mock_empty <- function(ind, areas) { widr:::.empty("variable", "country", "percentile", "age", "pop") } mock_vars <- function(ind, areas) { data.frame(variable = "sptinc", country = "US", percentile = "p99p100", age = "992", pop = "j", stringsAsFactors = FALSE) } mock_no_data <- function(vars, size, fn) { widr:::.empty("indicator", "country", "year", "value") } with_mocked_bindings( .get_variables_areas = mock_empty, { expect_warning(download_wid(indicators = "sptinc", areas = "US"), "No data") }, .package = "widr" ) with_mocked_bindings( .get_variables_areas = mock_vars, { expect_warning(download_wid(indicators = "sptinc", areas = "US", perc = "p0p100"), "No data after") }, .package = "widr" ) with_mocked_bindings( .get_variables_areas = mock_vars, .chunk_fetch = mock_no_data, { expect_warning(download_wid(indicators = "sptinc", areas = "US"), "API returned") }, .package = "widr" ) })