test_that("can perform multiple requests", { req <- request(example_url("/iris")) |> req_url_query(limit = 5) resps <- req_perform_iterative( req, next_req = iterate_with_offset("page_index"), max_reqs = 4 ) expect_length(resps, 4) expect_equal( resp_url(resps[[4]]), paste0(example_url(), "iris?limit=5&page_index=4") ) }) test_that("can save results to disk", { req <- request(example_url("/iris")) |> req_url_query(limit = 5) dir <- withr::local_tempdir() resps <- req_perform_iterative( req, next_req = iterate_with_offset("page_index"), max_reqs = 2, path = paste0(dir, "/file-{i}") ) expect_equal(resps[[1]]$body, new_path(file.path(dir, "file-1"))) expect_equal(resps[[2]]$body, new_path(file.path(dir, "file-2"))) }) test_that("user temination still returns data", { req <- request(example_url("/iris")) |> req_url_query(limit = 5) next_req <- function(resp, req) interrupt() expect_snapshot( resps <- req_perform_iterative(req, next_req = next_req) ) expect_length(resps, 1) }) test_that("can retrieve all pages", { req <- request(example_url("/iris")) |> req_url_query(limit = 1) i <- 1 next_req <- function(resp, req) { i <<- i + 1 if (i <= 120) { req |> req_url_query(page_index = 1) } } expect_condition( resps <- req_perform_iterative(req, next_req = next_req, max_reqs = Inf), class = "httr2:::doubled" ) expect_length(resps, 120) }) test_that("can choose to return on failure", { iterator <- function(resp, req) { request_test("/status/:status", status = 404) } expect_error( req_perform_iterative(request_test(), iterator), class = "httr2_http_404" ) out <- req_perform_iterative(request_test(), iterator, on_error = "return") expect_length(out, 2) expect_s3_class(out[[1]], "httr2_response") expect_s3_class(out[[2]], "httr2_http_404") }) test_that("mocking works", { req_200 <- request("https://ok") req_404 <- request("https://notok") local_mocked_responses(function(req) { if (req$url == "https://ok") { response() } else { response(404) } }) resps <- req_perform_iterative( req_200, \(resp, req) req_404, on_error = "return" ) expect_equal(resps[[1]], response()) expect_s3_class(resps[[2]], "httr2_http_404") }) test_that("checks its inputs", { req <- request_test() expect_snapshot(error = TRUE, { req_perform_iterative(1) req_perform_iterative(req, function(x, y) x + y) req_perform_iterative( req, function(resp, req) {}, path = 1 ) req_perform_iterative( req, function(resp, req) {}, max_reqs = -1 ) req_perform_iterative( req, function(resp, req) {}, progress = -1 ) }) })