system-pri/backend/tests/functional_tests/coordinator/test_students.py

202 lines
5.6 KiB
Python

import copy
from ...fake_data import create_student, create_students, create_year_group
from ...utils import (
_test_case_client,
_test_case_client_without_response,
assert_model_changes,
)
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 = {
"first_name": "Albert",
"last_name": "Marcus",
"pesel": "93030312896",
"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",
)