test_that("can build an empty response", {
response <- tower::response_builder() |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "text/plain")
expect_equal(response$content, character(0))
})
test_that("can build a response with a status", {
response <- tower::response_builder() |>
tower::set_status(404) |>
tower::build_response()
expect_equal(response$status, 404)
expect_equal(response$content_type, "text/plain")
expect_equal(response$content, character(0))
})
test_that("can build a response with a content type", {
response <- tower::response_builder() |>
tower::set_content_type("application/json") |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "application/json")
expect_equal(response$content, "{}")
})
test_that("can build a response with a body", {
response <- tower::response_builder() |>
tower::add_body("Hello, world!") |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "text/plain")
expect_equal(response$content, "Hello, world!")
})
test_that("can build a response with a body and content type", {
response <- tower::response_builder() |>
tower::set_content_type("text/html") |>
tower::add_body("
Hello, world!
") |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "text/html")
expect_equal(response$content, "Hello, world!
")
})
test_that("shiny::tags get converted to html", {
response <- tower::response_builder() |>
tower::set_content_type("text/html") |>
tower::add_body(shiny::tags$h1("Hello, world!")) |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "text/html")
expect_equal(response$content, "Hello, world!
")
})
test_that("can build a response with a body as JSON", {
response <- tower::response_builder() |>
tower::add_body_json(list(a = 1, b = 2)) |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "application/json")
expect_equal(response$content, "{\"a\":[1],\"b\":[2]}")
})
test_that("can build a response with a body as JSON and content type", {
response <- tower::response_builder() |>
tower::set_content_type("application/json") |>
tower::add_body_json(list(a = 1, b = 2)) |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "application/json")
expect_equal(response$content, "{\"a\":[1],\"b\":[2]}")
})
test_that("can build a response with a raw body", {
response <- tower::response_builder() |>
tower::add_body(as.raw(0:255)) |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "application/octet-stream")
expect_equal(response$content, as.raw(0:255))
})
test_that("can build a response with a raw body and content type", {
response <- tower::response_builder() |>
tower::set_content_type("application/octet-stream") |>
tower::add_body(as.raw(0:255)) |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "application/octet-stream")
expect_equal(response$content, as.raw(0:255))
})
test_that("can build a response with cookies", {
response <- tower::response_builder() |>
tower::add_cookie("name", "value") |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "text/plain")
expect_equal(response$content, character(0))
expect_equal(response$headers$`Set-Cookie`, "name=value; path=/; SameSite=Lax; HttpOnly")
})
test_that("can build a response with many cookies", {
response <- tower::response_builder() |>
tower::add_cookie("name", "value") |>
tower::add_cookie("name2", "value2") |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "text/plain")
expect_equal(response$content, character(0))
# Get all headers with name "Set-Cookie"
cookies <- response$headers[names(response$headers) == "Set-Cookie"]
expect_equal(cookies[[1]], "name=value; path=/; SameSite=Lax; HttpOnly")
expect_equal(cookies[[2]], "name2=value2; path=/; SameSite=Lax; HttpOnly")
})
test_that("can build a response with a cookie and a body", {
response <- tower::response_builder() |>
tower::add_cookie("name", "value") |>
tower::add_body("Hello, world!") |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "text/plain")
expect_equal(response$content, "Hello, world!")
expect_equal(response$headers$`Set-Cookie`, "name=value; path=/; SameSite=Lax; HttpOnly")
})
test_that("can add headers to a response", {
response <- tower::response_builder() |>
tower::set_header("X-Test", "test") |>
tower::build_response()
expect_equal(response$status, 200)
expect_equal(response$content_type, "text/plain")
expect_equal(response$content, character(0))
expect_equal(response$headers$`X-Test`, "test")
})