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

2.8 KiB
Raw Blame History

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

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

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

Метод Транспорт Функция БД
Insert(Athlete) scalar int src.athlete_insert(p_name, p_api_key_hash)
Update(Athlete) scalar int src.athlete_update(p_id, p_name, p_api_key_hash, p_is_blocked)
Select(AthleteFilter?) reader src.athlete_select(p_api_key_hash, p_is_blocked)
Get(int) reader src.athlete_get(p_id)

AthleteFilter: ApiKeyHash (string?, NULL — не применяется), IsBlocked (bool?, NULL — не применяется).

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

ConnectionStringTest (фейк транспорта, d-tst-11); проверки — в момент вызова: CommandText = имя функции, IsStoredProcedure = true, строгий набор параметров в обе стороны; заготовка = один DataTable (один конвертер); 1 тест = 1 вызов (d-tst-13).

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

Таблица ответа athlete_*: id:int, name:string, api_key_hash:string, is_blocked:bool, created_at:DateTime.

Строки-фикстуры: a1 — TEST-Атлет / TEST-hash-1 / не заблокирован; a2 — TEST-Атлет-2 / TEST-hash-2 / заблокирован.

Тесты: Insert

№ Тип Условие Ожидаемый результат
1 основной фикстура a1; scalar = 7 Insert→7; параметры p_name, p_api_key_hash; p_is_blocked/p_created_at не передаются

Тесты: Update

№ Тип Условие Ожидаемый результат
1 основной a1 с новым именем; scalar = 1 Update→1; параметры p_id, p_name, p_api_key_hash, p_is_blocked (все поля, db-m-8)

Тесты: Select

№ Тип Условие Ожидаемый результат
1 основной таблица [a1]; фильтр ApiKeyHash 1 сущность; поля строго по конвертеру
2 граничный пустая таблица (колонки без строк); фильтры NULL пустая коллекция (не null); параметры DBNull

Тесты: Get

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