Fix/issue170#171
Conversation
…дготовленных SQL-запросов и override_dbsession_in_route, мок для переопределения сессии ручки на тестовую сессию
…стройкой cascade, что дать алхимии понять в каком порядке их удалять, вне зависимости от связанных других таблиц
…turerUserComments
…ACK в фикстуру logging_sql_req_before_execute
Coverage Report
Summary
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||
| # Pyre type checker | ||
| .pyre/ | ||
|
|
There was a problem hiding this comment.
нигде не используется в текущей реализации
| lecturers[-1].is_deleted = True | ||
| for lecturer in lecturers: | ||
| dbsession.add(lecturer) | ||
| dbsession.add_all(lecturers) |
There was a problem hiding this comment.
думаю, что это можно не добавлять, зачем
| "user_scopes": [{"id": 0, "name": "string", "comment": "string"}], | ||
| "indirect_groups": [{"id": 0, "name": "string", "parent_id": 0}], | ||
| "groups": [{"id": 0, "name": "string", "parent_id": 0}], | ||
| def authlib_user(): |
There was a problem hiding this comment.
верни исходную структуру, как было все
надо добавить только
"userdata": [ {"category": "Личная информация", "param": "Полное имя", "value": "Тестовый Тест"}, ],
что собственно ты и сделал, остальное не нужно
| } | ||
|
|
||
|
|
||
| @pytest.fixture() |
There was a problem hiding this comment.
на разные фикстуры тоже разбивать это не надо
| def test_create_comment(client, dbsession, lecturers, body, lecturer_n, response_status): | ||
| params = {"lecturer_id": lecturers[lecturer_n].id} | ||
| post_response = client.post(url, json=body, params=params) | ||
|
|
There was a problem hiding this comment.
это не нужно будет при правильном моке(см ниже)
| @@ -177,6 +178,16 @@ | |||
| def test_create_comment(client, dbsession, lecturers, body, lecturer_n, response_status): | |||
There was a problem hiding this comment.
добавь здесь в конце assert на проверку грамотности некоторых полей по типу что действительно при неанонимном комменте ставится имя не null
| import logging | ||
|
|
||
| import pytest | ||
| from auth_lib.fastapi import UnionAuth |
There was a problem hiding this comment.
надо будет убрать, см комменты ниже
| avatar_link: Mapped[str] = mapped_column(String, nullable=True, comment="Ссылка на аву препода") | ||
| timetable_id: Mapped[int] | ||
| comments: Mapped[list[Comment]] = relationship("Comment", back_populates="lecturer") | ||
| lecturer_user_comments: Mapped[list[LecturerUserComment]] = relationship( |
There was a problem hiding this comment.
каскадное удаление нам не нужно, relationship можно не делать, предположительно проблема в самих эндпоинтах в этот раз
Честно немного не понял и запутался что не так с логикой и почему из-за этого 57 тестов падает, объясни пожалуйста)
There was a problem hiding this comment.
и еще, у нас же софтделиты, поэтому каскад точно не нужен
каскад это для хардделита

Изменения
ERRORпадало 57 тестовtest_create_commentс тестовым набором включающим не анонимные комментарииuserdataпараметровuv.lockв.gitignoreДетали реализации
ERRORсвязан с не очевидным поведениемsqlalchemy, где на основе того, были ли подготовлены на вставку (INSERT) в текущей не завершенной транзакции одновременно записи в таблицахLecturerUserCommentиComment. Если тест падал сTypeErrorи успевала добавиться только одна из этих таблиц, алхимия в tear-down фикстурыlecturersв итоговый SQL запрос не добавляла строку на удаление записиLecturerUserComment- сразу после этого происходило удаление лектора из таблицыLecturer, что приводило к конфликту ведь не удаленныйLecturerUserCommentпо-прежнему ссылался на него.Решение: В модели Lecturer и
LectureUserCommentдобавил атрибуты связиrelationshipс параметромcascade, где явно указал удалять сначала дочерние таблицы.test_create_commentс не анонимаными комментариями падал, из-за того, что для user-а передавалась не корректнаяuserdata. Были добавлены мок фикстурыauthlib_user,authlib_mockиuser_mockдля подмены данных user-а возвращаемыхUnionAuthCheck-List
blackиisortдля Back-End илиPrettierдля Front-End?