blob: 72a5bf79c5ec9eefff405649c3bf38df2905246e (
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
(ns weepinbell.retriever-test
(:require [clojure.test :refer [deftest testing is]]
[weepinbell.utils.digest :refer [digest]]
[weepinbell.webserver.retriever :as ret]))
(def page-size 1)
(defn- make-bare-wm [number]
{:webmention {:source (str number) :target (str number)
:id (digest (str number))
:modified (System/currentTimeMillis)}})
(defn- make-typed-wm [type number]
(-> (make-bare-wm number)
(assoc :jf2 {:wm-property type})))
(deftest retrieve-by-domain-test
(testing "by-domain list paging"
(with-redefs [weepinbell.webserver.retriever/default-page-size page-size]
(let [mock-data (mapv make-bare-wm (range 2))
mock-store {:get-by-domain (fn [& _] mock-data)}
resp0 (ret/by-domain "" 0 mock-store {})
resp1 (ret/by-domain "" 1 mock-store {})]
(is (= page-size (count (:body resp0))))
(is (= page-size (count (:body resp1)))))))
(testing "by-domain return 404 when list is empty"
(let [mock-store {:get-by-domain (fn [& _] [])}
resp (ret/by-domain "" nil mock-store {})]
(is (= 404 (:status resp)))
(is (= "The requested webmention list does not exist."
(get-in resp [:body :message]))))))
(deftest retrieve-by-url-test
(testing "by-url list paging"
(with-redefs [weepinbell.webserver.retriever/default-page-size page-size]
(let [mock-data (mapv make-bare-wm (range 2))
mock-store {:get-by-domain (fn [& _] mock-data)}
resp0 (ret/by-url "2" 0 mock-store {})
resp1 (ret/by-url "2" 1 mock-store {})]
(is (= page-size (count (:body resp0))))
(is (= page-size (count (:body resp1)))))))
(testing "by-url with no url provieded"
(with-redefs [weepinbell.webserver.retriever/default-page-size page-size]
(let [mock-store {:get-by-domain (fn [& _])}
resp (ret/by-url nil 0 mock-store {})]
(is (= 400 (:status resp)))
(is (= "Missing URL. Specify target URL whose webmentions you are querying."
(get-in resp [:body :message]))))))
(testing "by-url return 404 when list is empty"
(with-redefs [weepinbell.webserver.retriever/default-page-size page-size]
(let [mock-store {:get-by-domain (fn [& _])}
resp (ret/by-url "" nil mock-store {})]
(is (= 404 (:status resp)))
(is (= "The requested webmention list does not exist."
(get-in resp [:body :message])))))))
(defn- should-404 [data]
(let [mock-store {:get (fn [& _] data)}
resp (ret/by-id "" mock-store)]
(is (= 404 (:status resp)))
(is (= "The requested webmention does not exist."
(get-in resp [:body :message])))))
(deftest retrieve-by-id-test
(testing "by-id return 404 when no webmention is matched"
(doseq [no-data [{} [] nil]]
(should-404 no-data))))
(deftest filter-by-jf2type-test
(testing "by-domain ?jf2type filter"
(let [like-wms (mapv (partial make-typed-wm :like-of) (range 2))
reply-wms (mapv (partial make-typed-wm :in-reply-to) (range 3))
mock-data (reduce into [] [like-wms reply-wms])
mock-store {:get-by-domain (fn [& _] mock-data)}
;; responses
resp-like (ret/by-domain "" 0 mock-store {:type :like-of})
resp-reply (ret/by-domain "" 0 mock-store {:type :in-reply-to})]
(is (= reply-wms (:body resp-reply)))
(is (= like-wms (:body resp-like)))))
(testing "by-url ?jf2type filter"
(let [like-wms (mapv (partial make-typed-wm :like-of) (range 2))
reply-wms (mapv (partial make-typed-wm :in-reply-to) (range 3))
mock-data (reduce into [] [like-wms reply-wms])
mock-store {:get-by-domain (fn [& _] mock-data)}
;; responses
resp-like (ret/by-url "" 0 mock-store {:type :like-of})
resp-reply (ret/by-url "" 0 mock-store {:type :in-reply-to})]
(is (= reply-wms (:body resp-reply)))
(is (= like-wms (:body resp-like))))))
(deftest paging-edge-cases-test
(testing "if page is a string that can be parsed to number, it should work"
(with-redefs [weepinbell.webserver.retriever/default-page-size page-size]
(let [mock-data (mapv make-bare-wm (range 2))
mock-store {:get-by-domain (fn [& _] mock-data)}
resp0 (ret/by-domain "" "0" mock-store {})
resp1 (ret/by-domain "" 0 mock-store {})]
(is (= resp0 resp1)))))
(testing "if page is not number, return the last page frame"
(with-redefs [weepinbell.webserver.retriever/default-page-size page-size]
(let [mock-data (mapv make-bare-wm (range 2))
mock-store {:get-by-domain (fn [& _] mock-data)}
resp (ret/by-domain "" true mock-store {})]
(is (= 200 (:status resp)))
(is (= (-> mock-data last :webmention)
(-> resp :body last :webmention))))))
(testing "if page is larger than total amount of pages, return error"
(with-redefs [weepinbell.webserver.retriever/default-page-size page-size]
(let [mock-data [(make-bare-wm page-size)]
mock-store {:get-by-domain (fn [& _] mock-data)}
resp (ret/by-domain "" (inc page-size) mock-store {})]
(is (= 400 (:status resp)))))))
|