Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-httpclient

Named HTTP clients for Pudu: a client factory, delegating handlers, pooled keep-alive connections, handler lifetimes, logging, and resilience

0.1.1Apache-2.01

InstallClose

CookiesTest.pudu

Pudu45 lines2.2 KB

GitHub ↗
1/** @Test.Cookies.Suite — a jar of cookies shared by the requests of one transport */2module PuduLangHttpClient.CookiesTest34import Std.Io as Io5import Std.Test as Test6import PuduLangHttpClient.Cookies as Cookies7import PuduLangHttpClient.Domain.Cookie as Cookie8import PuduLangHttpClient as HttpClient910/// Runs the suite.11fn main() -> Int {12  let jar = Cookies.jar()13  Cookies.store(&jar, "https://shop.test/cart/items", &["cart=3; Path=/cart; Max-Age=3600", "session=s1", "secure=1; Secure; Max-Age=3600", "broken"])14  Cookies.add(&jar, "https://shop.test/", "lang", "en")15  Cookies.store(&jar, "not an address", &["x=1"])16  let atCart = Cookies.header(&jar, "https://shop.test/cart/add")17  let plainRoot = Cookies.header(&jar, "http://shop.test/")18  let elsewhere = Cookies.header(&jar, "https://other.test/")19  let saved = Cookies.save(&jar)20  let restoredJar = Cookies.jar()21  let restored = Cookies.restore(&restoredJar, saved)22  let refused = Cookies.restore(&Cookies.jar(), "not json")23  Cookies.clearSession(&jar)24  let afterSession = Cookies.cookies(&jar).map(|cookie: Cookie.Stored| cookie.name)25  Cookies.clear(&jar)26  let checks = Test.suite("Cookies", &[27      Test.equals("a request carries the cookies for its host, path, and security, longer paths first", &atCart, &Some("cart=3; session=s1; secure=1; lang=en")),28      Test.equals("a plain request at the root carries neither the secured cookies nor those under a deeper default path", &plainRoot, &Some("lang=en")),29      Test.equals("another host carries none", &elsewhere, &None),30      Test.equals("an address that is not http matches nothing", &Cookies.cookiesFor(&jar, "mailto:x"), &[]),31      Test.equals("saving and restoring keeps the persistent cookies", &(restored, Cookies.cookies(&restoredJar).map(|cookie: Cookie.Stored| cookie.name)), &(Ok(()), ["cart", "secure"])),32      Test.that("text that is not a saved jar is refused", match refused {33          case Err(HttpClient.Unreadable(_)) => true34          case _ => false35        }),36      Test.equals("clearing the session keeps the persistent cookies", &afterSession, &["cart", "secure"]),37      Test.equals("clearing empties the jar", &Cookies.cookies(&jar), &[])38    ])39  let ran = Test.run(&checks)40  for failure in Test.failuresOf(&ran) {41    let _reported = Io.writeErrorLine(failure)42  }43  Test.report(&ran)44}45