Refactor pages for testability and add tests

This commit is contained in:
Morgan Astra 2018-11-15 22:16:19 -08:00
parent ef32711b17
commit c63934ec56
2 changed files with 45 additions and 20 deletions

View File

@ -136,13 +136,20 @@
examples examples
(footer-block)]]))) (footer-block)]])))
(defn lookup-pronouns [pronouns-string] (defn table-lookup* [pronouns-string]
(let [inputs (s/split pronouns-string #"/") (let [inputs (s/split pronouns-string #"/")
n (count inputs)] n (count inputs)]
(if (>= n 5) (if (>= n 5)
(take 5 inputs) (take 5 inputs)
(u/table-lookup inputs @pronouns-table)))) (u/table-lookup inputs @pronouns-table))))
(defn lookup-pronouns
"Given a seq of pronoun sets, look up each set in the pronouns table"
[pronoun-sets]
(->> pronoun-sets
(map (comp table-lookup* escape-html))
(filter some?)))
(defn make-link [path] (defn make-link [path]
(let [link (str "/" path) (let [link (str "/" path)
label path] label path]
@ -184,8 +191,9 @@
[:ul links]]] [:ul links]]]
(footer-block)]))) (footer-block)])))
(defn not-found [] (defn not-found [path]
(let [title "Pronoun Island: English Language Examples"] (let [title "Pronoun Island: English Language Examples"
or-re #"/[oO][rR]/"]
(html (html
[:html [:html
[:head [:head
@ -194,18 +202,24 @@
[:link {:rel "stylesheet" :href "/pronouns.css"}]] [:link {:rel "stylesheet" :href "/pronouns.css"}]]
[:body [:body
(header-block title) (header-block title)
[:div {:class "section examples"} [:div {:class "section examples"}
[:p [:h2 (str "We couldn't find those pronouns in our database. " [:p [:h2 "We couldn't find those pronouns in our database :("]
"If you think we should have them, please reach out!")]]] "If you think we should have them, please reach out!"]
(when (re-find or-re path)
(let [alts (s/split path or-re)
new-path (str "/" (s/join "/:OR/" alts))]
[:div
"Did you mean: "
(href new-path
(str "pronoun.is"
new-path))]))]
(footer-block)]]))) (footer-block)]])))
(defn pronouns [params] (defn pronouns [params]
(let [path (params :*) (let [path (params :*)
alts (or (params "or") []) param-alts (u/vec-coerce (or (params "or") []))
pronouns (concat (s/split path #"/or/") (u/vec-coerce alts)) path-alts (s/split path #"/:[oO][rR]/")
pronoun-declensions (filter some? (map #(lookup-pronouns pronouns (lookup-pronouns (concat path-alts param-alts))]
(escape-html %)) (if (seq pronouns)
pronouns))] (format-pronoun-examples pronouns)
(if (seq pronoun-declensions) (not-found path))))
(format-pronoun-examples pronoun-declensions)
(not-found))))

View File

@ -4,9 +4,20 @@
(deftest prose-comma-list (deftest prose-comma-list
(testing "prose-comma-list turns a list of strings into a prose list" (testing "prose-comma-list turns a list of strings into a prose list"
(are [call result] (= call result) (are [v s] (= (pages/prose-comma-list v) s)
(pages/prose-comma-list ["foo"]) "foo" ["foo" "bar" "baz" "bobble"] "foo, bar, baz, and bobble"
(pages/prose-comma-list ["foo" "bar"]) "foo and bar" ["foo" "bar" "baz"] "foo, bar, and baz"
(pages/prose-comma-list ["foo" "bar" "baz"]) "foo, bar, and baz" ["foo" "bar"] "foo and bar"
(pages/prose-comma-list ["foo" "bar" "baz" "bobble"]) "foo, bar, baz, and bobble" ["foo"] "foo"
(pages/prose-comma-list []) ""))) [] "")))
(deftest lookup-pronouns
(are [pronoun-strs pronouns]
(= (pages/lookup-pronouns pronoun-strs)
pronouns)
["she/her"] '(["she" "her" "her" "hers" "herself"])
["she" "they"] '(["she" "her" "her" "hers" "herself"]
["they" "them" "their" "theirs" "themselves"])
["she/her" "foo/bar"] '(["she" "her" "her" "hers" "herself"])
["foo/bar"] '()
["a/b/c/d/e"] '(("a" "b" "c" "d" "e"))))