Closes uscogdata#36. It counts governments with rows for the requested category, so a surveyed government that genuinely spends nothing there is indistinguishable from one never surveyed. In FY2022, a complete census year, Georgia reports 393 of 567 cities for Police -- the gap is cities that contract to the sheriff. Documents the comparison that IS valid: same category, census year vs sample year.
59 lines
2.8 KiB
R
59 lines
2.8 KiB
R
test_that('cog_geographic_rollup() accepts "All Categories" and agrees with per-category sums', {
|
|
skip_if_no_corpus()
|
|
govs <- cog_gov_search(name = NULL, state = "WI", type = 2L)
|
|
expect_gt(nrow(govs), 1L)
|
|
ids <- list(city = utils::head(govs$canonical_govid, 25L))
|
|
|
|
by_cat <- cog_geographic_rollup(ids, category = NULL, years = 2019L)
|
|
total <- cog_geographic_rollup(ids, category = "All Categories", years = 2019L)
|
|
|
|
expect_setequal(unique(total$category), "All Categories")
|
|
# one row per (govid, subtype) that appears in the per-category result
|
|
key_by_cat <- unique(paste(by_cat$canonical_govid, by_cat$spend_subtype))
|
|
key_total <- paste(total$canonical_govid, total$spend_subtype)
|
|
expect_setequal(key_total, key_by_cat)
|
|
|
|
lhs <- tapply(by_cat$amt_nominal, paste(by_cat$canonical_govid, by_cat$spend_subtype), sum)
|
|
rhs <- tapply(total$amt_nominal, key_total, sum)
|
|
expect_equal(as.numeric(rhs[names(lhs)]), as.numeric(lhs), tolerance = 1e-8)
|
|
})
|
|
|
|
test_that('"All Categories" survives per_capita and inflation adjustment through the rollup', {
|
|
skip_if_no_corpus()
|
|
govs <- cog_gov_search(name = NULL, state = "WI", type = 2L)
|
|
ids <- list(city = utils::head(govs$canonical_govid, 10L))
|
|
r <- cog_geographic_rollup(ids, category = "All Categories", years = 2019L,
|
|
per_capita = TRUE, adjust_to_year = 2020L)
|
|
expect_true(all(c("amt_per_capita_nominal", "amt_real", "amt_per_capita_real") %in% names(r)))
|
|
expect_setequal(unique(r$category), "All Categories")
|
|
expect_true(all(is.finite(r$amt_real)))
|
|
})
|
|
|
|
test_that('cog_geographic_rollup() still refuses expenditure_concept = "total" with "All Categories"', {
|
|
skip_if_no_corpus()
|
|
govs <- cog_gov_search(name = NULL, state = "WI", type = 2L)
|
|
ids <- list(city = utils::head(govs$canonical_govid, 5L))
|
|
expect_error(
|
|
cog_geographic_rollup(ids, category = "All Categories", years = 2019L,
|
|
expenditure_concept = "total")
|
|
)
|
|
})
|
|
|
|
test_that("n_units_reporting is category-conditional, not a response rate", {
|
|
skip_if_no_corpus()
|
|
govs <- cog_gov_search(name = NULL, state = "WI", type = 2L)
|
|
ids <- list(city = govs$canonical_govid)
|
|
|
|
police <- cog_geographic_rollup(ids, category = "Police", years = 2012L)
|
|
allcat <- cog_geographic_rollup(ids, category = "All Categories", years = 2012L)
|
|
|
|
cov_police <- cog_explain(police, format = "list")$coverage
|
|
cov_all <- cog_explain(allcat, format = "list")$coverage
|
|
|
|
# Same year, same requested govids, same collection -- yet a single category
|
|
# reports fewer units than the all-categories query. That gap is real zeros,
|
|
# not non-response, which is exactly why the ratio is not a response rate.
|
|
expect_lte(cov_police$n_units_reporting, cov_all$n_units_reporting)
|
|
expect_identical(cov_police$n_units_expected, cov_all$n_units_expected)
|
|
})
|