test_that("as_attachment shape", {
val <- as_attachment(iris, "name.csv")
expect_s3_class(val, "plumber_attachment")
expect_equal(val$value, iris)
expect_equal(val$filename, "name.csv")
})
test_that("disposition is not added unless content type exists", {
val <- as_attachment("
Hi!
")
res <- serializer_headers(list(), identity)(val, list(), PlumberResponse$new(), stop)
expect_null(res$headers$`Content-Disposition`)
})
test_that("disposition is not added unless content type exists", {
val <- as_attachment("Hi!
")
res <- serializer_content_type("text/html; charset=UTF-8", identity)(val, list(), PlumberResponse$new(), stop)
expect_equal(res$headers$`Content-Type`, "text/html; charset=UTF-8")
expect_equal(res$headers$`Content-Disposition`, "attachment")
expect_equal(res$body, val$value)
expect_equal(res$status, 200L)
})
test_that("disposition file can not contain quotes", {
val <- as_attachment("Hi!
", filename = "quote\".csv")
expect_error({
serializer_content_type("text/html; charset=UTF-8", identity)(val, list(), PlumberResponse$new(), stop)
})
val <- as_attachment("Hi!
", filename = "quote'.csv")
expect_error({
serializer_content_type("text/html; charset=UTF-8", identity)(val, list(), PlumberResponse$new(), stop)
})
})
test_that("disposition is added", {
val <- as_attachment("Hi!
", filename = "dispo.html")
res <- serializer_content_type("text/html; charset=UTF-8", identity)(val, list(), PlumberResponse$new(), stop)
expect_equal(res$headers$`Content-Type`, "text/html; charset=UTF-8")
expect_equal(res$headers$`Content-Disposition`,"attachment; filename=\"dispo.html\"")
expect_equal(res$body, val$value)
expect_equal(res$status, 200L)
})
test_that("disposition is not overwritten", {
val <- as_attachment("Hi!
", filename = "dispo.html")
res <- serializer_headers(
list(
"Content-Type" = "text/html; charset=UTF-8",
"Content-Disposition" = "attachment; filename=\"original.html\""
),
identity
)(val, list(), PlumberResponse$new(), stop)
expect_equal(res$headers$`Content-Type`, "text/html; charset=UTF-8")
expect_equal(res$headers$`Content-Disposition`,"attachment; filename=\"original.html\"")
expect_equal(res$body, val$value)
expect_equal(res$status, 200L)
})