elfisa-pharmacy/tests/Elfisa.Tests/README.md
Exest 3d89fac6e0
Some checks failed
Desktop tests / test (push) Has been cancelled
тесты: автотесты десктопа (xUnit) + CI
- проект tests/Elfisa.Tests: 56 юнит-тестов на Elfisa.Core + Elfisa.Avalonia:
  версии апдейтера, срок JWT-сессии, ApiClient (URL/ошибки/ретраи/парсинг),
  DTO-контракты, черновики, корзина, дрилдаун прайса (МГ/базовое имя)
- тест-швы: internal-методы через InternalsVisibleTo, ApiClient(HttpMessageHandler)
- CI .github/workflows/desktop-tests.yml — dotnet test при пуше (GitHub/Gitea Actions)
- README с описанием покрытия

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 11:51:50 +03:00

2.4 KiB
Raw Permalink Blame History

Тесты десктопа (Elfisa.Tests)

Автотесты для кросс-платформенного клиента ЭльФиСА (Elfisa.Core + Elfisa.Avalonia).

Запуск

dotnet test tests/Elfisa.Tests/Elfisa.Tests.csproj

или всё решение:

dotnet test Elfisa.sln

CI (.github/workflows/desktop-tests.yml) гоняет их автоматически при пуше в src/** или tests/**.

Что покрыто (56 тестов)

Файл Область
UpdateServiceTests разбор версий тегов (v2.0.42.0.4.0), сравнение «новее», URL установщика
SessionTests срок JWT-сессии (IsJwtExpired): будущий/просроченный/битый токен, запас 60с
ApiClientTests сборка URL, маппинг ошибок (401/429), ретраи на транзиентных сбоях, парсинг сводного прайса, требование токена
DtoTests JSON-контракты (snake_case) DTO: PriceItem, BuyerOrderCreateRequest, LoginResponse, AppSettings
DraftTests суммы черновиков заказа (LineSum, Total, ItemsCount)
CartServiceTests корзина: добавление, слияние по supplier_price_id, удаление, очистка, событие Changed
PriceLogicTests дрилдаун прайса: извлечение дозировки (МГ) и базового наименования

Как устроены моки

  • FakeHttpHandlerTestHelpers.cs) — подменяет HTTP у ApiClient через internal-конструктор ApiClient(HttpMessageHandler, baseUrl). Позволяет тестировать ретраи/ошибки/парсинг без сети.
  • Jwt.Make(exp) — генерирует JWT с нужным exp для тестов сессии.
  • Тестируемые внутренние методы открыты через InternalsVisibleTo("Elfisa.Tests") (в csproj Elfisa.Core и Elfisa.Avalonia).

Задел (не сделано)

Headless UI-тесты (рендер вьюх без экрана) — Avalonia.Headless.XUnit под Avalonia 12 требует xUnit v3, что конфликтует с текущим v2. Добавить после миграции тест-проекта на xUnit v3.