import datetime from typing import Union from flask.testing import FlaskClient from app.dependencies import db from app.students.models import Group def assert_model_changes(model: db.Model, expected_data: dict) -> None: for key, val in expected_data.items(): value = getattr(model, key) if isinstance(value, datetime.datetime): value = value.strftime("%Y-%m-%dT%H:%M:%S.000Z") assert value == val def _test_case_client_without_response(test_client: FlaskClient, url: str, data: Union[dict, None], status_code: int, method: str = 'post') -> dict: method_func = getattr(test_client, method) if data is not None: response = method_func(url, json=data) else: response = method_func(url) assert response.status_code == status_code return response.json def _test_case_client(test_client: FlaskClient, url: str, data: Union[dict, None], message: str, status_code: int, key: str = 'message', method: str = 'post') -> None: response_data = _test_case_client_without_response(test_client, url, data, status_code, method) assert key in response_data.keys() assert response_data.get(key) == message def _test_case_group(group: Group, data: dict) -> None: assert group.name == data['name'] assert group.project_supervisor_id == data['project_supervisor_id'] for st in group.students: assert st.index in data['students']