# Тесты `WorkoutSetRepository` и `CommandLogRepository` (слой Src) > Репозитории `Server.WatchBody.Core.Dal.Src.Repository`: > IWorkoutSetRepository / WorkoutSetRepository, ICommandLogRepository / CommandLogRepository > (правила — c-dal; unit-тесты без БД — c-tst, d-tst). ## Методы → функции БД | Репозиторий | Метод | Функция БД | |---|---|---| | WorkoutSet | `Insert(WorkoutSet)` → Guid | `src.workout_set_insert` (12 параметров) | | WorkoutSet | `Get(int athleteId, Guid setId)` → WorkoutSet? | `src.workout_set_get` | | CommandLog | `Insert(CommandLog)` → Guid | `src.command_log_insert` (7 параметров) | | CommandLog | `Select(int athleteId, Guid workoutId)` → IEnumerable | `src.command_log_select` | Update/Delete не существуют: подход правится новой записью `source=edit`, журнал команд не редактируется (🛡) — c-dal-2 (набор по функциям БД). ## Механика теста (общая) `ConnectionStringTest` (d-tst-11); 1 тест = 1 вызов (d-tst-13). ## Заготовки (DataTable) Таблица `workout_set_*`: id:Guid, workout_id:Guid, athlete_id:int, exercise_id:Guid?, seq:int, weight_kg:decimal, reps:int, done_at:DateTime, source:string, in_plan:bool, rpe:int?, knee_pain:int?. Строки: `s1` — seq 1, 50.0×15, voice, rpe NULL. Таблица `command_log_*`: id:Guid, workout_id:Guid, t_offset_s:int, recognized_text:string, semantics:string (jsonb), accepted:bool. Строки: `c1` — 65 с, 'TEST-вес пятьдесят', accepted. ## Тесты: `Insert` (WorkoutSet) | № | Тип | Условие | Ожидаемый результат | |---|---|---|---| | 1 | основной | s1 (rpe/knee_pain/exercise_id null); scalar = Guid s1 | 12 параметров; NULL → DBNull | ## Тесты: `Get` (WorkoutSet) | № | Тип | Условие | Ожидаемый результат | |---|---|---|---| | 1 | основной | таблица [s1] | сущность; Rpe = null | | 2 | граничный | пустая таблица | null | ## Тесты: `Insert` (CommandLog) | № | Тип | Условие | Ожидаемый результат | |---|---|---|---| | 1 | основной | c1; scalar = Guid c1 | 7 параметров; Semantics как jsonb-строка | ## Тесты: `Select` (CommandLog) | № | Тип | Условие | Ожидаемый результат | |---|---|---|---| | 1 | основной | таблица [c1] | 1 сущность; поля строго по конвертеру | | 2 | граничный | пустая таблица | пустая коллекция (не null) |