VEU.WathBody/1-docs/4-modules/m01-server-db/repository_tests/ProgramRepository.md

4.2 KiB
Raw Permalink Blame History

Тесты 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