diff --git a/backend/yet_another_calendar/tests/test_netology.py b/backend/yet_another_calendar/tests/test_netology.py index fdb9401..1be6d84 100644 --- a/backend/yet_another_calendar/tests/test_netology.py +++ b/backend/yet_another_calendar/tests/test_netology.py @@ -176,6 +176,32 @@ async def test_courses_response_schema() -> None: assert settings.netology_course_name in utmn_program.title +@pytest.mark.asyncio +async def test_get_utmn_program_filtering() -> None: + # Test data with an introductory course that should be ignored + user_data = { + "programs": [ + { + "id": 45526, + "title": "Бакалавриат «Разработка ИТ-продуктов и информационных систем»", + "is_profession": True, + }, + { + "id": 51839, + "title": "Вводный курс бакалавриата ТюмГУ «Разработка IT-продуктов и информационных систем»", + "is_profession": False, + } + ] + } + + courses_response = schema.CoursesResponse.model_validate(user_data) + utmn_program = courses_response.get_utmn_program() + + assert utmn_program is not None + assert utmn_program.id == 45526 + assert "Вводный" not in utmn_program.title + + @pytest.mark.asyncio async def test_lesson_webinar_schema() -> None: lesson_webinar = schema.LessonWebinar.model_validate({ diff --git a/backend/yet_another_calendar/web/api/netology/schema.py b/backend/yet_another_calendar/web/api/netology/schema.py index f0bd0a0..79a017b 100644 --- a/backend/yet_another_calendar/web/api/netology/schema.py +++ b/backend/yet_another_calendar/web/api/netology/schema.py @@ -36,8 +36,9 @@ class NetologyProgramId(BaseModel): """Netology program id.""" id: int title: str - url_code: str = Field(alias="urlcode") - type: str + url_code: str | None = Field(default=None, alias="urlcode") + type: str | None = Field(default=None) + is_profession: bool | None = None class CoursesResponse(BaseModel): @@ -46,7 +47,12 @@ class CoursesResponse(BaseModel): def get_utmn_program(self) -> NetologyProgramId | None: for program in self.programs: - if settings.netology_course_name in program.title: + title_lower = program.title.lower() + if settings.netology_course_name.lower() in title_lower: + if "вводный" in title_lower: + continue + if program.is_profession is False: + continue return program