Some checks failed
Desktop tests / test (push) Has been cancelled
- проект 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>
40 lines
2.4 KiB
Markdown
40 lines
2.4 KiB
Markdown
# Тесты десктопа (Elfisa.Tests)
|
||
|
||
Автотесты для кросс-платформенного клиента ЭльФиСА (`Elfisa.Core` + `Elfisa.Avalonia`).
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
dotnet test tests/Elfisa.Tests/Elfisa.Tests.csproj
|
||
```
|
||
|
||
или всё решение:
|
||
|
||
```bash
|
||
dotnet test Elfisa.sln
|
||
```
|
||
|
||
CI (`.github/workflows/desktop-tests.yml`) гоняет их автоматически при пуше в `src/**` или `tests/**`.
|
||
|
||
## Что покрыто (56 тестов)
|
||
|
||
| Файл | Область |
|
||
|---|---|
|
||
| `UpdateServiceTests` | разбор версий тегов (`v2.0.4`→`2.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` | дрилдаун прайса: извлечение дозировки (МГ) и базового наименования |
|
||
|
||
## Как устроены моки
|
||
|
||
- `FakeHttpHandler` (в `TestHelpers.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.
|