food-market/tests/food-market.UnitTests
nns 63da7a9334 perf(pos): мгновенный старт — gzip-каталог, дельта остатков, синк вне UI-потока
Касса работает из локальной базы сразу; вся синхронизация — в фоне, UI не ждёт.
- HttpClient с AutomaticDecompression: сервер уже жмёт JSON (gzip), но касса не
  слала Accept-Encoding → каталог 30k ехал 22 МБ; теперь 3 МБ (×7.3).
- ApplySync: убран O(n²) скан цен (HashSet product-id) — запись 30k 12.2с → 1.8с.
- Остатки дельтой: PosSyncResponse.StocksFullSnapshot — первичная загрузка = полный
  снимок, далее только изменённые (ушедшие в 0 удаляются). Рекуррентный тик:
  остатков 30000→0, 806мс→189мс.
- Синк вне UI-потока (Task.Run) + маршалинг обновлений через Dispatcher: тяжёлая
  запись каталога/дельты никогда не фризит окно. Флаг анти-перекрытия тиков.
- Индикатор в шапке «обновлено N мин назад / обновляется…»; ненавязчивая полоса
  первичной загрузки (только когда каталог пуст), не модалка.
- Сервер: since нормализуется к UTC (был 500 от Npgsql на Kind=Unspecified).
- Тест POS-дельты остатков (upsert/zero-remove); oversell-тест кассы приведён к
  решению владельца (продажа в минус разрешена → Accepted + предупреждение).

Замеры (стенд, 30 000 товаров): первичная 14.9с→5.1с (сеть 3.2с + запись 1.8с),
тёплый старт 141мс, дельта без изменений 189мс, дельта 500 товаров ~0.35с.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 04:59:01 +05:00
..
Support feat(audit): per-tenant журнал мутаций OrgAuditLog (P1-18) 2026-05-28 16:26:36 +05:00
AdvancedModeFilterTests.cs test(s29): unit (6) + integration (7) + e2e scenario для simple-mode (шаг 7/8) 2026-10-04 12:02:44 +05:00
ApiReferenceDocsJobTests.cs test: ApiReferenceDocsJob regex lock-down (Sprint 28) 2026-06-09 03:38:29 +05:00
CatalogDtosSmokeTests.cs test(s15): axe a11y + focus traps + unit coverage 80% + property tests + backup drill 2026-06-07 14:53:38 +05:00
ClaudeCliInvoiceExtractorParseTests.cs test(s31): unit 20/20 + integration 2/2 для invoice pipeline (7/8) 2026-10-04 21:46:10 +05:00
ClaudeCliInvoicePhotosParseTests.cs feat(invoices+inventory): порт улучшений 05.10.2026 из sklad 2026-10-06 00:02:13 +05:00
DomainFullPropertyTouchTests.cs test(s15): axe a11y + focus traps + unit coverage 80% + property tests + backup drill 2026-06-07 14:53:38 +05:00
DomainPocoSmokeTests.cs feat(inventory): модель МойСклада — инвентаризация не двигает остатки 2026-10-08 20:34:05 +05:00
EanTests.cs feat(invoices+inventory): порт улучшений 05.10.2026 из sklad 2026-10-06 00:02:13 +05:00
EmailTemplateRendererTests.cs feat(email): HTML-шаблоны MailKit + invite/weekly/low-stock джобы (P1-22) 2026-05-28 16:37:32 +05:00
FiscalMockProviderTests.cs feat(s11): ОФД-scaffolding — IFiscalProvider + 4 провайдера + UI/тесты 2026-06-07 02:27:17 +05:00
food-market.UnitTests.csproj feat(pos-core): логика кассы без UI + 37 unit-тестов 2026-10-08 04:58:22 +05:00
HousekeepingJobsTests.cs feat(hangfire): dashboard + scheduled cleanup джобы (P1-16) 2026-05-28 10:07:14 +05:00
InventoryResultTests.cs feat(inventory): модель МойСклада — инвентаризация не двигает остатки 2026-10-08 20:34:05 +05:00
InvoiceMatcherTests.cs test(s31): unit 20/20 + integration 2/2 для invoice pipeline (7/8) 2026-10-04 21:46:10 +05:00
InvoicePhotoRetentionTests.cs feat(invoices+inventory): порт улучшений 05.10.2026 из sklad 2026-10-06 00:02:13 +05:00
MediatrHandlerTests.cs feat(cqrs): MediatR partial — 3 handler-образца (TD-1) 2026-05-28 17:51:08 +05:00
MoneyMathTests.cs test(money): независимый инвариант остатка счёта (нач+платежи+смены) + unit/integration 2026-10-08 03:11:09 +05:00
MovingAverageCostTests.cs test(unit): xUnit-проект food-market.UnitTests, 23 теста (P1-20) 2026-05-27 03:01:56 +05:00
NegativeStockNotifyQuietHoursTests.cs feat(notifications): центр уведомлений + агрегация/эскалация минусов + каналы 2026-10-09 02:56:59 +05:00
NoopNegativeStockAlertService.cs feat(notifications): центр уведомлений + агрегация/эскалация минусов + каналы 2026-10-09 02:56:59 +05:00
PagedRequestTests.cs test(s15): axe a11y + focus traps + unit coverage 80% + property tests + backup drill 2026-06-07 14:53:38 +05:00
PhoneNormalizationTests.cs test(s15): axe a11y + focus traps + unit coverage 80% + property tests + backup drill 2026-06-07 14:53:38 +05:00
PinHasherTests.cs feat(pos): быстрый вход кассира по PIN (grant_type=pin) + lockout 2026-10-08 09:38:36 +05:00
PosContractsTests.cs feat(pos-shared): контракты POS v1 в food-market.shared (P1-12a) 2026-05-28 12:03:04 +05:00
PosCoreTests.cs perf(pos): мгновенный старт — gzip-каталог, дельта остатков, синк вне UI-потока 2026-10-09 04:59:01 +05:00
RequiredGuidTests.cs test(s15): axe a11y + focus traps + unit coverage 80% + property tests + backup drill 2026-06-07 14:53:38 +05:00
RetailPaymentValidatorTests.cs test(unit): xUnit-проект food-market.UnitTests, 23 теста (P1-20) 2026-05-27 03:01:56 +05:00
RolePermissionsTests.cs test(s15): axe a11y + focus traps + unit coverage 80% + property tests + backup drill 2026-06-07 14:53:38 +05:00
StockServicePropertyTests.cs feat(notifications): центр уведомлений + агрегация/эскалация минусов + каналы 2026-10-09 02:56:59 +05:00
StockServiceTests.cs feat(notifications): центр уведомлений + агрегация/эскалация минусов + каналы 2026-10-09 02:56:59 +05:00
TableReaderTests.cs feat(invoices+inventory): порт улучшений 05.10.2026 из sklad 2026-10-06 00:02:13 +05:00
TenantQueryFilterTests.cs test(unit): xUnit-проект food-market.UnitTests, 23 теста (P1-20) 2026-05-27 03:01:56 +05:00
ValidatorTests.cs feat(validation): FluentValidation + ValidationFilter для DTO (TD-2) 2026-05-28 17:40:46 +05:00
WebkassaProviderTests.cs feat(s11): ОФД-scaffolding — IFiscalProvider + 4 провайдера + UI/тесты 2026-06-07 02:27:17 +05:00
WeightedBarcodeTests.cs test(mobile-api): unit + integration доработок для «FM Склад» 2026-10-08 05:39:37 +05:00