# Тесты `DailyLogRepository` (слой Src) > Репозиторий `Server.WatchBody.Core.Dal.Src.Repository`: > IDailyLogRepository / DailyLogRepository (правила — c-dal; unit-тесты > без БД — c-tst, d-tst). ## Методы → функции БД | Метод | Транспорт | Функция БД | |---|---|---| | `Upsert(DailyLog)` → Guid | scalar Guid | `src.daily_log_upsert(p_athlete_id, p_id, p_date, p_bp_sys, p_bp_dias, p_weight_kg, p_hr_resting, p_wellbeing)` | | `Select(DailyLogFilter?)` → IEnumerable | reader | `src.daily_log_select(p_athlete_id, p_date_from, p_date_to)` | `DailyLogFilter`: `DateFrom` (DateOnly?), `DateTo` (DateOnly?). ## Механика теста (общая) `ConnectionStringTest` (d-tst-11); v2-поля (`waist_cm`, `sleep_h`) в v1 не передаются и не читаются — конвертер их не ждёт. ## Заготовки (DataTable) Таблица `daily_log_*`: id:Guid, athlete_id:int, date:DateOnly, bp_sys:int?, bp_dias:int?, weight_kg:decimal?, hr_resting:int?, waist_cm:decimal?, sleep_h:decimal?, wellbeing:int?. Строки: `d1` — 2026-10-17, 130/80, 157.5, 60, wellbeing 5. ## Тесты: `Upsert` | № | Тип | Условие | Ожидаемый результат | |---|---|---|---| | 1 | основной | d1; scalar = Guid d1 | 8 параметров | ## Тесты: `Select` | № | Тип | Условие | Ожидаемый результат | |---|---|---|---| | 1 | основной | таблица [d1]; фильтры NULL | 1 сущность; поля строго по конвертеру | | 2 | граничный | пустая таблица | пустая коллекция (не null) |