Compare commits
3 commits
5a2ab4589c
...
7ede21321b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ede21321b | ||
|
|
4986d85b73 | ||
|
|
28e8d08c55 |
|
|
@ -118,5 +118,29 @@ _(pageSize=50, время полного HTTP-ответа)_
|
||||||
- [x] (попутно) `food-market.UnitTests` не компилировался (FakeServer не реализовывал
|
- [x] (попутно) `food-market.UnitTests` не компилировался (FakeServer не реализовывал
|
||||||
новый QuickCreateProductAsync) → все юнит-тесты не запускались. Стаб добавлен. Коммит 1324ffd.
|
новый QuickCreateProductAsync) → все юнит-тесты не запускались. Стаб добавлен. Коммит 1324ffd.
|
||||||
|
|
||||||
|
## Итог (2026-10-09)
|
||||||
|
Жалоба владельца «показать нулевые» — исправлена по корню (выборка ОТ Products
|
||||||
|
LEFT JOIN остатки) и проверена на реальном Demo (30 894 товара): без флага 12,
|
||||||
|
includeZero → 30 894, <500 мс/страница. Группы (с 3-уровневой вложенностью),
|
||||||
|
синонимы groupId/productGroupId, артикул+штрихкод для различения дублей — работают.
|
||||||
|
Попутно починены: будущие времена чеков, causeUserId для всех документов, дружелюбные
|
||||||
|
русские ошибки ввода; устаревший oversell-тест приведён к политике; разблокирован
|
||||||
|
проект юнит-тестов.
|
||||||
|
|
||||||
|
**Приёмочные ворота (стенд):**
|
||||||
|
- full-chain C (--api-only): 16/16 ✓ (дважды подряд зелёный)
|
||||||
|
- filters-sweep: 21/21 ✓
|
||||||
|
- menu-walk (3 роли): 3/3 ✓
|
||||||
|
- integration (затронутые классы): 18/18 ✓; unit BusinessTime 5/5 ✓
|
||||||
|
- mobile-UAT 390px: 16 экранов ✓; окно кассы Windows 11 с новым лого ✓
|
||||||
|
|
||||||
|
Коммиты в main (тематические, Co-Authored-By: Claude Opus 4.8; global.json не трогали;
|
||||||
|
rebrand отдельными коммитами 80070cb/28e8d08). Запушено.
|
||||||
|
|
||||||
|
**Остаётся на следующие итерации:** полный per-control UI-UAT P2–P4 (взаимодействие с
|
||||||
|
каждым контролом формы, граничные значения в браузере) сверх покрытого (loads — menu-walk,
|
||||||
|
list-фильтры — filters-sweep, ошибки — API-пробы, mobile — 16 экранов); расширение
|
||||||
|
filters-sweep на остальные web-списки (продажи/приёмки/движения — периоды/статусы/сорт).
|
||||||
|
|
||||||
## Что НЕ трогаем
|
## Что НЕ трогаем
|
||||||
Прод, shared-postgres, global.json, gateway nginx, sklad.
|
Прод, shared-postgres, global.json, gateway nginx, sklad.
|
||||||
|
|
|
||||||
BIN
docs/rebrand-screenshots/now-pos-win11.png
Normal file
BIN
docs/rebrand-screenshots/now-pos-win11.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
|
|
@ -45,23 +45,26 @@
|
||||||
| `catalog/counterparties` | пустое имя | «Название обязательно.» (+рус. заголовок) | ✓ |
|
| `catalog/counterparties` | пустое имя | «Название обязательно.» (+рус. заголовок) | ✓ |
|
||||||
| `inventory/transfers` | в простом режиме | 403 «доступно в расширенном режиме» | ✓ |
|
| `inventory/transfers` | в простом режиме | 403 «доступно в расширенном режиме» | ✓ |
|
||||||
|
|
||||||
### B3. Экраны P1 на ширине телефона (390px) — ✅
|
### B3. Экраны P1–P4 на ширине телефона (390px) — ✅
|
||||||
Playwright-спека `stage-ui-uat-mobile.spec.ts` (в nightly-наборе): dashboard, catalog/products,
|
Playwright-спека `stage-ui-uat-mobile.spec.ts` (в nightly-наборе): 16 экранов —
|
||||||
inventory/stock, sales/retail, reports — **без горизонтального скролла**, без console-ошибок и 5xx.
|
dashboard, catalog/products, counterparties, inventory/{stock,movements,enters,losses,
|
||||||
Скриншоты: `tests/e2e/reports/uat-mobile/` (галерея `index.html`).
|
inventories}, purchases/supplies, sales/retail, money/{accounts,shifts}, reports/{sales,
|
||||||
|
stock,profit}, settings/employees — **без горизонтального скролла**, без console-ошибок и 5xx.
|
||||||
| Экран | 390px без h-scroll | console/5xx | ✓/✗ |
|
Скриншоты: `tests/e2e/reports/uat-mobile/` (галерея `index.html`). Все 16 — ✓.
|
||||||
|---|---|---|---|
|
|
||||||
| Дашборд | да | чисто | ✓ |
|
|
||||||
| Товары | да | чисто | ✓ |
|
|
||||||
| Остатки | да | чисто | ✓ |
|
|
||||||
| Продажи | да | чисто | ✓ |
|
|
||||||
| Отчёты | да | чисто | ✓ |
|
|
||||||
|
|
||||||
Плюс на «Остатках» (390px): по умолчанию виден товар со стоком с артикулом/штрихкодом,
|
Плюс на «Остатках» (390px): по умолчанию виден товар со стоком с артикулом/штрихкодом,
|
||||||
нулевой скрыт; тумблер «Показать нулевые» показывает нулевой — визуально подтверждено
|
нулевой скрыт; тумблер «Показать нулевые» показывает нулевой — визуально подтверждено
|
||||||
(`stock-includeZero-390.png`).
|
(`stock-includeZero-390.png`).
|
||||||
|
|
||||||
|
### B3a. UI-гейтинг прав по ролям (demo-admin/keeper/cashier) — ✅ (попутно)
|
||||||
|
menu-walk (watchdog step 9) прошёл для 3 ролей и подтвердил разное меню: admin 34 пункта,
|
||||||
|
keeper 17, cashier 8 — reload каждого пункта без 4xx/5xx/toast.error/console.error. 3/3 ✓.
|
||||||
|
|
||||||
|
### B3b. Реальное окно кассы на Windows 11 с новым лого — ✅ (rebrand)
|
||||||
|
Снято на win11-kassa-test VM (`foodmarket.Pos.exe --demo`): заголовок «ALL MARKET · Касса»,
|
||||||
|
крупное лого all market, «Касса» рядом, экран продажи целиком, таскбар Windows 11.
|
||||||
|
`docs/rebrand-screenshots/now-pos-win11.png` (коммит rebrand:, отдельно от фиксов).
|
||||||
|
|
||||||
### B4. Прочие найденные и починенные баги (детали в filters-sweep-progress.md)
|
### B4. Прочие найденные и починенные баги (детали в filters-sweep-progress.md)
|
||||||
- Будущие времена в «Последние продажи» — нормализация даты к UTC + clamp будущего.
|
- Будущие времена в «Последние продажи» — нормализация даты к UTC + clamp будущего.
|
||||||
- `causeUserId=null` в алертах минуса — автор пишется для всех типов документов.
|
- `causeUserId=null` в алертах минуса — автор пишется для всех типов документов.
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,20 @@ test.describe('UAT mobile 390px', () => {
|
||||||
const pages: [string, string, RegExp][] = [
|
const pages: [string, string, RegExp][] = [
|
||||||
['/dashboard', 'dashboard', /./],
|
['/dashboard', 'dashboard', /./],
|
||||||
['/catalog/products', 'catalog-products', /Товары|товар/i],
|
['/catalog/products', 'catalog-products', /Товары|товар/i],
|
||||||
|
['/catalog/counterparties', 'counterparties', /./],
|
||||||
['/inventory/stock', 'stock', /Остатки/i],
|
['/inventory/stock', 'stock', /Остатки/i],
|
||||||
|
['/inventory/movements', 'movements', /./],
|
||||||
|
['/inventory/enters', 'enters', /./],
|
||||||
|
['/inventory/losses', 'losses', /./],
|
||||||
|
['/inventory/inventories', 'inventories', /./],
|
||||||
|
['/purchases/supplies', 'supplies', /./],
|
||||||
['/sales/retail', 'sales-retail', /Продажи|чек/i],
|
['/sales/retail', 'sales-retail', /Продажи|чек/i],
|
||||||
['/reports', 'reports', /Отчёт|отчёт/i],
|
['/money/accounts', 'money-accounts', /./],
|
||||||
|
['/money/shifts', 'money-shifts', /./],
|
||||||
|
['/reports/sales', 'reports-sales', /Отчёт|отчёт|продаж/i],
|
||||||
|
['/reports/stock', 'reports-stock', /Остат|Отчёт/i],
|
||||||
|
['/reports/profit', 'reports-profit', /./],
|
||||||
|
['/settings/employees', 'settings-employees', /./],
|
||||||
]
|
]
|
||||||
for (const [path, shot, _re] of pages) {
|
for (const [path, shot, _re] of pages) {
|
||||||
await attachSession(page, sess, path)
|
await attachSession(page, sess, path)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue