import unittest from app import create_app, db from app.models import Player, Game, Role, GamePlayer, Objective, ObjectiveMinimalEncoder, LocationEncoder from config import Config class TestConfig(Config): TESTING = True WTF_CSRF_ENABLED = False DEBUG = False SQLALCHEMY_DATABASE_URI = 'sqlite://' class ModelsCase(unittest.TestCase): # implement this: https://stackoverflow.com/questions/47294304/how-to-mock-current-user-in-flask-templates def setUp(self): self.app = create_app(TestConfig) self.app_context = self.app.app_context() self.app_context.push() db.create_all() def tearDown(self): db.session.remove() db.drop_all() self.app_context.pop() def test_is_game_owner(self): g1 = Game(name='TestGame') p1 = Player(name='Henk') p2 = Player(name='Alfred') g1.game_players.append(GamePlayer(player=p1, role=Role.owner)) g1.game_players.append(GamePlayer(player=p2, role=Role.bunny)) db.session.add(g1) db.session.commit() self.assertTrue(g1.is_game_owner(p1)) self.assertFalse(g1.is_game_owner(p2)) def test_is_player_game_owner(self): g1 = Game(name='TestGame') g2 = Game(name='AnotherGame') p1 = Player(name='Henk') p2 = Player(name='Alfred') p3 = Player(name='Sasha') g1.game_players.append(GamePlayer(player=p1, role=Role.owner)) g1.game_players.append(GamePlayer(player=p2, role=Role.bunny)) g2.game_players.append(GamePlayer(player=p1, role=Role.hunter)) g2.game_players.append(GamePlayer(player=p3, role=Role.bunny)) db.session.add(g1) db.session.add(g2) db.session.commit() self.assertTrue(p1.owns_game_played_by(player=p2), "owner owns subject_player's game") self.assertFalse(p1.owns_game_played_by(player=p3), "owner doesn't own subject_player's game") self.assertTrue(p1.owns_game_played_by(player=p1), "owner owns it own's game") def test_is_objective_owner(self): g1 = Game(name='TestGame') g2 = Game(name='AnotherGame') p1 = Player(name='Henk') g1.game_players.append(GamePlayer(player=p1, role=Role.owner)) g2.game_players.append(GamePlayer(player=p1, role=Role.bunny)) o1 = Objective(name='o1') o1.set_hash() o2 = Objective(name='o2') o2.set_hash() g1.objectives.append(o1) g2.objectives.append(o2) db.session.add(g1) db.session.add(g2) db.session.commit() self.assertTrue(o1.owned_by(p1)) self.assertFalse(o2.owned_by(p1)) def test_role_in_game(self): g1 = Game(name='TestGame') p1 = Player(name='Henk') p2 = Player(name='Alfred') p3 = Player(name='Sasha') p4 = Player(name='Demian') p5 = Player(name='Karl') g1.game_players.append(GamePlayer(player=p1, role=Role.owner)) g1.game_players.append(GamePlayer(player=p2, role=Role.bunny)) g1.game_players.append(GamePlayer(player=p3, role=Role.hunter)) g1.game_players.append(GamePlayer(player=p4, role=Role.none)) db.session.add(g1) db.session.add(p5) db.session.commit() self.assertEqual(p1.role_in_game(g1), Role.owner) self.assertEqual(p2.role_in_game(g1), Role.bunny) self.assertEqual(p3.role_in_game(g1), Role.hunter) self.assertEqual(p4.role_in_game(g1), Role.none) self.assertEqual(p5.role_in_game(g1), None) with self.assertRaises(AttributeError): g1.get_role_for_game(None) if __name__ == '__main__': unittest.main(verbosity=2)