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

3.0 KiB

Тесты WorkoutRepository (слой Src)

Репозиторий Server.WatchBody.Core.Dal.Src.Repository: IWorkoutRepository / WorkoutRepository (правила — c-dal; unit-тесты без БД — c-tst, d-tst).

Методы → функции БД

Метод Транспорт Функция БД
Insert(Workout) → Guid scalar Guid src.workout_insert(p_athlete_id, p_id, p_program_version_id, p_started_at, p_session_kind)
Update(Workout) → int scalar int src.workout_update (все поля, db-m-8)
Select(WorkoutFilter?) → IEnumerable reader src.workout_select (карточка + sets jsonb)
Get(int athleteId, Guid workoutId) → Workout? reader src.workout_get (строка + sets + commands jsonb)

WorkoutFilter: Status (string?), DateFrom (DateOnly?), DateTo (DateOnly?).

Примечание: program_version_id передаётся только в Insert; Update программную версию не меняет (функция её не пишет).

Механика теста (общая)

ConnectionStringTest (d-tst-11); один DataTable = один конвертер (d-tst-13). Select/Get читают денормализованные sets/commands (jsonb) — конвертер разбирает их в коллекции Workout.Sets / Workout.Commands.

Заготовки (DataTable)

Таблица workout_select: id:Guid, athlete_id:int, program_version_id:Guid?, started_at:DateTime, ended_at:DateTime?, status:string, session_kind:string, avg_hr:int?, facts_json:string?, fit_file_id:string?, hr_recovery_s:int?, sets:string (jsonb), commands:string (jsonb — только в get). Строки: w1 — normal, active, sets='[{"seq":1},{"seq":2}]', commands='[{"t_offset_s":65}]'; w2 — тот же профиль, sets='[]', commands='[]'.

Тесты: Insert

№ Тип Условие Ожидаемый результат
1 основной w1 без версии (program_version_id = null); scalar = Guid w1 5 параметров; NULL → DBNull

Тесты: Update

№ Тип Условие Ожидаемый результат
1 основной w1 c фактами FitParser; scalar = 1 параметры p_athlete_id, p_id, p_ended_at, p_status, p_session_kind, p_avg_hr, p_facts_json, p_fit_file_id, p_hr_recovery_s

Тесты: Select

№ Тип Условие Ожидаемый результат
1 основной таблица [w1] сущность; Sets = 2 элемента по порядку jsonb
2 граничный пустая таблица; фильтры NULL пустая коллекция

Тесты: Get

№ Тип Условие Ожидаемый результат
1 основной таблица [w1] сущность; Sets = 2, Commands = 1
2 граничный пустая таблица null