Nothing
# L'EACR est embarquee dans le paquet : ces tests portent sur les fichiers
# versionnes, et echouent donc si un import les a mal ecrits ou si l'un d'eux
# manque au commit.
test_that("toutes les tables du registre sont lisibles", {
registre <- tablesEacr()
expect_gt(nrow(registre), 0L)
for (nom in registre$table) {
dt <- lireEacr(nom)
checkmate::expect_data_table(dt, min.rows = 1L, info = nom)
# toute table de la source porte une annee ; l'effectif est un denombrement
# de personnes partout ou il figure -- les deux tables qui n'en ont pas
# comptent les beneficiaires par prelevement, ou n'ont pas d'effectif du
# tout (age conjoncturel)
checkmate::expect_names(names(dt), must.include = "annee", info = nom)
checkmate::expect_integer(dt$annee, any.missing = FALSE, info = nom)
if ("effectifs" %chin% names(dt)) {
checkmate::expect_integer(dt$effectifs, info = nom)
}
}
})
test_that("lireEacr refuse une table inconnue", {
expect_error(lireEacr("K-Table_imaginaire"), "K-Table_imaginaire")
})
test_that("les codes caisse gardent leurs zeros de tete", {
dt <- lireEacr("A-Cadrage")
checkmate::expect_character(
dt$cc,
any.missing = FALSE,
pattern = "^[0-9]{4}$"
)
expect_true("0010" %chin% dt$cc)
})
test_that("la table A porte les effectifs de retraites publies", {
# Les retraites de droit direct de tous regimes, vivants au 31 decembre :
# le chiffre que publie le Panorama. Il vaut controle de bout en bout de
# l'import -- le filtre sur `plusRecent` tranche la double interrogation de
# la source, et la colonne `effectifs` est bien un entier de personnes.
#
# Un millesime qui reviserait cette annee-la fait echouer le test : c'est le
# signe qu'il faut relire la revision, puis inscrire ici la valeur revisee.
dt <- lireEacr("A-Cadrage")
droitsDirects <- dt[
annee == 2023L &
cc == "0000" &
champ == "ddir" &
sexe == "Ensemble" &
resid == "Ensemble" &
liq == "Ensemble" &
statutSncf == "Ensemble" &
plusRecent
]
expect_equal(nrow(droitsDirects), 1L)
expect_equal(droitsDirects$effectifs, 17184263L)
})
test_that("le millesime embarque decrit les deux classeurs de la source", {
millesime <- millesimeEacr()
expect_equal(nrow(millesime), 2L)
expect_true(all(grepl("EACR", millesime$titre)))
})
test_that("modifier une table lue n'atteint pas la lecture suivante", {
# Les tables sont gardees en memoire d'une lecture a l'autre : sans copie a
# la sortie, le premier appelant qui ajoute une colonne la laisserait a tous
# les suivants.
avant <- lireEacr("A-Cadrage")
avant[, colonneIntruse := 1L]
expect_false("colonneIntruse" %chin% names(lireEacr("A-Cadrage")))
})
test_that("la lecture écarte les cellules que la source publie de travers", {
# `setup.R` met le journal à OFF pour toute la suite : on le relève le temps
# de l'appel, sans quoi l'avertissement ne serait pas émis.
seuil <- logger::log_threshold()
logger::log_threshold(logger::TRACE)
journal <- character()
logger::log_appender(function(lignes) journal <<- c(journal, lignes))
on.exit(
{
logger::log_appender(logger::appender_console)
logger::log_threshold(seuil)
},
add = TRUE
)
# la lecture est gardée en mémoire d'un appel à l'autre : sans quoi ce test
# relirait la table déjà filtrée par un test précédent, et n'observerait rien
rm(
list = ls(legiretraite:::cacheLectureEacr),
envir = legiretraite:::cacheLectureEacr
)
lue <- lireEacr("E-Minima")
brute <- lireEacr("E-Minima", brut = TRUE)
expect_equal(nrow(brute) - nrow(lue), 3L)
expect_match(paste(journal, collapse = " "), "ecartee\\(s\\) a la lecture")
})
test_that("la source porte encore les défauts que la lecture écarte", {
# Sentinelle : le jour où une vague corrigée arrivera, ce test tombera, et
# l'entrée correspondante de `cellulesFautivesEacr` devra être retirée — le
# retrait masquerait sinon des lignes désormais bonnes.
fautives <- legiretraite:::cellulesFautivesEacr
for (i in seq_len(nrow(fautives))) {
brute <- lireEacr(fautives$table[i], brut = TRUE)
cles <- setdiff(names(fautives), c("table", "defaut"))
lignes <- brute[fautives[i], on = cles, nomatch = NULL]
expect_gt(nrow(lignes), 0L)
# le défaut recensé : le montant moyen recopie l'effectif
expect_true(
all(lignes$m1 == lignes$effectifs),
info = paste(fautives$source[i], fautives$defaut[i])
)
}
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.