
CookiesTest.pudu
Pudu45 lines2.2 KB
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 HttpClient91011fn 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