1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2014-2015 Alexandre Terrasa <alexandre@moz-code.org>
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 # Test module for `listener.nit`
18 module test_listener
is test_suite
23 import events_generator
25 private class DummyListener
26 super NitrpgTestHelper
28 var reactors
= new Array[GameReactor]
30 fun apply_event
(event
: GithubEvent, db
: MongoDb) do
31 var game
= load_game
(event
.repo
.full_name
, db
)
32 for reactor
in reactors
do
33 reactor
.react_event
(game
, event
)
37 fun add_reactor
(reactors
: GameReactor...) do self.reactors
.add_all reactors
41 super NitrpgTestHelper
43 var generator
= new EventsGenerator(api
)
45 var repo
: Repo is lazy
do return load_repo
("Morriar/nit")
47 fun test_game_issue_stats
do
49 var l
= new DummyListener
50 l
.add_reactor
(new StatisticsReactor)
52 var issue
= api
.load_issue
(repo
, 322)
55 l
.apply_event
(generator
.issue_open
(issue
), db
)
56 var game
= load_game
("Morriar/nit", db
)
57 assert game
.stats
.overall
["issues"] == 1
58 assert game
.stats
.overall
["issues_open"] == 1
59 l
.apply_event
(generator
.issue_close
(issue
), db
)
60 game
= load_game
("Morriar/nit", db
)
61 assert game
.stats
.overall
["issues"] == 1
62 assert game
.stats
.overall
["issues_open"] == 0
63 l
.apply_event
(generator
.issue_reopen
(issue
), db
)
64 game
= load_game
("Morriar/nit", db
)
65 assert game
.stats
.overall
["issues"] == 1
66 assert game
.stats
.overall
["issues_open"] == 1
69 fun test_player_issue_stats
do
71 var game
= load_game
("Morriar/nit", db
)
72 var l
= new DummyListener
73 l
.add_reactor
(new StatisticsReactor)
75 var issue
= api
.load_issue
(repo
, 322)
78 l
.apply_event
(generator
.issue_open
(issue
), db
)
79 var player
= new Player(game
, "Morriar")
80 assert player
.stats
.overall
["issues"] == 1
81 assert player
.stats
.overall
["issues_open"] == 1
82 l
.apply_event
(generator
.issue_close
(issue
), db
)
83 player
= new Player(game
, "Morriar")
84 assert player
.stats
.overall
["issues"] == 1
85 assert player
.stats
.overall
["issues_open"] == 0
86 l
.apply_event
(generator
.issue_reopen
(issue
), db
)
87 player
= new Player(game
, "Morriar")
88 assert player
.stats
.overall
["issues"] == 1
89 assert player
.stats
.overall
["issues_open"] == 1
92 fun test_game_pr_stats
do
94 var l
= new DummyListener
95 l
.add_reactor
(new StatisticsReactor)
97 var pr
= api
.load_pull
(repo
, 275)
100 l
.apply_event
(generator
.pull_open
(pr
), db
)
101 var game
= load_game
("Morriar/nit", db
)
102 assert game
.stats
.overall
["pulls"] == 1
103 assert game
.stats
.overall
["pulls_open"] == 1
104 assert game
.stats
.overall
["commits"] == 0
106 l
.apply_event
(generator
.pull_close
(pr
), db
)
107 game
= load_game
("Morriar/nit", db
)
108 assert game
.stats
.overall
["pulls"] == 1
109 assert game
.stats
.overall
["pulls_open"] == 0
110 assert game
.stats
.overall
["commits"] == 0
111 l
.apply_event
(generator
.pull_reopen
(pr
), db
)
112 game
= load_game
("Morriar/nit", db
)
113 assert game
.stats
.overall
["pulls"] == 1
114 assert game
.stats
.overall
["pulls_open"] == 1
115 assert game
.stats
.overall
["commits"] == 0
117 l
.apply_event
(generator
.pull_close
(pr
), db
)
118 game
= load_game
("Morriar/nit", db
)
119 assert game
.stats
.overall
["pulls"] == 1
120 assert game
.stats
.overall
["pulls_open"] == 0
121 assert game
.stats
.overall
["commits"] == 2
124 fun test_game_issue_comment_stats
do
126 var l
= new DummyListener
127 l
.add_reactor
(new StatisticsReactor)
129 var issue
= api
.load_issue
(repo
, 322)
131 var comment
= api
.load_issue_comment
(repo
, 76119442)
132 assert comment
!= null
134 comment
.body
= "foo bar"
135 l
.apply_event
(generator
.issue_comment_event
(issue
, comment
), db
)
136 var game
= load_game
("Morriar/nit", db
)
137 assert game
.stats
.overall
["comments"] == 1
138 assert game
.stats
.overall
["reviews"] == 0
139 comment
.body
= "foo +1 bar"
140 l
.apply_event
(generator
.issue_comment_event
(issue
, comment
), db
)
141 game
= load_game
("Morriar/nit", db
)
142 assert game
.stats
.overall
["comments"] == 2
143 assert game
.stats
.overall
["reviews"] == 1
146 fun test_player_pull_reactor
do
148 var game
= load_game
("Morriar/nit", db
)
149 var l
= new DummyListener
150 l
.add_reactor
(new PlayerReactor)
152 var pull
= api
.load_pull
(repo
, 275)
155 l
.apply_event
(generator
.pull_open
(pull
), db
)
156 var player
= new Player(game
, "itch76")
157 assert player
.stats
.overall
["nitcoins"] == 10
159 l
.apply_event
(generator
.pull_close
(pull
), db
)
160 player
= new Player(game
, "itch76")
161 assert player
.stats
.overall
["nitcoins"] == 0
162 l
.apply_event
(generator
.pull_reopen
(pull
), db
)
163 player
= new Player(game
, "itch76")
164 assert player
.stats
.overall
["nitcoins"] == 10
166 l
.apply_event
(generator
.pull_close
(pull
), db
)
167 player
= new Player(game
, "itch76")
168 assert player
.stats
.overall
["nitcoins"] == 12
171 fun test_player_review_reactor
do
173 var game
= load_game
("Morriar/nit", db
)
174 var l
= new DummyListener
175 l
.add_reactor
(new PlayerReactor)
177 var pull
= api
.load_pull
(repo
, 275)
179 var comment
= api
.load_issue_comment
(repo
, 36961230)
180 assert comment
!= null
182 # TODO handle multiple review by the same user
184 # no review in opened issue
186 comment
.body
= "foo bar"
187 l
.apply_event
(generator
.issue_comment_event
(pull
, comment
), db
)
188 var player
= new Player(game
, "Morriar")
189 assert player
.stats
.overall
["nitcoins"] == 0
191 # review in opened issue
193 comment
.body
= "foo +1 bar"
194 l
.apply_event
(generator
.issue_comment_event
(pull
, comment
), db
)
195 player
= new Player(game
, "Morriar")
196 print player
.stats
.overall
["nitcoins"]
197 assert player
.stats
.overall
["nitcoins"] == 2
199 # review in closed issue
200 pull
.state
= "closed"
201 comment
.body
= "foo +1 bar"
202 l
.apply_event
(generator
.issue_comment_event
(pull
, comment
), db
)
203 player
= new Player(game
, "Morriar")
204 assert player
.stats
.overall
["nitcoins"] == 2
206 # review in reopened issue
208 comment
.body
= "foo +1 bar"
209 l
.apply_event
(generator
.issue_comment_event
(pull
, comment
), db
)
210 player
= new Player(game
, "Morriar")
211 assert player
.stats
.overall
["nitcoins"] == 4
214 fun test_X_issues_achievements
do
216 var game
= load_game
("Morriar/nit", db
)
217 var l
= new DummyListener
218 l
.add_reactor
(new StatisticsReactor)
219 l
.add_reactor
(new Player1Issue, new Player100Issues, new Player1KIssues)
221 var issue
= api
.load_issue
(repo
, 322)
224 for i
in [0, 99, 999] do
225 var id
= "player_{i + 1}_issue"
226 if i
> 0 then id
= "{id}s"
227 var player
= new Player(game
, "Morriar")
228 player
.stats
["issues"] = i
230 l
.apply_event
(generator
.issue_open
(issue
), db
)
231 assert player
.load_achievements
.has_key
(id
)
233 var player
= new Player(game
, "Morriar")
234 assert player
.stats
.overall
["nitcoins"] == 1110
237 fun test_X_pulls_achievements
do
239 var game
= load_game
("Morriar/nit", db
)
240 var l
= new DummyListener
241 l
.add_reactor
(new StatisticsReactor)
242 l
.add_reactor
(new Player1Pull, new Player100Pulls, new Player1KPulls)
244 var pull
= api
.load_pull
(repo
, 275)
247 for i
in [0, 99, 999] do
248 var id
= "player_{i + 1}_pull"
249 if i
> 0 then id
= "{id}s"
250 var player
= new Player(game
, "itch76")
251 player
.stats
["pulls"] = i
253 l
.apply_event
(generator
.pull_open
(pull
), db
)
254 assert player
.load_achievements
.has_key
(id
)
256 var player
= new Player(game
, "itch76")
257 assert player
.stats
.overall
["nitcoins"] == 1110
260 fun test_X_commits_achievements
do
262 var game
= load_game
("Morriar/nit", db
)
263 var l
= new DummyListener
264 l
.add_reactor
(new StatisticsReactor)
265 l
.add_reactor
(new Player1Commit, new Player100Commits)
266 l
.add_reactor
(new Player1KCommits, new Player10KCommits)
268 var pull
= api
.load_pull
(repo
, 275)
270 pull
.state
= "closed"
273 for i
in [0, 99, 999, 9999] do
274 var id
= "player_{i + 1}_commit"
275 if i
> 0 then id
= "{id}s"
276 var player
= new Player(game
, "itch76")
277 player
.stats
["commits"] = i
279 l
.apply_event
(generator
.pull_close
(pull
), db
)
280 assert player
.load_achievements
.has_key
(id
)
282 var player
= new Player(game
, "itch76")
283 assert player
.stats
.overall
["nitcoins"] == 11110
286 fun test_X_comments_achievements
do
288 var game
= load_game
("Morriar/nit", db
)
289 var l
= new DummyListener
290 l
.add_reactor
(new StatisticsReactor)
291 l
.add_reactor
(new Player1Comment, new Player100Comments, new Player1KComments)
293 var pull
= api
.load_pull
(repo
, 275)
295 var comment
= api
.load_issue_comment
(repo
, 36961230)
296 assert comment
!= null
298 for i
in [0, 99, 999] do
299 var id
= "player_{i + 1}_comment"
300 if i
> 0 then id
= "{id}s"
301 var player
= new Player(game
, "Morriar")
302 player
.stats
["comments"] = i
304 l
.apply_event
(generator
.issue_comment_event
(pull
, comment
), db
)
305 assert player
.load_achievements
.has_key
(id
)
307 var player
= new Player(game
, "Morriar")
308 assert player
.stats
.overall
["nitcoins"] == 1110
311 fun test_issues_achievements
do
313 var game
= load_game
("Morriar/nit", db
)
314 var l
= new DummyListener
315 l
.add_reactor
(new IssueAboutNitdoc, new IssueAboutFFI)
317 var issue
= api
.load_issue
(repo
, 322)
320 issue
.title
= "nitdoc ffi"
321 l
.apply_event
(generator
.issue_open
(issue
), db
)
322 var player
= new Player(game
, "Morriar")
323 assert player
.load_achievements
.has_key
("issue_about_nitdoc")
324 assert player
.load_achievements
.has_key
("issue_about_ffi")
325 assert player
.stats
.overall
["nitcoins"] == 20
328 fun test_comments_reactor
do
330 var game
= load_game
("Morriar/nit", db
)
331 var l
= new DummyListener
332 l
.add_reactor
(new PlayerPingGod, new PlayerFirstReview, new PlayerSaysNitcoin)
334 var pull
= api
.load_pull
(repo
, 275)
336 var comment
= api
.load_issue_comment
(repo
, 36961230)
337 assert comment
!= null
339 comment
.body
= "@{game.repo.owner.login}"
340 l
.apply_event
(generator
.issue_comment_event
(pull
, comment
), db
)
341 var player
= new Player(game
, "Morriar")
342 assert player
.load_achievements
.has_key
("player_ping_god")
343 assert player
.stats
.overall
["nitcoins"] == 50
346 l
.apply_event
(generator
.issue_comment_event
(pull
, comment
), db
)
347 player
= new Player(game
, "Morriar")
348 assert player
.load_achievements
.has_key
("player_first_review")
349 assert player
.stats
.overall
["nitcoins"] == 60
351 comment
.body
= "Nitcoins"
352 l
.apply_event
(generator
.issue_comment_event
(pull
, comment
), db
)
353 player
= new Player(game
, "Morriar")
354 assert player
.load_achievements
.has_key
("player_says_nitcoin")
355 assert player
.stats
.overall
["nitcoins"] == 70