Skip to content

Test/add tests for groups notes services - #30

Merged
petrCher merged 14 commits into
mainfrom
test/add-tests-for-groups-notes-services
Aug 18, 2026
Merged

Test/add tests for groups notes services#30
petrCher merged 14 commits into
mainfrom
test/add-tests-for-groups-notes-services

Conversation

@CaseAsLimbo

@CaseAsLimbo CaseAsLimbo commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Изменения

  • Добавлены тесты для group.py, service.py и notes.py
  • Доработана аннотация типов в ручке note.py::get_notes, чтобы ограничить возможность передачи отрицательных limit и offset и точно валидировать строку status.
  • Все тесты структурированы по модели CRUD.
  • Переработана логика теста на GET ручку из фильтрами (test_get_notes). В тесте реализован подход эталонной логики(повторяем бизнес-логику в тесте и на основе неё проверяем), вместо хардкода ожидаемого результата.
  • Реализована единая временная точка для всех фикстур на время выполнения тестов(для ts-меток)
  • Удалены тесты и фикстуры для note_type

Дополнительно

Check-List

  • Вы проверили свой код перед отправкой запроса?
  • Вы написали тесты к реализованным функциям?
  • Вы не забыли применить форматирование black и isort для Back-End или Prettier для Front-End?

@github-actions

Copy link
Copy Markdown

💩 Code linting failed, use black and isort to fix it.

@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown

Code Coverage

Coverage Report
FileStmtsMissCoverMissing
modal_backend
   __main__.py440%1–6
   exceptions.py20195%37
modal_backend/models
   base.py62789%22, 25–28, 57, 87
modal_backend/routes
   exc_handlers.py17194%38
modal_backend/schemas
   base.py12467%6–9
TOTAL5191797% 

Summary

Tests Skipped Failures Errors Time
75 0 💤 0 ❌ 0 🔥 7.136s ⏱️

@CaseAsLimbo
CaseAsLimbo force-pushed the test/add-tests-for-groups-notes-services branch from 452ae37 to ed4deb3 Compare July 28, 2026 14:12
@github-actions

Copy link
Copy Markdown

💩 Code linting failed, use black and isort to fix it.

1 similar comment
@github-actions

Copy link
Copy Markdown

💩 Code linting failed, use black and isort to fix it.

@CaseAsLimbo
CaseAsLimbo force-pushed the test/add-tests-for-groups-notes-services branch from 9aef092 to 91c14da Compare August 4, 2026 19:06
@CaseAsLimbo
CaseAsLimbo requested a review from petrCher August 4, 2026 19:07

@petrCher petrCher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

пока ревью не закончен, посмотрел только базовый функционал, когда полностью закончу ревью напишу в тг
пока что буду периодически кидать новые комменты

Comment thread modal_backend/routes/notes.py Outdated
Comment thread modal_backend/routes/notes.py Outdated
Comment thread tests/test_routes/test_groups.py Outdated
Comment thread tests/test_routes/test_note_type.py Outdated
Comment thread tests/test_routes/test_services.py Outdated
@petrCher

petrCher commented Aug 5, 2026

Copy link
Copy Markdown
Member

ответ на твой вопрос из коммента к пр: изначально да, планировалось, что одной ручкой будем создавать типы модалок, но сейчас вероятно по причине ненадобности надо будет это убирать
а создание самих модалок происходит же просто отдельными ручками - для каждого типа свое

единственное, не совсем понял зачем этот вопрос, просто из интереса или ты конкретно спрашивал для реализации чего-то?

@CaseAsLimbo

Copy link
Copy Markdown
Contributor Author

ответ на твой вопрос из коммента к пр: изначально да, планировалось, что одной ручкой будем создавать типы модалок, но сейчас вероятно по причине ненадобности надо будет это убирать а создание самих модалок происходит же просто отдельными ручками - для каждого типа свое

единственное, не совсем понял зачем этот вопрос, просто из интереса или ты конкретно спрашивал для реализации чего-то?

Просто я когда писал тесты думал, делать один тест на все 5 ручек, потому что они однотипные или 5 тестов на каждую отдельно. Заглянул в ТЗ, чтобы принять решение и соответственно сделал один тест. Но на всякий случай это подсветил, потому что получается несовпадение.

@petrCher petrCher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

постарайся распространить мои комменты по кастомному методу и тд на все тесты, не стал прям везде писать одно и тоже
посмотрел пока поверхностно test_notes и conftest, позже подробнее изучу

и еще коммент для себя, чтобы не забыть: не нравится удаление объекта в самом тесте (подумать как упаковать в фикстуру)

Comment thread tests/test_routes/test_groups.py Outdated
Comment thread tests/test_routes/test_groups.py
Comment thread tests/test_routes/test_groups.py
Comment thread tests/test_routes/test_groups.py Outdated
Comment thread tests/test_routes/test_groups.py Outdated

@petrCher petrCher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

так, по сути все отревьюил, но решил еще клоду дать поревьюить (файл с ревью кину в тг), можешь посмотреть что он думает по этому поводу, всему верить у него точно не надо, надо перепроверять, но мало ли, он иногда действительно хорошие решения предлагает

Comment thread tests/test_routes/test_groups.py Outdated
Comment thread tests/test_routes/test_services.py Outdated
Comment thread tests/test_routes/test_notes.py Outdated
Comment thread tests/test_routes/test_notes.py Outdated
@petrCher

petrCher commented Aug 6, 2026

Copy link
Copy Markdown
Member

и еще на будущее рекомендация, когда делаешь очень много коммитов и пушишь разом больше 5, лучше из них создавать один коммит для пуша, а то много коммитов неудобно, так как ветка засоряется

@petrCher

petrCher commented Aug 6, 2026

Copy link
Copy Markdown
Member

еще было бы неплохо структурировать тесты по модели crud
то есть сперва создание потом чтение и тд, чтобы при открытии тестов все было по порядку
это скорее стилистический вопрос, но он повышает читаемость

@github-actions

Copy link
Copy Markdown

💩 Code linting failed, use black and isort to fix it.

@CaseAsLimbo
CaseAsLimbo requested a review from petrCher August 15, 2026 14:08
@petrCher

Copy link
Copy Markdown
Member

изменения вижу, попозже проверю)

@petrCher

Copy link
Copy Markdown
Member

если честно, то уже запутался в коде из-за слишком общего пр, готов просто так вмерджить сейчас, только сперва удали note_type тесты и фикстуры к ним

на будущее: лучше делать больше пр'ов но для каждой конкретной фичи, то есть для отдельного route на тесты свой пр, иначе это становится абсолютно нечитаемым. Плюс главное не количество кода, а качество, меньше кода всегда лучше, без необходимости сразу не надо писать очень много, всегда можно что-то оставить на потом для доработки

@petrCher

Copy link
Copy Markdown
Member

нужно сделать rebase и подтянуть все изменения с моего последнего коммита в main, потом обязательно проверь все ли добавилось
и есть идея уже после ребейза замерджить это, лучше отдельным пром будет править все, единственное поправь наверху пра информационное сообщение

…бежать пападания отрицательных значений в limit и offset, и не пропускать не валидные строки в status
    - Исправлены ошибки в сигнатуре ручки get_notes и обновлена сигнатура для сервиса, который эту ручку вызывает
    - Исправлен нейминг некоторых тестов(get_groups, get_services)
    - В тестах на группы, сервисы и note_type, способ удаления объектов заменен с dbsession.delete на кастомный метод(кроме мест, где проверяется атрибут is_deleted)
    - Исправлен формат написания параметризации в некоторых тестах, для лучшей читаемости
    - Исправлена критическая ошибка в тестах test_groups::test_post_group и test_services::test_post_service с всегда истинным ассертом
    - Все тесты структурированы по модели CRUD
2. Исправления по комментам клода
    - Пункты 3, 6, 7, 8, 9 (test_get_notes)
        - Исправлена и упрощена логика проверки сортировки модалок
        - Реализован подход с тестированием контракта сервиса отвечающиего за фильтрацию и пагинацию
        - Удален параметр len_without_confines, упразлнен подход с хардкодом ожидаемого результата
    - Пункт 5 (галлюцинация) у метода model_validate так же есть параметр extra(проверил, что работает) ссылка на доку:
    https://pydantic.dev/docs/validation/latest/api/pydantic/base_model/#pydantic.BaseModel.model_validate
    - Пункт 11 Исправлена мутация тестового body
    - Пункт 12
        - Добавлена общая временная точка в conftest.py
        - Исправлены временные метки для создаваемых модалок (Сортировка для равных временных меток не
        детерминирована в самой бизнес-логике, поэтому проверить сортировку в таком случае не будет возможно.
        Сейчас для каждой модалки создана уникальная временная метка)
        - Добавлена фикстура mock_datetime_now для ручки update_status(в сервисе вызывается datetime.now), чтобы тестах зависимых от вермени оно было единой точкой отсчета.
@CaseAsLimbo
CaseAsLimbo force-pushed the test/add-tests-for-groups-notes-services branch from 574fd17 to 09fd12e Compare August 17, 2026 19:47

if status_code == status.HTTP_200_OK:
response_data = response.json()
response_model = GroupGet(**response_data)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а почему ты здесь не делаешь mdoel validate с forbid? тут все ведь аналогично services
ну это уже так, просто коммент на будущее

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сорри, просто упустил этот момент

@petrCher
petrCher merged commit 26a913e into main Aug 18, 2026
2 checks passed
@petrCher
petrCher deleted the test/add-tests-for-groups-notes-services branch August 18, 2026 16:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants