|
|
|
import unittest
|
|
|
|
from datetime import datetime
|
|
|
|
from app import create_app, db
|
|
|
|
from app.models import User, Game, Role, GamePlayer
|
|
|
|
from config import Config
|
|
|
|
|
|
|
|
class TestConfig(Config):
|
|
|
|
TESTING = True
|
|
|
|
WTF_CSRF_ENABLED = False
|
|
|
|
DEBUG = False
|
|
|
|
SQLALCHEMY_DATABASE_URI = 'sqlite://'
|
|
|
|
|
|
|
|
class GameCase(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.players.append(GamePlayer(user=u1, role=Role.owner))
|
|
|
|
g1.players.append(GamePlayer(user=u2, role=Role.bunny))
|
|
|
|
|
|
|
|
db.session.add(g1)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
self.assertTrue(g1.owned_by(u1))
|
|
|
|
self.assertFalse(g1.owned_by(u2))
|
|
|
|
|
|
|
|
def test_delete(self):
|
|
|
|
g1 = Game(name='TestGame')
|
|
|
|
u1 = User(name='Henk')
|
|
|
|
u2 = User(name='Karel')
|
|
|
|
p1 = GamePlayer(user=u1, role=Role.bunny)
|
|
|
|
p2 = GamePlayer(user=u2, role=Role.bunny)
|
|
|
|
|
|
|
|
g1.players.append(p1)
|
|
|
|
g1.players.append(p2)
|
|
|
|
|
|
|
|
db.session.add(g1)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
u2.last_login = datetime.now()
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
self.assertNotEqual(User.query.filter_by(name='Henk').first(), None)
|
|
|
|
self.assertNotEqual(User.query.filter_by(name='Karel').first(), None)
|
|
|
|
|
|
|
|
g1.delete()
|
|
|
|
|
|
|
|
self.assertEqual(User.query.filter_by(name='Henk').first(), None)
|
|
|
|
self.assertNotEqual(User.query.filter_by(name='Karel').first(), None)
|
|
|
|
self.assertEqual(Game.query.filter_by(name='TestGame').first(), None)
|
|
|
|
|
|
|
|
def test_remove_player(self):
|
|
|
|
g1 = Game(name='TestGame')
|
|
|
|
g2 = Game(name='TestGame2')
|
|
|
|
u1 = User(name='Henk')
|
|
|
|
u2 = User(name='Karel')
|
|
|
|
p1_1 = GamePlayer(user=u1, role=Role.owner)
|
|
|
|
p1_2 = GamePlayer(user=u2, role=Role.bunny)
|
|
|
|
p2_1 = GamePlayer(user=u1, role=Role.owner)
|
|
|
|
p2_2 = GamePlayer(user=u2, role=Role.owner)
|
|
|
|
|
|
|
|
g1.players.append(p1_1)
|
|
|
|
g1.players.append(p1_2)
|
|
|
|
|
|
|
|
g2.players.append(p2_1)
|
|
|
|
g2.players.append(p2_2)
|
|
|
|
|
|
|
|
db.session.add(g1)
|
|
|
|
db.session.add(g2)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
self.assertTrue(g1.remove_player(u1))
|
|
|
|
self.assertFalse(g1.remove_player(u2))
|
|
|
|
self.assertFalse(g2.remove_player(u1))
|
|
|
|
self.assertTrue(g2.remove_player(u2))
|
|
|
|
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
self.assertTrue(p1_1 in g1.players)
|
|
|
|
self.assertTrue(p1_2 not in g1.players)
|
|
|
|
self.assertTrue(p2_1 not in g2.players)
|
|
|
|
self.assertTrue(p2_2 in g2.players)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main(verbosity=2)
|