-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtiny-routes-middleware-cookie-test.lisp
68 lines (56 loc) · 2.38 KB
/
tiny-routes-middleware-cookie-test.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
;;;; tiny-routes-middleware-cookie-test.lisp
(in-package :cl-user)
(uiop:define-package :tiny-routes-middleware-cookie-test
(:use :cl :fiveam :tiny-routes.middleware.cookie))
(in-package :tiny-routes-middleware-cookie-test)
(def-suite* :tiny-routes-middleware-cookie-test
:description "The top level cookie middleware test.")
(defvar *cookie1* (cookie:make-cookie :name "name1" :value "value1"))
(defvar *cookie2* (cookie:make-cookie :name "name2" :value "value2"))
(defvar *cookie3*
(cookie:make-cookie
:name "name3" :value "value3"
:expires (encode-universal-time 6 22 19 25 1 2002)
:path "/"
:domain "example.com"
:secure-p t
:httponly-p nil))
(defvar *cookie4*
(cookie:make-cookie
:name "name4" :value "value4"
:expires (encode-universal-time 6 22 19 25 1 2002)
:path "/"
:domain "example.com"
:secure-p nil
:httponly-p t))
(defvar *cookie-header* "name1=value1;name2=value2")
(test parse-cookie-header-tests
(is (cookie:cookie= *cookie1* (first (parse-cookie-header *cookie-header*))))
(is (cookie:cookie= *cookie2* (second (parse-cookie-header *cookie-header*)))))
(defun echo-handler (request)
request)
(defun mock-request (&key cookies)
(let ((headers (make-hash-table :test 'equal)))
(when cookies
(setf (gethash "cookie" headers)
(cl-cookie:write-cookie-header cookies)))
(tiny:make-request :headers headers)))
(test wrap-request-cookies-tests
(let* ((mock-request (mock-request :cookies (list *cookie1* *cookie2*)))
(handler (wrap-request-cookies #'echo-handler))
(echo (funcall handler mock-request)))
(is (cookie:cookie= *cookie1* (first (tiny:request-get echo :cookies))))
(is (cookie:cookie= *cookie2* (second (tiny:request-get echo :cookies))))))
(defun handler (request)
(declare (ignore request))
(tiny:ok "TEST"))
(test wrap-response-cookies-tests
(let* ((mock-request (mock-request))
(handler (wrap-response-cookies #'handler (list *cookie3* *cookie4*)))
(response (funcall handler mock-request))
(headers (tiny:response-headers response)))
(is (= 4 (length headers)))
(is (string= "name3=value3; Expires=Sat, 26 Jan 2002 00:22:06 GMT; Path=/; Domain=example.com; Secure"
(second headers)))
(is (string= "name4=value4; Expires=Sat, 26 Jan 2002 00:22:06 GMT; Path=/; Domain=example.com; HttpOnly"
(fourth headers)))))