summaryrefslogtreecommitdiff
path: root/compojure-3.2/test/compojure/http/session_test.clj
blob: 0e3079319549bf0f72a7865c57e7e9ae2b77313c (plain)
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
69
70
71
72
73
(ns compojure.http.session-test
  (:use compojure.crypto
        compojure.encodings
        compojure.http.session
        clojure.contrib.test-is)
  (:import javax.crypto.spec.IvParameterSpec
           javax.crypto.spec.SecretKeySpec))

;; Memory sessions

(deftest create-memory-session
  (is (= (keys (create-session {:type :memory}))
         [:id])))

(deftest memory-session-cookie
  (let [repo    {:type :memory}
        session (create-session repo)]
    (is (= (session-cookie repo true session) (session :id)))
    (is (nil? (session-cookie repo false session)))))

(deftest read-memory-session
  (binding [memory-sessions (ref {::mock-id ::mock-session})]
    (is (= (read-session {:type :memory} ::mock-id)
           ::mock-session))))

(deftest write-memory-session
  (binding [memory-sessions (ref {})]
    (let [session (create-session {:type :memory})]
      (write-session {:type :memory} session)
      (is (= (memory-sessions (session :id))
             session)))))

(deftest destroy-memory-sessions
  (let [mock-session {:id ::mock-id}]
    (binding [memory-sessions (ref {::mock-id mock-session})]
      (destroy-session {:type :memory} mock-session)
      (is (not (contains? @memory-sessions ::mock-id))))))

;; Cookie sessions

(deftest create-cookie-session
  (is (= (create-session {:type :cookie}) {})))

;; Associating session with request

(defmethod create-session ::mock [repository]
  {:id :new})

(defmethod read-session ::mock [repository id]
  {:id :current})

(deftest assoc-nil-session
  (let [request (assoc-session {} {:type ::mock})]
    (is (:new-session? request))
    (is (= (:session request) {:id :new}))))

(deftest assoc-expired-session
  (let [session {:expires-at (timestamp-after 0)}
        request (assoc-session {:session session} {:type ::mock})]
    (is (:new-session? request))
    (is (= (:session request) {:id :new}))))

(deftest assoc-existing-session
  (let [cookies {:compojure-session "current"}
        request (assoc-session {:cookies cookies} {:type ::mock})]
    (is (not (:new-session? request)))
    (is (= (:session request) {:id :current}))))

(deftest assoc-flash-data
  (let [session {:flash {:message "test"}}
        request (assoc-flash {:session session})]
    (is (not (contains? (request :session) :flash)))
    (is (= (request :flash) {:message "test"}))))