import copy from ...utils import _test_case_client, _test_case_client_without_response, assert_model_changes from ...fake_data import create_year_group, create_students, create_student valid_data = { 'first_name': 'Albert', 'last_name': 'Rose', 'index': 234_343, 'email': 'albert@gmail.com' } new_data = { 'first_name': 'Martin', 'last_name': 'Green', 'pesel': '93030312894' } data_to_create_student = { **new_data, 'index': 123_456 } def test_list_students(test_app_with_context) -> None: with test_app_with_context.test_client() as client: yg = create_year_group() create_students(yg, 45) data = _test_case_client_without_response(client, f'/api/coordinator/students/{yg.id}/?per_page=10', None, 200, method='get') assert data.get('max_pages') == 5 assert len(data.get('students')) == 10 def test_detail_student(test_app_with_context) -> None: with test_app_with_context.test_client() as client: yg = create_year_group() st = create_student(valid_data, yg.id) data = _test_case_client_without_response(client, f'/api/coordinator/students/{st.index}/detail/', None, 200, method='get') assert_model_changes(st, data) def test_detail_student_if_student_doesnt_exist(test_app_with_context) -> None: with test_app_with_context.test_client() as client: _test_case_client(client, '/api/coordinator/students/43/detail/', None, 'Not found student!', 404, method='get', key='error') def test_delete_student(test_app_with_context) -> None: with test_app_with_context.test_client() as client: yg = create_year_group() st = create_student(valid_data, yg.id) _test_case_client(client, f'/api/coordinator/students/{st.index}/', None, 'Student was deleted!', 202, method='delete') def test_delete_student_if_student_doesnt_exist(test_app_with_context) -> None: with test_app_with_context.test_client() as client: _test_case_client(client, '/api/coordinator/students/43/', None, 'Not found student!', 404, method='delete', key='error') def test_edit_student(test_app_with_context) -> None: with test_app_with_context.test_client() as client: yg = create_year_group() st = create_student(valid_data, yg.id) _test_case_client(client, f'/api/coordinator/students/{st.index}/', new_data, 'Student was updated!', 200, method='put') def test_edit_student_with_invalid_data(test_app_with_context) -> None: data = copy.copy(new_data) data['pesel'] = '43333333333433443' with test_app_with_context.test_client() as client: yg = create_year_group() st = create_student(valid_data, yg.id) _test_case_client(client, f'/api/coordinator/students/{st.index}/', data, 'Validation error', 400, method='put') def test_edit_student_if_student_doesnt_exist(test_app_with_context) -> None: with test_app_with_context.test_client() as client: _test_case_client(client, '/api/coordinator/students/54/', new_data, 'Not found student!', 404, method='put', key='error') def test_create_student(test_app_with_context) -> None: data = copy.copy(data_to_create_student) with test_app_with_context.test_client() as client: yg = create_year_group() data['year_group_id'] = yg.id _test_case_client(client, '/api/coordinator/students/', data, 'Student was created!', 200, method='post') def test_create_student_with_invalid_data(test_app_with_context) -> None: data = copy.copy(data_to_create_student) data['pesel'] = '434343434343344' with test_app_with_context.test_client() as client: yg = create_year_group() data['year_group_id'] = yg.id _test_case_client(client, '/api/coordinator/students/', data, 'Validation error', 400, method='post') def test_create_student_if_year_group_doesnt_exist(test_app_with_context) -> None: data = copy.copy(data_to_create_student) with test_app_with_context.test_client() as client: data['year_group_id'] = 34 _test_case_client(client, '/api/coordinator/students/', data, 'Not found year group!', 404, method='post', key='error') def test_create_student_if_student_has_already_assigned_to_this_group(test_app_with_context) -> None: data = copy.copy(data_to_create_student) with test_app_with_context.test_client() as client: yg = create_year_group() create_student(data, yg.id) data['year_group_id'] = yg.id _test_case_client(client, '/api/coordinator/students/', data, 'You are assigned to this year group!', 400, method='post', key='error')