From 5d259635a29e766230cdc44abd76afb0a4bb872d Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Tue, 22 Jun 2021 17:35:27 +0200 Subject: [PATCH] fix db error on second login --- .pre-commit-config.yaml | 6 +++++ ki/models.py | 2 +- ki/test/test_login_endpoint.py | 39 ++++++++++++++++++++++++++++++++ ki/test/test_profile_endpoint.py | 3 +++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 ki/test/test_login_endpoint.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4c87136..c8e86b7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,3 +6,9 @@ language: system files: ^.*\.py$ exclude: ^(migrations).*$ + - id: unittest + name: unittest + entry: python -m unittest discover ki + language: system + exclude: .* + always_run: true diff --git a/ki/models.py b/ki/models.py index 356aa79..77014f6 100644 --- a/ki/models.py +++ b/ki/models.py @@ -13,7 +13,7 @@ class User(db.Model): auth_id = Column(String(50), nullable=False, unique=True) profile_id = Column(Integer, ForeignKey("profile.id"), nullable=True) - tokens = relationship("Token", uselist=False, back_populates="user") + tokens = relationship("Token", back_populates="user") profile = relationship("Profile", back_populates="user") def to_dict(self): diff --git a/ki/test/test_login_endpoint.py b/ki/test/test_login_endpoint.py new file mode 100644 index 0000000..86c48c2 --- /dev/null +++ b/ki/test/test_login_endpoint.py @@ -0,0 +1,39 @@ +from alembic import command +import json +import unittest + +from app import app, migrate +from ki.commands import seed + + +class TestLoginEndpoint(unittest.TestCase): + def setUp(self): + app.debug = True + app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:" + self.client = app.test_client() + + with app.app_context(): + config = migrate.get_config() + command.upgrade(config, "head") + + seed() + + def test_login(self): + response1_data = self.login() + response2_data = self.login() + self.assertNotEqual(response1_data["token"], response2_data["token"]) + + def login(self): + response = self.client.post("/users/login", + data=json.dumps({ + "username": "peter", + "password": "geheim" + }), + content_type="application/json") + self.assertEqual(response.status_code, 200) + self.assertIn("token", response.json) + return response.json + + +if __name__ == "main": + unittest.main() diff --git a/ki/test/test_profile_endpoint.py b/ki/test/test_profile_endpoint.py index 6093dca..44ea8ed 100644 --- a/ki/test/test_profile_endpoint.py +++ b/ki/test/test_profile_endpoint.py @@ -15,12 +15,15 @@ class TestProfileEndpoint(unittest.TestCase): self.client = app.test_client() with app.app_context(): + db.drop_all() + db.engine.dispose() config = migrate.get_config() command.upgrade(config, "head") seed() def tearDown(self): + db.drop_all() db.engine.dispose() def test_create_profile(self):