import unittest import os import shutil from simple_chat_api.db_handler.db_handler import DbConnector from simple_chat_api.db_handler.user_manager import UserManager DB_PATH = "./data/TEST.sqlite" EXISTING_USER = ("admin", "admin") class TestUserManagmentWrapper(unittest.TestCase): def setUp(self): shutil.copyfile("docs/unittest_sample.sqlite", DB_PATH) db = DbConnector(f"sqlite:///{DB_PATH}") self.user_mgr = UserManager(db) def tearDown(self): self.user_mgr.db_con.close() os.remove(DB_PATH) def test_create_user(self): users = [("someone", "pass"), ("someone", "fail")] for user in users: with self.subTest(user): ret = self.user_mgr.create_user(*user) if user[1] == "fail": self.assertFalse(ret, f"user {user} was created but should not") else: self.assertTrue(ret, f"user {user} faild to be created") def test_authenticate(self): test_cases = [ { "username": EXISTING_USER[0], "password": EXISTING_USER[1], "expected": True, "msg": f"Existing user {EXISTING_USER} could not be authenticated" }, { "username": EXISTING_USER[0], "password": "unknown_pass", "expected": False, "msg": f"Existing user {EXISTING_USER[0]} could be authenticated with wrong password" }, { "username": "unknown_user", "password": "unknown_pass", "expected": False, "msg": "An unknown user was authenticated" }, ] for case in test_cases: with self.subTest(username=case["username"], password=case["password"]): result = self.user_mgr.authenticate(case["username"], case["password"]) self.assertEqual(result, case["expected"], case["msg"]) def test_delete_user(self): test_cases = [ { "username": EXISTING_USER[0], "expected": True, "msg": f"The existing user {EXISTING_USER[0]} could not be removed" }, { "username": "unknown_user", "expected": False, "msg": "an unknown user could be deleted" }, ] for case in test_cases: with self.subTest(username=case["username"]): result = self.user_mgr.delete_user(case["username"]) self.assertEqual(result, case["expected"], case["msg"]) def test_change_password(self): test_cases = [ { "username": EXISTING_USER[0], "new_password": "new_pass", "expected": True, "msg": f"Could not change password for existing user {EXISTING_USER[0]}" }, { "username": "unknown_user", "new_password": "new_pass", "expected": False, "msg": "The password for an unknown user was changed" }, ] for case in test_cases: with self.subTest(username=case["username"]): result = self.user_mgr.change_user_password(case["username"], case["new_password"]) self.assertEqual(result, case["expected"], case["msg"]) def test_check_user_exists(self): test_cases = [ { "username": EXISTING_USER[0], "expected": True, "msg": f"The existing user {EXISTING_USER[0]} could not be found" }, { "username": "unknown_user", "expected": False, "msg": "An unknown user was found" }, ] for case in test_cases: with self.subTest(username=case["username"]): result = self.user_mgr.check_user_exists(case["username"]) self.assertEqual(result, case["expected"], case["msg"])