headers <- list(
Content_Type = 'application/json',
Date = 'Wed, 21 Oct 2015 07:28:00 GMT',
Accept = 'application/json, application/xml; q=0.5, text/*; q=0.3',
Accept_Encoding = 'gzip, br',
Cookie = 'id=Thomas; key=123',
X_Forwarded_For = '500.0.0.0, 400.0.0.0',
X_Forwarded_Host = 'www.example.com:80',
X_Forwarded_Proto = 'https',
X_Custom_Message = '"Testing string literals, with comma", no-literal'
)
body <- '{"name":["Thomas Lin Pedersen"],"age":[31],"homepage":["www.data-imaginist.com","www.github.com/thomasp85"]}'
rook <- fiery::fake_request(
url = 'http://127.0.0.1:80/summary?id=2347&user=Thomas+Lin+Pedersen',
content = body,
headers = headers,
REMOTE_ADDR = '230.45.12.45'
)
key <- random_key()
session_cookie <- session_cookie()
test_that("Requests know about session cookies", {
# No session cookie settings
req <- Request$new(rook)
res <- req$respond()
expect_null(req$session_cookie_settings)
expect_null(res$session_cookie_settings)
expect_false(req$has_key)
expect_false(res$has_key)
expect_equal(req$session, list())
expect_equal(res$session, list())
expect_false(req$has_session_cookie)
# Settings but no cookie
req <- Request$new(rook, key = key, session_cookie = session_cookie)
res <- req$respond()
expect_equal(req$session_cookie_settings, session_cookie)
expect_equal(res$session_cookie_settings, session_cookie)
expect_true(req$has_key)
expect_true(res$has_key)
expect_equal(req$session, list())
expect_equal(res$session, list())
expect_false(req$has_session_cookie)
# Adding session cookie to request
session_val <- list(test = 4)
val <- url_encode(req$encode_string(jsonlite::toJSON(session_val)))
old_cookie <- rook$HTTP_COOKIE
rook$HTTP_COOKIE <- paste0(old_cookie, "; ", session_cookie$name, "=", val)
# Cookie but no settings
req <- Request$new(rook)
res <- req$respond()
expect_null(req$session_cookie_settings)
expect_null(res$session_cookie_settings)
expect_false(req$has_key)
expect_false(res$has_key)
expect_equal(req$session, list())
expect_equal(res$session, list())
expect_false(req$has_session_cookie)
# Cookie and settings
req <- Request$new(rook, key = key, session_cookie = session_cookie)
res <- req$respond()
expect_equal(req$session_cookie_settings, session_cookie)
expect_equal(res$session_cookie_settings, session_cookie)
expect_true(req$has_key)
expect_true(res$has_key)
expect_equal(req$session, session_val)
expect_equal(res$session, session_val)
expect_true(req$has_session_cookie)
rook$HTTP_COOKIE <- old_cookie
})
test_that("Response knows how to handle session cookies", {
# No session cookie settings
req <- Request$new(rook)
res <- req$respond()
expect_snapshot(res$session$test <- 4)
expect_equal(res$session, list())
# Adding session cookie to request
req <- Request$new(rook, key = key, session_cookie = session_cookie)
session_val <- list(test = 4)
val <- url_encode(req$encode_string(jsonlite::toJSON(session_val)))
old_cookie <- rook$HTTP_COOKIE
rook$HTTP_COOKIE <- paste0(old_cookie, "; ", session_cookie$name, "=", val)
req <- Request$new(rook, key = key, session_cookie = session_cookie)
res <- req$respond()
set_cookie <- res$as_list()$headers[["set-cookie"]]
expect_true(grepl(paste0("^", session_cookie$name, "=.*; HttpOnly$"), set_cookie))
cookie_val <- sub(paste0("^", session_cookie$name, "=(.*); HttpOnly$"), "\\1", set_cookie)
expect_equal(jsonlite::fromJSON(res$decode_string(url_decode(cookie_val))), res$session)
res$session$test2 <- "A"
set_cookie <- res$as_list()$headers[["set-cookie"]]
cookie_val <- sub(paste0("^", session_cookie$name, "=(.*); HttpOnly$"), "\\1", set_cookie)
expect_equal(jsonlite::fromJSON(res$decode_string(url_decode(cookie_val))), res$session)
res$session <- NULL
set_cookie <- res$as_list()$headers[["set-cookie"]]
expect_equal(set_cookie, paste0(session_cookie$name, "=; Expires=Thu, 01 Jan 1970 00:00:00 GMT"))
rook$HTTP_COOKIE <- old_cookie
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.