diff options
| author | Murilo Ijanc <[email protected]> | 2026-07-26 12:42:37 -0300 |
|---|---|---|
| committer | Murilo Ijanc <[email protected]> | 2026-07-26 12:42:37 -0300 |
| commit | 11d49bc25eb1643f1b742f9527212d8781f2e0de (patch) | |
| tree | bae1cb090cbf6c9f82ab5abbaf1194206f92f539 /tests/test-batch.R | |
| download | r-11d49bc25eb1643f1b742f9527212d8781f2e0de.tar.gz | |
Initial importv0.1.0
Diffstat (limited to 'tests/test-batch.R')
| -rw-r--r-- | tests/test-batch.R | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/test-batch.R b/tests/test-batch.R new file mode 100644 index 0000000..6b28bcc --- /dev/null +++ b/tests/test-batch.R @@ -0,0 +1,78 @@ +library(cepis) +source(file.path("helper", "utils.R")) + +rows <- c( + paste0( + "01001000,Pra\u00e7a da S\u00e9,lado \u00edmpar,,S\u00e9,S\u00e3o Paulo,", + "SP,S\u00e3o Paulo,Sudeste,3550308,1004,11,7107" + ), + "99999999,,,,,,,,,,,,", + paste0( + "20040020,Avenida Rio Branco,,,Centro,Rio de Janeiro,RJ,Rio de Janeiro,", + "Sudeste,3304557,,21,6001" + ) +) + +with_server( + list(route("/csv?", response(200L, csv(rows)))), + function(client, server) { + result <- cep_lookup_many(c("01001000", "99999999", "20040020"), client) + check("the batch is as long as the input", length(result) == 3L) + check("the first CEP resolved", identical(result[[1L]]$localidade, "S\u00e3o Paulo")) + check("a missing CEP is NULL at its position", is.null(result[[2L]])) + check("the third CEP kept its position", identical(result[[3L]]$uf, "RJ")) + check("a batch address carries no coordinate", is.null(result[[3L]]$geo)) + check("one request served the whole batch", calls(server, "/csv?") == 1L) + } +) + +quoted <- paste0( + '01001000,"Rua Um, Dois",,,Centro,S\u00e3o Paulo,SP,S\u00e3o Paulo,', + "Sudeste,1,,11,1" +) + +with_server( + list(route("/csv?", response(200L, csv(quoted)))), + function(client, server) { + result <- cep_lookup_many("01001000", client) + check( + "a quoted field containing a comma is parsed as one value", + identical(result[[1L]]$logradouro, "Rua Um, Dois") + ) + } +) + +with_server( + list(route("/csv?", response(200L, csv(character(0L))))), + function(client, server) { + check("an empty input returns an empty list", identical(cep_lookup_many(character(0L), client), list())) + check("and makes no request at all", calls(server) == 0L) + } +) + +many <- sprintf("%08d", seq_len(501L) - 1L) +chunk_row <- function(cep) paste0(cep, ",,,,,X,SP,S\u00e3o Paulo,Sudeste,1,,11,1") + +with_server( + list(route( + "/csv?", + response(200L, csv(vapply(many[1:500], chunk_row, character(1L)))), + response(200L, csv(vapply(many[501], chunk_row, character(1L)))) + )), + function(client, server) { + result <- cep_lookup_many(many, client) + check("501 CEPs are split into two requests", calls(server, "/csv?") == 2L) + check("the result still has one entry per input", length(result) == 501L) + check("the last entry belongs to the last CEP", identical(result[[501L]]$cep, "00000500")) + } +) + +with_server( + list(route("/csv?", response(200L, csv("01001000,,,,,S\u00e3o Paulo,SP,S\u00e3o Paulo,Sudeste,1,,11,1")))), + function(client, server) { + result <- cep_lookup_many(c("01001000", "20040020"), client) + check("a truncated response is padded, never shifted", length(result) == 2L) + check("the missing row became NULL", is.null(result[[2L]])) + check("the row that arrived kept its position", identical(result[[1L]]$cep, "01001000")) + } +) |