nitrpg: avoid race conditions in tests that imply database
[nit.git] / contrib / nitrpg / src / test_events.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Copyright 2014-2015 Alexandre Terrasa <alexandre@moz-code.org>
4 #
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
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
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.
16
17 # Test module for `events.nit`
18 module test_events is test_suite
19
20 import test_helper
21 import events
22
23 class TestGame
24 super NitrpgTestHelper
25
26 fun test_add_event do
27 var db = gen_test_db
28 var game = load_game("Morriar/nit", db)
29 var event1 = new GameEvent(game, "test_kind", new JsonObject)
30 var event2 = new GameEvent(game, "test_kind", new JsonObject)
31 game.add_event(event1)
32 game.add_event(event2)
33 assert game.load_events.length == 2
34 end
35
36 fun test_load_event do
37 var db = gen_test_db
38 var game = load_game("Morriar/nit", db)
39 var event1 = new GameEvent(game, "test_kind", new JsonObject)
40 var event2 = new GameEvent(game, "test_kind", new JsonObject)
41 game.add_event(event1)
42 assert game.load_event(event1.internal_id).kind == "test_kind"
43 assert game.load_event(event2.internal_id) == null
44 end
45
46 fun test_load_events do
47 var db = gen_test_db
48 var game = load_game("Morriar/nit", db)
49 var event1 = new GameEvent(game, "test_kind", new JsonObject)
50 var event2 = new GameEvent(game, "test_kind", new JsonObject)
51 var event3 = new GameEvent(game, "test_kind", new JsonObject)
52 game.add_event(event1)
53 game.add_event(event2)
54 game.db.collection("events").insert(event3.to_json)
55 var ok = [event1.internal_id, event2.internal_id]
56 var res = game.load_events
57 assert res.length == 2
58 for event in res do assert ok.has(event.internal_id)
59 end
60 end
61
62 class TestPlayer
63 super NitrpgTestHelper
64
65 fun test_add_event do
66 var db = gen_test_db
67 var game = load_game("Morriar/nit", db)
68 var player1 = new Player(game, "Morriar")
69 var player2 = new Player(game, "xymus")
70 var event1 = new GameEvent(game, "test_kind", new JsonObject)
71 var event2 = new GameEvent(game, "test_kind", new JsonObject)
72 player1.add_event(event1)
73 player1.add_event(event2)
74 assert player1.load_events.length == 2
75 assert player2.load_events.length == 0
76 end
77
78 fun test_load_event do
79 var db = gen_test_db
80 var game = load_game("Morriar/nit", db)
81 var player1 = new Player(game, "Morriar")
82 var player2 = new Player(game, "xymus")
83 var event1 = new GameEvent(game, "test_kind", new JsonObject)
84 var event2 = new GameEvent(game, "test_kind", new JsonObject)
85 player1.add_event(event1)
86 player2.add_event(event2)
87 assert player1.load_event(event1.internal_id).kind == "test_kind"
88 assert player1.load_event(event2.internal_id) == null
89 assert player2.load_event(event2.internal_id).kind == "test_kind"
90 assert player2.load_event(event1.internal_id) == null
91 end
92
93 fun test_load_events do
94 var db = gen_test_db
95 var game = load_game("Morriar/nit", db)
96 var player1 = new Player(game, "Morriar")
97 var player2 = new Player(game, "xymus")
98 var event1 = new GameEvent(game, "test_kind", new JsonObject)
99 var event2 = new GameEvent(game, "test_kind", new JsonObject)
100 var event3 = new GameEvent(game, "test_kind", new JsonObject)
101 player1.add_event(event1)
102 player1.add_event(event2)
103 player2.add_event(event3)
104 assert player1.load_events.length == 2
105 assert player2.load_events.length == 1
106 var ok = [event1.internal_id, event2.internal_id]
107 for event in player1.load_events do assert ok.has(event.internal_id)
108 end
109 end
110
111 class TestGameEvent
112 super NitrpgTestHelper
113
114 fun test_init do
115 var db = gen_test_db
116 var game = load_game("Morriar/nit", db)
117 var event = new GameEvent(game, "test_kind", new JsonObject)
118 assert event.to_json["kind"] == "test_kind"
119 end
120
121 fun test_init_from_json do
122 var db = gen_test_db
123 var game = load_game("Morriar/nit", db)
124 var json = """{
125 "internal_id": "test_id",
126 "kind": "test_kind",
127 "time": "2015-02-05T00:00:00Z",
128 "data": {"test_field": "test_value"}
129 }""".parse_json.as(JsonObject)
130 var event = new GameEvent.from_json(game, json)
131 assert event.internal_id == "test_id"
132 assert event.kind == "test_kind"
133 assert event.data.to_json == """{"test_field":"test_value"}"""
134 assert event.time.to_s == "2015-02-05T00:00:00Z"
135 end
136 end