- проект 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>
- UpdateService: проверка через публичный CDN latest.json (тот же хост, что и
установщик — надёжнее поддомена git), fallback на Gitea, лог в %TEMP%\elfisa-update.log
- Настройки: кнопка «Проверить обновления» (ручной триггер + видимый результат)
- Прайс-лист: убран лимит показа (300 → весь прайс/все совпадения одним запросом)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Прайс-лист: дропдаун «Мои прайсы» (подключённые прайсы + «Все прайсы»),
выбор фильтрует каталог по price_list_id; один прайс — выбирается сам
- Загрузить: показывает список подключённых прайсов и качает их
- Core: GetBuyerPriceListsAsync + priceListId в GetPriceSummaryAsync
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- База/дозировка вычисляются на клиенте (порт BuildBaseName/ExtractDosage)
- Три панели: базовые наименования → дозировки (МГ) → предложения поставщиков
- Колонка «Заказ»: ввод числа с клавиатуры (многозначно), Enter — добавить
- Фикс: null-безопасная привязка KeyDown (падало в конструкторе → пустой экран)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- при «Сохранить заказ» резервируется настоящий номер через
GET /api/buyer/global-sign/next (fallback ЧРН-… если офлайн)
- при отправке черновика этот EX-номер передаётся в заказ (global_sign),
заказ сохраняет тот же номер
- ApiClient.NextGlobalSignAsync, BuyerOrderCreateRequest.GlobalSign
- DraftStore: номер задаёт вызывающий
Проверено: черновик = EX-0000018, статус «Не отправлен».
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- CartService: единая корзина для Прайс-листа и Отправить
- Прайс-лист: выбор позиции + кол-во + «Добавить в заказ», индикатор корзины
- Настройки (диалог ⚙ в шапке): адрес API, тема (свет/тьма, применяется
сразу), грузополучатель по умолчанию; сохранение в %APPDATA%
- SettingsStore (Core) + AppConfig читает сохранённый API-адрес
- тема применяется на старте
Проверено вживую: добавление из Прайс-листа в корзину, диалог настроек.
Реальная отправка заказа (POST) — собрана и связана, живой заказ по явному «да»
(автозащита блокирует боевую транзакцию без подтверждения).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>