nitrpg: add nitunits
[nit.git] / contrib / nitrpg / src / test_achievements.nit
diff --git a/contrib/nitrpg/src/test_achievements.nit b/contrib/nitrpg/src/test_achievements.nit
new file mode 100644 (file)
index 0000000..b5d4cb7
--- /dev/null
@@ -0,0 +1,145 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014-2015 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Test module for `achievements.nit`
+module test_achievements is test_suite
+
+import test_helper
+import achievements
+
+class TestGame
+       super NitrpgTestHelper
+
+       fun test_add_achievement do
+               var db = load_db("test_add_achievement")
+               var game = load_game("Morriar/nit", db)
+               var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15)
+               var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15)
+               game.add_achievement(a1)
+               game.add_achievement(a2)
+               assert game.load_achievements.length == 2
+               db.drop
+       end
+
+       fun test_load_achievement do
+               var db = load_db("test_load_achievement")
+               var game = load_game("Morriar/nit", db)
+               var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15)
+               var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15)
+               game.add_achievement(a1)
+               assert game.load_achievement(a1.id).id == "test_id1"
+               assert game.load_achievement(a2.id) == null
+               db.drop
+       end
+
+       fun test_load_achievements do
+               var db = load_db("test_load_achievements")
+               var game = load_game("Morriar/nit", db)
+               var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15)
+               var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15)
+               var a3 = new Achievement(game, "test_id3", "test_name", "test_desc", 15)
+               game.add_achievement(a1)
+               game.add_achievement(a2)
+               game.db.collection("achievements").insert(a3.to_json)
+               var ok = [a1.id, a2.id]
+               var res = game.load_achievements
+               assert res.length == 2
+               for a in res.values do assert ok.has(a.id)
+               db.drop
+       end
+end
+
+class TestPlayer
+       super NitrpgTestHelper
+
+       fun test_add_achievement do
+               var db = load_db("test_add_achievement")
+               var game = load_game("Morriar/nit", db)
+               var player1 = new Player(game, "Morriar")
+               var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15)
+               var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15)
+               player1.add_achievement(a1)
+               player1.add_achievement(a2)
+               assert player1.load_achievements.length == 2
+               db.drop
+       end
+
+       fun test_load_achievement do
+               var db = load_db("test_load_achievement")
+               var game = load_game("Morriar/nit", db)
+               var player1 = new Player(game, "Morriar")
+               var player2 = new Player(game, "xymus")
+               var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15)
+               var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15)
+               player1.add_achievement(a1)
+               player2.add_achievement(a2)
+               assert player1.load_achievement(a1.id).id == "test_id1"
+               assert player1.load_achievement(a2.id) == null
+               assert player2.load_achievement(a2.id).id == "test_id2"
+               assert player2.load_achievement(a1.id) == null
+               db.drop
+       end
+
+       fun test_load_achievements do
+               var db = load_db("test_load_achievements")
+               var game = load_game("Morriar/nit", db)
+               var player1 = new Player(game, "Morriar")
+               var player2 = new Player(game, "xymus")
+               var a1 = new Achievement(game, "test_id1", "test_name", "test_desc", 15)
+               var a2 = new Achievement(game, "test_id2", "test_name", "test_desc", 15)
+               var a3 = new Achievement(game, "test_id3", "test_name", "test_desc", 15)
+               player1.add_achievement(a1)
+               player1.add_achievement(a2)
+               player2.add_achievement(a3)
+               var ok = [a1.id, a2.id]
+               var res = player1.load_achievements
+               assert res.length == 2
+               for a in res.values do assert ok.has(a.id)
+               db.drop
+       end
+end
+
+class TestAchievement
+       super NitrpgTestHelper
+
+       fun test_init do
+               var db = load_db("test_init")
+               var game = load_game("Morriar/nit", db)
+               var a = new Achievement(game, "test_id", "test_name", "test_desc", 15)
+               assert a.id == "test_id"
+               assert a.name == "test_name"
+               assert a.desc == "test_desc"
+               assert a.reward == 15
+               db.drop
+       end
+
+       fun test_init_from_json do
+               var db = load_db("test_init_from_json")
+               var game = load_game("Morriar/nit", db)
+               var json = """{
+                       "id": "test_id",
+                       "name": "test_name",
+                       "desc": "test_desc",
+                       "reward": 15
+               }""".parse_json.as(JsonObject)
+               var a = new Achievement.from_json(game, json)
+               assert a.id == "test_id"
+               assert a.name == "test_name"
+               assert a.desc == "test_desc"
+               assert a.reward == 15
+               db.drop
+       end
+end