test_that("validates inputs", {
expect_snapshot(error = TRUE, {
req_perform_connection(1)
req_perform_connection(request_test(), 1)
})
})
test_that("correctly prepares request", {
req <- request_test("/post") %>% req_method("POST")
expect_no_error(resp <- req_perform_connection(req))
close(resp)
})
test_that("can read all data from a connection", {
resp <- request_test("/stream-bytes/2048") %>% req_perform_connection()
withr::defer(close(resp))
out <- resp_body_raw(resp)
expect_length(out, 2048)
expect_false(resp_has_body(resp))
})
test_that("reads body on error", {
req <- local_app_request(function(req, res) {
res$set_status(404L)$send_json(list(status = 404), auto_unbox = TRUE)
})
expect_error(req_perform_connection(req), class = "httr2_http_404")
resp <- last_response()
expect_equal(resp_body_json(resp), list(status = 404))
})
test_that("can retry a transient error", {
req <- local_app_request(function(req, res) {
i <- res$app$locals$i %||% 1
if (i == 1) {
res$app$locals$i <- 2
res$
set_status(429)$
set_header("retry-after", 0)$
send_json(list(status = "waiting"), auto_unbox = TRUE)
} else {
res$send_json(list(status = "done"), auto_unbox = TRUE)
}
})
req <- req_retry(req, max_tries = 2)
cnd <- expect_condition(
resp <- req_perform_connection(req),
class = "httr2_retry"
)
expect_s3_class(cnd, "httr2_retry")
expect_equal(cnd$tries, 1)
expect_equal(cnd$delay, 0)
expect_equal(last_response(), resp)
expect_equal(resp_body_json(resp), list(status = "done"))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.