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
23 import events_generator
25 private class DummyListener
26 super NitrpgTestHelper
29 var reactors
= new Array[GameReactor]
31 fun apply_event
(event
: GithubEvent, db
: MongoDb) do
32 var game
= load_game
(event
.repo
.full_name
, db
)
33 for reactor
in reactors
do
34 reactor
.react_event
(game
, event
)
38 fun add_reactor
(reactors
: GameReactor...) do self.reactors
.add_all reactors
42 super NitrpgTestHelper
45 var generator
= new EventsGenerator(api
)
47 var repo
: Repo is lazy
do return load_repo
("Morriar/nit")
49 fun test_game_issue_stats
is test
do
51 var l
= new DummyListener
52 l
.add_reactor
(new StatisticsReactor)
54 var issue
= api
.load_issue
(repo
, 322)
57 l
.apply_event
(generator
.issue_open
(repo
, issue
), db
)
58 var game
= load_game
("Morriar/nit", db
)
59 assert game
.stats
.overall
["issues"] == 1
60 assert game
.stats
.overall
["issues_open"] == 1
61 l
.apply_event
(generator
.issue_close
(repo
, issue
), db
)
62 game
= load_game
("Morriar/nit", db
)
63 assert game
.stats
.overall
["issues"] == 1
64 assert game
.stats
.overall
["issues_open"] == 0
65 l
.apply_event
(generator
.issue_reopen
(repo
, issue
), db
)
66 game
= load_game
("Morriar/nit", db
)
67 assert game
.stats
.overall
["issues"] == 1
68 assert game
.stats
.overall
["issues_open"] == 1
71 fun test_player_issue_stats
is test
do
73 var game
= load_game
("Morriar/nit", db
)
74 var l
= new DummyListener
75 l
.add_reactor
(new StatisticsReactor)
77 var issue
= api
.load_issue
(repo
, 322)
80 l
.apply_event
(generator
.issue_open
(repo
, issue
), db
)
81 var player
= new Player(game
, "Morriar")
82 assert player
.stats
.overall
["issues"] == 1
83 assert player
.stats
.overall
["issues_open"] == 1
84 l
.apply_event
(generator
.issue_close
(repo
, issue
), db
)
85 player
= new Player(game
, "Morriar")
86 assert player
.stats
.overall
["issues"] == 1
87 assert player
.stats
.overall
["issues_open"] == 0
88 l
.apply_event
(generator
.issue_reopen
(repo
, issue
), db
)
89 player
= new Player(game
, "Morriar")
90 assert player
.stats
.overall
["issues"] == 1
91 assert player
.stats
.overall
["issues_open"] == 1
94 fun test_game_pr_stats
is test
do
96 var l
= new DummyListener
97 l
.add_reactor
(new StatisticsReactor)
99 var pr
= api
.load_pull
(repo
, 275)
102 l
.apply_event
(generator
.pull_open
(repo
, pr
), db
)
103 var game
= load_game
("Morriar/nit", db
)
104 assert game
.stats
.overall
["pulls"] == 1
105 assert game
.stats
.overall
["pulls_open"] == 1
106 assert game
.stats
.overall
["commits"] == 0
108 l
.apply_event
(generator
.pull_close
(repo
, pr
), db
)
109 game
= load_game
("Morriar/nit", db
)
110 assert game
.stats
.overall
["pulls"] == 1
111 assert game
.stats
.overall
["pulls_open"] == 0
112 assert game
.stats
.overall
["commits"] == 0
113 l
.apply_event
(generator
.pull_reopen
(repo
, pr
), db
)
114 game
= load_game
("Morriar/nit", db
)
115 assert game
.stats
.overall
["pulls"] == 1
116 assert game
.stats
.overall
["pulls_open"] == 1
117 assert game
.stats
.overall
["commits"] == 0
119 l
.apply_event
(generator
.pull_close
(repo
, pr
), db
)
120 game
= load_game
("Morriar/nit", db
)
121 assert game
.stats
.overall
["pulls"] == 1
122 assert game
.stats
.overall
["pulls_open"] == 0
123 assert game
.stats
.overall
["commits"] == 2
126 fun test_game_issue_comment_stats
is test
do
128 var l
= new DummyListener
129 l
.add_reactor
(new StatisticsReactor)
131 var issue
= api
.load_issue
(repo
, 322)
133 var comment
= api
.load_issue_comment
(repo
, 76119442)
134 assert comment
!= null
136 comment
.body
= "foo bar"
137 l
.apply_event
(generator
.issue_comment_event
(repo
, issue
, comment
), db
)
138 var game
= load_game
("Morriar/nit", db
)
139 assert game
.stats
.overall
["comments"] == 1
140 assert game
.stats
.overall
["reviews"] == 0
141 comment
.body
= "foo +1 bar"
142 l
.apply_event
(generator
.issue_comment_event
(repo
, issue
, comment
), db
)
143 game
= load_game
("Morriar/nit", db
)
144 assert game
.stats
.overall
["comments"] == 2
145 assert game
.stats
.overall
["reviews"] == 1
148 fun test_player_pull_reactor
is test
do
150 var game
= load_game
("Morriar/nit", db
)
151 var l
= new DummyListener
152 l
.add_reactor
(new PlayerReactor)
154 var pull
= api
.load_pull
(repo
, 275)
157 l
.apply_event
(generator
.pull_open
(repo
, pull
), db
)
158 var player
= new Player(game
, "itch76")
159 assert player
.stats
.overall
["nitcoins"] == 10
161 l
.apply_event
(generator
.pull_close
(repo
, pull
), db
)
162 player
= new Player(game
, "itch76")
163 assert player
.stats
.overall
["nitcoins"] == 0
164 l
.apply_event
(generator
.pull_reopen
(repo
, pull
), db
)
165 player
= new Player(game
, "itch76")
166 assert player
.stats
.overall
["nitcoins"] == 10
168 l
.apply_event
(generator
.pull_close
(repo
, pull
), db
)
169 player
= new Player(game
, "itch76")
170 assert player
.stats
.overall
["nitcoins"] == 12
173 fun test_player_review_reactor
is test
do
175 var game
= load_game
("Morriar/nit", db
)
176 var l
= new DummyListener
177 l
.add_reactor
(new PlayerReactor)
179 var pull
= api
.load_pull
(repo
, 275)
181 var comment
= api
.load_issue_comment
(repo
, 36961230)
182 assert comment
!= null
184 # TODO handle multiple review by the same user
186 # no review in opened issue
188 comment
.body
= "foo bar"
189 l
.apply_event
(generator
.issue_comment_event
(repo
, pull
, comment
), db
)
190 var player
= new Player(game
, "Morriar")
191 assert player
.stats
.overall
["nitcoins"] == 0
193 # review in opened issue
195 comment
.body
= "foo +1 bar"
196 l
.apply_event
(generator
.issue_comment_event
(repo
, pull
, comment
), db
)
197 player
= new Player(game
, "Morriar")
198 print player
.stats
.overall
["nitcoins"]
199 assert player
.stats
.overall
["nitcoins"] == 2
201 # review in closed issue
202 pull
.state
= "closed"
203 comment
.body
= "foo +1 bar"
204 l
.apply_event
(generator
.issue_comment_event
(repo
, pull
, comment
), db
)
205 player
= new Player(game
, "Morriar")
206 assert player
.stats
.overall
["nitcoins"] == 2
208 # review in reopened issue
210 comment
.body
= "foo +1 bar"
211 l
.apply_event
(generator
.issue_comment_event
(repo
, pull
, comment
), db
)
212 player
= new Player(game
, "Morriar")
213 assert player
.stats
.overall
["nitcoins"] == 4
216 fun test_X_issues_achievements
is test
do
218 var game
= load_game
("Morriar/nit", db
)
219 var l
= new DummyListener
220 l
.add_reactor
(new StatisticsReactor)
221 l
.add_reactor
(new Player1Issue, new Player100Issues, new Player1KIssues)
223 var issue
= api
.load_issue
(repo
, 322)
226 for i
in [0, 99, 999] do
227 var id
= "player_{i + 1}_issue"
228 if i
> 0 then id
= "{id}s"
229 var player
= new Player(game
, "Morriar")
230 player
.stats
["issues"] = i
232 l
.apply_event
(generator
.issue_open
(repo
, issue
), db
)
233 assert player
.load_achievements
.has_key
(id
)
235 var player
= new Player(game
, "Morriar")
236 assert player
.stats
.overall
["nitcoins"] == 1110
239 fun test_X_pulls_achievements
is test
do
241 var game
= load_game
("Morriar/nit", db
)
242 var l
= new DummyListener
243 l
.add_reactor
(new StatisticsReactor)
244 l
.add_reactor
(new Player1Pull, new Player100Pulls, new Player1KPulls)
246 var pull
= api
.load_pull
(repo
, 275)
249 for i
in [0, 99, 999] do
250 var id
= "player_{i + 1}_pull"
251 if i
> 0 then id
= "{id}s"
252 var player
= new Player(game
, "itch76")
253 player
.stats
["pulls"] = i
255 l
.apply_event
(generator
.pull_open
(repo
, pull
), db
)
256 assert player
.load_achievements
.has_key
(id
)
258 var player
= new Player(game
, "itch76")
259 assert player
.stats
.overall
["nitcoins"] == 1110
262 fun test_X_commits_achievements
is test
do
264 var game
= load_game
("Morriar/nit", db
)
265 var l
= new DummyListener
266 l
.add_reactor
(new StatisticsReactor)
267 l
.add_reactor
(new Player1Commit, new Player100Commits)
268 l
.add_reactor
(new Player1KCommits, new Player10KCommits)
270 var pull
= api
.load_pull
(repo
, 275)
272 pull
.state
= "closed"
275 for i
in [0, 99, 999, 9999] do
276 var id
= "player_{i + 1}_commit"
277 if i
> 0 then id
= "{id}s"
278 var player
= new Player(game
, "itch76")
279 player
.stats
["commits"] = i
281 l
.apply_event
(generator
.pull_close
(repo
, pull
), db
)
282 assert player
.load_achievements
.has_key
(id
)
284 var player
= new Player(game
, "itch76")
285 assert player
.stats
.overall
["nitcoins"] == 11110
288 fun test_X_comments_achievements
is test
do
290 var game
= load_game
("Morriar/nit", db
)
291 var l
= new DummyListener
292 l
.add_reactor
(new StatisticsReactor)
293 l
.add_reactor
(new Player1Comment, new Player100Comments, new Player1KComments)
295 var pull
= api
.load_pull
(repo
, 275)
297 var comment
= api
.load_issue_comment
(repo
, 36961230)
298 assert comment
!= null
300 for i
in [0, 99, 999] do
301 var id
= "player_{i + 1}_comment"
302 if i
> 0 then id
= "{id}s"
303 var player
= new Player(game
, "Morriar")
304 player
.stats
["comments"] = i
306 l
.apply_event
(generator
.issue_comment_event
(repo
, pull
, comment
), db
)
307 assert player
.load_achievements
.has_key
(id
)
309 var player
= new Player(game
, "Morriar")
310 assert player
.stats
.overall
["nitcoins"] == 1110
313 fun test_issues_achievements
is test
do
315 var game
= load_game
("Morriar/nit", db
)
316 var l
= new DummyListener
317 l
.add_reactor
(new IssueAboutNitdoc, new IssueAboutFFI)
319 var issue
= api
.load_issue
(repo
, 322)
322 issue
.title
= "nitdoc ffi"
323 l
.apply_event
(generator
.issue_open
(repo
, issue
), db
)
324 var player
= new Player(game
, "Morriar")
325 assert player
.load_achievements
.has_key
("issue_about_nitdoc")
326 assert player
.load_achievements
.has_key
("issue_about_ffi")
327 assert player
.stats
.overall
["nitcoins"] == 20
330 fun test_comments_reactor
is test
do
332 var game
= load_game
("Morriar/nit", db
)
333 var l
= new DummyListener
334 l
.add_reactor
(new PlayerPingGod, new PlayerFirstReview, new PlayerSaysNitcoin)
336 var pull
= api
.load_pull
(repo
, 275)
338 var comment
= api
.load_issue_comment
(repo
, 36961230)
339 assert comment
!= null
341 comment
.body
= "@{game.repo.owner.login}"
342 l
.apply_event
(generator
.issue_comment_event
(repo
, pull
, comment
), db
)
343 var player
= new Player(game
, "Morriar")
344 assert player
.load_achievements
.has_key
("player_ping_god")
345 assert player
.stats
.overall
["nitcoins"] == 50
348 l
.apply_event
(generator
.issue_comment_event
(repo
, pull
, comment
), db
)
349 player
= new Player(game
, "Morriar")
350 assert player
.load_achievements
.has_key
("player_first_review")
351 assert player
.stats
.overall
["nitcoins"] == 60
353 comment
.body
= "Nitcoins"
354 l
.apply_event
(generator
.issue_comment_event
(repo
, pull
, comment
), db
)
355 player
= new Player(game
, "Morriar")
356 assert player
.load_achievements
.has_key
("player_says_nitcoin")
357 assert player
.stats
.overall
["nitcoins"] == 70