|
|
|
import unittest
|
|
|
|
from app import create_app, db
|
|
|
|
from app.models import User, 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')
|
|
|
|
u1 = User(name='Henk')
|
|
|
|
u2 = User(name='Alfred')
|
|
|
|
|
|
|
|
g1.game_players.append(GamePlayer(player=u1, role=Role.owner))
|
|
|
|
g1.game_players.append(GamePlayer(player=u2, role=Role.bunny))
|
|
|
|
|
|
|
|
db.session.add(g1)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
self.assertTrue(g1.is_game_owner(u1))
|
|
|
|
self.assertFalse(g1.is_game_owner(u2))
|
|
|
|
|
|
|
|
def test_is_player_game_owner(self):
|
|
|
|
g1 = Game(name='TestGame')
|
|
|
|
g2 = Game(name='AnotherGame')
|
|
|
|
|
|
|
|
u1 = User(name='Henk')
|
|
|
|
u2 = User(name='Alfred')
|
|
|
|
u3 = User(name='Sasha')
|
|
|
|
|
|
|
|
g1.game_players.append(GamePlayer(player=u1, role=Role.owner))
|
|
|
|
g1.game_players.append(GamePlayer(player=u2, role=Role.bunny))
|
|
|
|
|
|
|
|
g2.game_players.append(GamePlayer(player=u1, role=Role.hunter))
|
|
|
|
g2.game_players.append(GamePlayer(player=u3, role=Role.bunny))
|
|
|
|
|
|
|
|
|
|
|
|
db.session.add(g1)
|
|
|
|
db.session.add(g2)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
self.assertTrue(u1.owns_game_played_by(player=u2), "owner owns subject_player's game")
|
|
|
|
self.assertFalse(u1.owns_game_played_by(player=u3), "owner doesn't own subject_player's game")
|
|
|
|
self.assertTrue(u1.owns_game_played_by(player=u1), "owner owns it own's game")
|
|
|
|
|
|
|
|
|
|
|
|
def test_is_objective_owner(self):
|
|
|
|
g1 = Game(name='TestGame')
|
|
|
|
g2 = Game(name='AnotherGame')
|
|
|
|
u1 = User(name='Henk')
|
|
|
|
|
|
|
|
g1.game_players.append(GamePlayer(player=u1, role=Role.owner))
|
|
|
|
g2.game_players.append(GamePlayer(player=u1, 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(u1))
|
|
|
|
self.assertFalse(o2.owned_by(u1))
|
|
|
|
|
|
|
|
def test_role_in_game(self):
|
|
|
|
g1 = Game(name='TestGame')
|
|
|
|
|
|
|
|
u1 = User(name='Henk')
|
|
|
|
u2 = User(name='Alfred')
|
|
|
|
u3 = User(name='Sasha')
|
|
|
|
u4 = User(name='Demian')
|
|
|
|
u5 = User(name='Karl')
|
|
|
|
|
|
|
|
g1.game_players.append(GamePlayer(player=u1, role=Role.owner))
|
|
|
|
g1.game_players.append(GamePlayer(player=u2, role=Role.bunny))
|
|
|
|
g1.game_players.append(GamePlayer(player=u3, role=Role.hunter))
|
|
|
|
g1.game_players.append(GamePlayer(player=u4, role=Role.none))
|
|
|
|
|
|
|
|
db.session.add(g1)
|
|
|
|
db.session.add(u5)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
self.assertEqual(u1.role_in_game(g1), Role.owner)
|
|
|
|
self.assertEqual(u2.role_in_game(g1), Role.bunny)
|
|
|
|
self.assertEqual(u3.role_in_game(g1), Role.hunter)
|
|
|
|
self.assertEqual(u4.role_in_game(g1), Role.none)
|
|
|
|
self.assertEqual(u5.role_in_game(g1), None)
|
|
|
|
with self.assertRaises(AttributeError):
|
|
|
|
g1.get_role_for_game(None)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main(verbosity=2)
|