Тесты ProgramRepository и ProgramVersionRepository (слой Src)
Репозитории Server.WatchBody.Core.Dal.Src.Repository:
IProgramRepository / ProgramRepository, IProgramVersionRepository / ProgramVersionRepository
(правила — c-dal; unit-тесты без БД — c-tst, d-tst).
Методы → функции БД
| Репозиторий |
Метод |
Функция БД |
| Program |
Insert(Program) → int |
src.program_insert |
| Program |
Select(int athleteId) → IEnumerable |
src.program_select |
| Program |
Get(int athleteId, int programId) → Program? |
src.program_get |
| ProgramVersion |
Insert(ProgramVersion) → Guid |
src.program_version_insert |
| ProgramVersion |
UpdateStatus(int athleteId, Guid versionId, string status) → int |
src.program_version_update |
| ProgramVersion |
Select(ProgramVersionFilter?) → IEnumerable |
src.program_version_select |
| ProgramVersion |
Get(int athleteId, Guid versionId) → ProgramVersion? |
src.program_version_get |
ProgramVersionFilter: ProgramId (int?), Status (string?), Author (string?).
Примечание: _update меняет только статус (🛡) — специализированное имя
UpdateStatus вместо Update (c-dal-5).
Механика теста (общая)
ConnectionStringTest (d-tst-11); Program содержит денормализацию
active_version_id/active_version (конвертер заполняет
ActiveVersionId/ActiveVersionNumber); ProgramVersion.Select — без body
колонки (конвертер не ждёт её); ProgramVersion.Get — с body.
Заготовки (DataTable)
Таблица program_*: id:int, athlete_id:int, title:string, created_at:DateTime,
active_version_id:Guid?, active_version:int?.
Строки: pr1 — TEST-Программа, active_version_id NULL;
pr2 — TEST-Программа, active версия 2.
Таблица program_version_select: id:Guid, program_id:int, version:int,
based_on_version:int?, status:string, author:string, rationale:string, created_at:DateTime.
Таблица program_version_get: та же + body:string.
Строки: v1 — version 1, draft, based_on NULL, body='{}';
v2 — version 2, active, based_on 1.
Тесты: Insert (Program)
| № |
Тип |
Условие |
Ожидаемый результат |
| 1 |
основной |
pr1; scalar = 5 |
Insert→5; параметры p_athlete_id, p_title |
Тесты: Select (Program)
| № |
Тип |
Условие |
Ожидаемый результат |
| 1 |
основной |
таблица [pr1, pr2] |
2 сущности; pr2.ActiveVersionNumber = 2; pr1 — null |
Тесты: Get (Program)
| № |
Тип |
Условие |
Ожидаемый результат |
| 1 |
основной |
таблица [pr2] |
сущность с ActiveVersionId |
| 2 |
граничный |
пустая таблица |
null |
Тесты: Insert (ProgramVersion)
| № |
Тип |
Условие |
Ожидаемый результат |
| 1 |
основной |
v1; scalar = Guid v1 |
параметры p_athlete_id, p_id, p_program_id, p_based_on_version, p_author, p_body, p_rationale |
Тесты: UpdateStatus (ProgramVersion)
| № |
Тип |
Условие |
Ожидаемый результат |
| 1 |
основной |
v1 → active; scalar = 1 |
параметры p_athlete_id, p_id, p_status='active' |
Тесты: Select (ProgramVersion)
| № |
Тип |
Условие |
Ожидаемый результат |
| 1 |
основной |
таблица [v1, v2]; фильтры NULL |
2 сущности; body-колонки в таблице нет |
| 2 |
граничный |
пустая таблица |
пустая коллекция |
Тесты: Get (ProgramVersion)
| № |
Тип |
Условие |
Ожидаемый результат |
| 1 |
основной |
таблица [v2] (с body) |
сущность; Body = '{}' |
| 2 |
граничный |
пустая таблица |
null |