skip_on_cran()
skip_if_offline(url_parse(hb())$domain)
cli <- HttpClient$new(url = "http://api.crossref.org")
aa <- Paginator$new(
client = cli,
by = "limit_offset",
limit_param = "rows",
offset_param = "offset",
limit = 50,
chunk = 10
)
test_that("Paginator print method", {
expect_type(aa$print, "closure")
expect_output(aa$print(), "api.crossref.org")
expect_output(aa$print(), "limit_offset")
expect_output(aa$print(), "chunk: 10")
expect_output(aa$print(), "limit_param: rows")
expect_output(aa$print(), "offset_param: offset")
expect_output(aa$print(), "limit: 50")
expect_output(aa$print(), "status: not run yet")
})
test_that("Paginator works", {
expect_s3_class(cli, "HttpClient")
expect_s3_class(Paginator, "R6ClassGenerator")
expect_s3_class(aa, "Paginator")
expect_type(aa$.__enclos_env__$private$page, "closure")
expect_type(aa$parse, "closure")
expect_type(aa$content, "closure")
expect_type(aa$responses, "closure")
# before requests
expect_equal(length(aa$content()), 0)
expect_equal(length(aa$status()), 0)
expect_equal(length(aa$status_code()), 0)
expect_equal(length(aa$times()), 0)
# after requests
invisible(aa$get("works"))
expect_equal(length(aa$content()), 5)
expect_equal(length(aa$status()), 5)
expect_equal(length(aa$status_code()), 5)
expect_equal(length(aa$times()), 5)
})
test_that("Paginator works with many different limit and chunk combinations", {
limit_param = "rows"
offset_param = "start"
aa <- Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = 27,
chunk = 10
)
expect_equal(aa$.__enclos_env__$private$offset_iters, c(0, 10, 20))
expect_equal(aa$.__enclos_env__$private$limit_chunks, c(10, 10, 7))
bb <- Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = 50,
chunk = 10
)
expect_equal(bb$.__enclos_env__$private$offset_iters, c(0, 10, 20, 30, 40))
expect_equal(bb$.__enclos_env__$private$limit_chunks, c(10, 10, 10, 10, 10))
cc <- Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = 1050,
chunk = 20
)
expect_equal(cc$.__enclos_env__$private$offset_iters, seq(0, 1040, by = 20))
expect_equal(
cc$.__enclos_env__$private$limit_chunks,
c(rep(20, floor(1050 / 20)), 10)
)
dd <- Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = 1049,
chunk = 20
)
expect_equal(dd$.__enclos_env__$private$offset_iters, seq(0, 1040, by = 20))
expect_equal(
dd$.__enclos_env__$private$limit_chunks,
c(rep(20, floor(1049 / 20)), 9)
)
ee <- Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = 1051,
chunk = 20
)
expect_equal(ee$.__enclos_env__$private$offset_iters, seq(0, 1040, by = 20))
expect_equal(
ee$.__enclos_env__$private$limit_chunks,
c(rep(20, floor(1051 / 20)), 11)
)
ff <- Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = 1051,
chunk = 5
)
expect_equal(ff$.__enclos_env__$private$offset_iters, seq(0, 1050, by = 5))
expect_equal(
ff$.__enclos_env__$private$limit_chunks,
c(rep(5, floor(1051 / 5)), 1)
)
})
test_that("Paginator fails well", {
expect_error(Paginator$new(), "argument \"client\" is missing")
# expect_error(Paginator$new(cli), "argument \"chunk\" is missing")
expect_error(Paginator$new(cli, 5), "'by' must be one of")
expect_error(
Paginator$new(5, "limit_offset"),
"'client' has to be an object of class 'HttpClient'"
)
limit_param = "rows"
offset_param = "start"
# chunk = 0 or not an integer
expect_error(
Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = 51,
chunk = 0
),
"'chunk' must be an integer and > 0"
)
expect_error(
Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = 51,
chunk = 1.5
),
"'chunk' must be an integer and > 0"
)
# limit not an integer
expect_error(
Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = offset_param,
limit = "stuff",
chunk = 10
),
"limit must be of class numeric, integer"
)
# limit_param must be character
expect_error(
Paginator$new(
client = cli,
by = "limit_offset",
limit_param = 5,
offset_param = offset_param,
limit = 51,
chunk = 10
),
"limit_param must be of class character"
)
# offset_param must be character
expect_error(
Paginator$new(
client = cli,
by = "limit_offset",
limit_param = limit_param,
offset_param = 5,
limit = 51,
chunk = 10
),
"offset_param must be of class character"
)
# page_param must be character
expect_error(
Paginator$new(
client = cli,
by = "page_perpage",
page_param = 5,
per_page_param = 'a'
),
"page_param must be of class character"
)
# per_page_param must be character
expect_error(
Paginator$new(
client = cli,
by = "page_perpage",
page_param = 'b',
per_page_param = 45
),
"per_page_param must be of class character"
)
})
test_that("Paginator progress option", {
cli <- HttpClient$new(url = "https://api.crossref.org")
cc <- Paginator$new(
client = cli,
limit_param = "rows",
offset_param = "offset",
limit = 20,
chunk = 10,
progress = TRUE
)
expect_output(cc$get('works'), "====")
})
test_that("by throws warning when query_params used", {
expect_warning(
Paginator$new(
client = cli,
by = "query_params",
limit_param = "rows",
offset_param = "offset",
limit = 50,
chunk = 10
)
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.