/
Roman88
/
contact_manager
Обзор
Документация
Войти
/
Roman88
/
contact_manager
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/tests/test_auth.py
261 строка
10 KB
Roman88
16-05
16 май 2026, 10:00
16 май 2026, 10:00
d98539b
Код
Авторство
О чём код?
import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from src.controllers.auth_controller import register_user, login_user, change_password from src.models.user import User from src.connection.connect import connect_db, close_db, create_tables, drop_tables def print_separator(char="=", length=70): print(char * length) def print_test_header(test_name): print_separator() print(f"ТЕСТ: {test_name}") print_separator() def setup(): """Подготовка перед тестами""" print("\n ПОДГОТОВКА:") print_separator("-", 70) # Подключение к БД print("1. Подключение к базе данных...") connect_db() # Создание таблицы User print("2. Создание таблицы User...") create_tables() # Очистка таблицы User перед тестами print("3. Очистка таблицы User...") User.delete().execute() print("Таблица User очищена") print("Подготовка завершена успешно!\n") def teardown(): """Очистка после тестов""" print("\n📋 ОЧИСТКА ПОСЛЕ ТЕСТОВ:") print_separator("-", 70) # Очистка таблицы User User.delete().execute() print("Таблица User очищена") # Закрытие соединения close_db() print("Соединение закрыто") def test_register_user_success(): """Тест 1: Успешная регистрация""" print_test_header("1 - Успешная регистрация") success, message, user_id = register_user("alice", "pass123", "pass123") print(f"Входные данные: login='alice', password='pass123', confirm='pass123'") print(f"Результат: success={success}, message='{message}', user_id={user_id}") print(f"Ожидаемый результат: success=True, user_id is not None") if success and user_id is not None: print("ПРОВЕРКА ПРОЙДЕНА") return True else: print("ПРОВЕРКА НЕ ПРОЙДЕНА") return False def test_register_user_existing_login(): """Тест 2: Регистрация с существующим логином""" print_test_header("2 - Регистрация с существующим логином") # Создаем пользователя, если его еще нет register_user("alice", "pass123", "pass123") # Пытаемся зарегистрироваться с тем же логином success, message, user_id = register_user("alice", "pass123", "pass123") print(f"Входные данные: login='alice', password='pass123', confirm='pass123'") print(f"Результат: success={success}, message='{message}', user_id={user_id}") print(f"Ожидаемый результат: success=False, сообщение содержит 'существует'") if not success and ("существует" in message or "already exists" in message): print("ПРОВЕРКА ПРОЙДЕНА") return True else: print("ПРОВЕРКА НЕ ПРОЙДЕНА") return False def test_register_user_password_mismatch(): """Тест 3: Регистрация с несовпадающими паролями""" print_test_header("3 - Регистрация с несовпадающими паролями") success, message, user_id = register_user("bob", "pass123", "pass456") print(f"Входные данные: login='bob', password='pass123', confirm='pass456'") print(f"Результат: success={success}, message='{message}', user_id={user_id}") print(f"Ожидаемый результат: success=False, сообщение содержит 'совпадают'") if not success and ("совпадают" in message or "match" in message): print("ПРОВЕРКА ПРОЙДЕНА") return True else: print("ПРОВЕРКА НЕ ПРОЙДЕНА") return False def test_login_user_success(): """Тест 4: Успешный вход""" print_test_header("4 - Успешный вход") # Создаем пользователя register_user("alice", "pass123", "pass123") # Пытаемся войти success, message, user_id = login_user("alice", "pass123") print(f"Входные данные: login='alice', password='pass123'") print(f"Результат: success={success}, message='{message}', user_id={user_id}") print(f"Ожидаемый результат: success=True, user_id is not None") if success and user_id is not None: print("ПРОВЕРКА ПРОЙДЕНА") return True else: print("ПРОВЕРКА НЕ ПРОЙДЕНА") return False def test_login_user_wrong_password(): """Тест 5: Неудачный вход (неверный пароль)""" print_test_header("5 - Неудачный вход (неверный пароль)") # Создаем пользователя register_user("alice", "pass123", "pass123") # Пытаемся войти с неверным паролем success, message, user_id = login_user("alice", "wrongpass") print(f"Входные данные: login='alice', password='wrongpass'") print(f"Результат: success={success}, message='{message}', user_id={user_id}") print(f"Ожидаемый результат: success=False") if not success: print("ПРОВЕРКА ПРОЙДЕНА") return True else: print("ПРОВЕРКА НЕ ПРОЙДЕНА") return False def test_change_password_success(): """Тест 6: Смена пароля""" print_test_header("6 - Смена пароля") # Создаем пользователя register_user("alice", "pass123", "pass123") # Получаем пользователя из БД user = User.get_or_none(User.login == "alice") # Меняем пароль success, message = change_password(user.id, "pass123", "newpass456") print(f"Входные данные: user_id={user.id}, old='pass123', new='newpass456'") print(f"Результат: success={success}, message='{message}'") print(f"Ожидаемый результат: success=True") if success: print("ПРОВЕРКА ПРОЙДЕНА") return True else: print("ПРОВЕРКА НЕ ПРОЙДЕНА") return False def test_login_user_with_new_password(): """Тест 7: Вход с новым паролем""" print_test_header("7 - Вход с новым паролем") # Пытаемся войти с новым паролем success, message, user_id = login_user("alice", "newpass456") print(f"Входные данные: login='alice', password='newpass456'") print(f"Результат: success={success}, message='{message}', user_id={user_id}") print(f"Ожидаемый результат: success=True, user_id is not None") if success and user_id is not None: print("ПРОВЕРКА ПРОЙДЕНА") return True else: print("ПРОВЕРКА НЕ ПРОЙДЕНА") return False def run_all_tests(): """Запуск всех тестов""" print_separator("=", 70) print("ПРОВЕРКА ЭТАПА 2: КОНТРОЛЛЕР АВТОРИЗАЦИИ") print_separator("=", 70) # Подготовка setup() # Список тестов tests = [ ("Успешная регистрация", test_register_user_success), ("Регистрация с существующим логином", test_register_user_existing_login), ("Регистрация с несовпадающими паролями", test_register_user_password_mismatch), ("Успешный вход", test_login_user_success), ("Неудачный вход (неверный пароль)", test_login_user_wrong_password), ("Смена пароля", test_change_password_success), ("Вход с новым паролем", test_login_user_with_new_password) ] # Запуск тестов и сбор результатов results = [] for test_name, test_func in tests: print(f"\n️ Выполнение: {test_name}") result = test_func() results.append(result) print(f"{'+' if result else '-'} Тест '{test_name}': {'ПРОЙДЕН' if result else 'НЕ ПРОЙДЕН'}") # Очистка после тестов teardown() # Вывод итогов print_separator("=", 70) print("ИТОГИ ТЕСТИРОВАНИЯ ЭТАПА 2") print_separator("=", 70) passed = sum(results) total = len(results) for i, (test_name, _) in enumerate(tests, 1): status = "+" if results[i - 1] else "-" print(f"{status} Тест {i}: {test_name} - {'ПРОЙДЕН' if results[i - 1] else 'НЕ ПРОЙДЕН'}") print_separator("-", 70) print(f"Результат: {passed}/{total} тестов пройдено") if passed == total: print_separator("=", 70) print("ВСЕ ТЕСТЫ ЭТАПА 2 УСПЕШНО ПРОЙДЕНЫ! 🎉") print_separator("=", 70) return True else: print_separator("=", 70) print(f"ПРОЙДЕНО {passed} ИЗ {total} ТЕСТОВ") print_separator("=", 70) return False if __name__ == "__main__": run_all_tests()