Skip to content

Commit c0dd4dd

Browse files
committed
Refactor test code
1 parent b525899 commit c0dd4dd

File tree

2 files changed

+57
-54
lines changed

2 files changed

+57
-54
lines changed

src/clojure_game_geek/db.clj

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -44,58 +44,55 @@
4444

4545
(defn find-member-by-id
4646
[component member-id]
47-
(->> component
48-
:db
49-
deref
50-
:members
51-
(filter #(= member-id (:id %)))
52-
first))
47+
(-> (query! (:conn component)
48+
["select member_id, name, created_at, updated_at
49+
from member
50+
where member_id = $1" member-id])
51+
take!
52+
first))
5353

5454
(defn list-designers-for-game
5555
[component game-id]
56-
(let [designers (:designers (find-game-by-id component game-id))]
57-
(->> component
58-
:db
59-
deref
60-
:designers
61-
(filter #(contains? designers (:id %))))))
56+
(take!
57+
(query! (:conn component)
58+
["select d.designer_id, d.name, d.uri, d.created_at, d.updated_at
59+
from designer d
60+
inner join designer_to_game j on (d.designer_id = j.designer_id)
61+
where j.game_id = $1
62+
order by d.name" game-id])))
6263

6364
(defn list-games-for-designer
6465
[component designer-id]
65-
(->> component
66-
:db
67-
deref
68-
:games
69-
(filter #(-> % :designers (contains? designer-id)))))
66+
(take!
67+
(query! (:conn component)
68+
["select g.game_id, g.name, g.summary, g.min_players, g.max_players, g.created_at, g.updated_at
69+
from board_game g
70+
inner join designer_to_game j on (g.game_id = j.game_id)
71+
where j.designer_id = $1
72+
order by g.name" designer-id])))
7073

7174
(defn list-ratings-for-game
7275
[component game-id]
73-
(->> component
74-
:db
75-
deref
76-
:ratings
77-
(filter #(= game-id (:game_id %)))))
76+
(take!
77+
(query! (:conn component)
78+
["select game_id, member_id, rating, created_at, updated_at
79+
from game_rating
80+
where game_id = $1" game-id])))
7881

7982
(defn list-ratings-for-member
8083
[component member-id]
81-
(->> component
82-
:db
83-
deref
84-
:ratings
85-
(filter #(= member-id (:member_id %)))))
86-
87-
(defn ^:private apply-game-rating
88-
[game-ratings game-id member-id rating]
89-
(->> game-ratings
90-
(remove #(and (= game-id (:game_id %))
91-
(= member-id (:member_id %))))
92-
(cons {:game_id game-id
93-
:member_id member-id
94-
:rating rating})))
84+
(take!
85+
(query! (:conn component)
86+
["select game_id, member_id, rating, created_at, updated_at
87+
from game_rating
88+
where member_id = $1" member-id])))
9589

9690
(defn upsert-game-rating
9791
"Adds a new game rating, or changes the value of an existing game rating."
98-
[db game-id member-id rating]
99-
(-> db
100-
:db
101-
(swap! update :ratings apply-game-rating game-id member-id rating)))
92+
[component game-id member-id rating]
93+
(take!
94+
(query! (:conn component)
95+
["insert into game_rating (game_id, member_id, rating)
96+
values ($1, $2, $3)
97+
on conflict (game_id, member_id) do update set rating = $3"
98+
game-id member-id rating])))
Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(ns clojure-game-geek.system-tests
22
(:require
3-
[clojure.test :refer [deftest is]]
3+
[clojure.test :refer [deftest is use-fixtures]]
44
[clojure-game-geek.system :as system]
55
[clojure-game-geek.test-utils :refer [simplify]]
66
[com.stuartsierra.component :as component]
@@ -13,23 +13,29 @@
1313
(-> (system/new-system)
1414
(assoc-in [:server :port] 8989)))
1515

16+
(def ^:dynamic ^:private *system*)
17+
18+
(use-fixtures :once
19+
(fn [test-fn]
20+
(binding [*system* (component/start-system (test-system))]
21+
(try
22+
(test-fn)
23+
(finally
24+
(component/stop-system *system*))))))
25+
1626
(defn ^:private q
1727
"Extracts the compiled schema and executes a query."
18-
[system query variables]
19-
(-> system
28+
[query variables]
29+
(-> *system*
2030
(get-in [:schema-provider :schema])
2131
(lacinia/execute query variables nil)
2232
simplify))
2333

2434
(deftest can-read-board-game
25-
(let [system (component/start-system (test-system))
26-
results (q system
27-
"{ game_by_id(id: 1234) { name summary min_players max_players play_time }}"
28-
nil)]
29-
(is (= {:data {:game_by_id {:max_players 2
30-
:min_players 2
31-
:name "Zertz"
32-
:play_time nil
33-
:summary "Two player abstract with forced moves and shrinking board"}}}
34-
results))
35-
(component/stop-system system)))
35+
(is (= {:data {:game_by_id {:max_players 2
36+
:min_players 2
37+
:name "Zertz"
38+
:play_time nil
39+
:summary "Two player abstract with forced moves and shrinking board"}}}
40+
(q "{ game_by_id(id: 1234) { name summary min_players max_players play_time }}"
41+
nil))))

0 commit comments

Comments
 (0)