from ...utils import _test_case_client_without_response, assert_model_changes
from ...fake_data import create_year_group, create_project_supervisors, create_groups
from app.dependencies import db


def test_list_year_group_for_specific_student(test_app_with_context) -> None:
    with test_app_with_context.test_client() as client:
        year_group = create_year_group()
        amount_of_project_supervisors = 3
        project_supervisors = create_project_supervisors(year_group, amount_of_project_supervisors)
        groups = create_groups(year_group, 6)

        for i in range(1, 4):
            for _ in range(i):
                gr = groups.pop()
                gr.project_supervisor_id = project_supervisors[i - 1].id
        db.session.commit()

        url = f'/api/students/registrations/{year_group.id}/?per_page=10'
        data = _test_case_client_without_response(client, url, None, 200, method='get')
        assert data.get('max_pages') == 1
        project_supervisors_data = data.get('project_supervisors')
        assert len(project_supervisors_data) == amount_of_project_supervisors

        for ps, expected_available_groups in zip(project_supervisors, [2, 1, 0]):
            ps_dict = list(filter(lambda p: p.get('email') == ps.email, project_supervisors_data))[0]
            assert ps_dict.get('available_groups') == expected_available_groups