Translate the Playwright e2e suite to English
Test titles, describe blocks, comments and assertion messages are now in English, so the runner output and the code are readable without Italian. Deliberately left in Italian, because they are matched against the app or typed into it: - UI text used in locators (page headings, badges, empty states, SweetAlert messages, sidebar entries, category names) - form values filled in by the tests, so screenshots and demo videos keep showing an Italian UI with Italian data - fixture labels passed to name(), for the same reason Screenshot files are renamed to the English labels the suite now writes (desktop-registro.png -> desktop-registry.png and so on); the docs that quote test titles or screenshot names are updated to match. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
# Manutenzioni — тест-план
|
||||
|
||||
Полный список проверок. **Бо́льшая часть автоматизирована** — руками остаётся только то, что действительно требует глаз (список ниже).
|
||||
|
||||
---
|
||||
|
||||
## Автопрогон — одна команда
|
||||
|
||||
```bash
|
||||
make test # всё: 20 юнитов + 68 API-проверок + 69 браузерных тестов
|
||||
```
|
||||
|
||||
По отдельности (`make` без аргументов покажет весь список):
|
||||
|
||||
```bash
|
||||
make test-unit # логика расписания, без базы и сервера (0.02 с)
|
||||
make test-api # логин, ajax, БД, файлы, права — 68 проверок
|
||||
make test-e2e # браузер на 1440 px — 69 тестов
|
||||
make test-sizes # полный прогон на каждом размере: 1440 / 820 / 390 px
|
||||
make test-e2e-ui # интерактивный режим, видно каждый шаг
|
||||
```
|
||||
|
||||
### Прогон по размерам экрана
|
||||
|
||||
`make test-sizes` гоняет **всю** сюиту трижды — на PC (1440), планшете (820) и телефоне (390):
|
||||
|
||||
| Размер | Тестов | Что проверяется отдельно |
|
||||
|---|---|---|
|
||||
| desktop 1440 | 69 | + вёрстка на трёх ширинах и сквозной обход |
|
||||
| tablet 820 | 56 | целевое устройство по ТЗ |
|
||||
| mobile 390 | 56 | карточки вместо таблиц, полноэкранные модалки |
|
||||
|
||||
Итого 181 браузерная проверка. Тесты написаны без привязки к вёрстке: хелпер `listItem()` берёт строку таблицы или карточку — смотря что видно на этой ширине.
|
||||
|
||||
## Видео вместо кликанья
|
||||
|
||||
```bash
|
||||
make demo # ~50 с: сквозной обход модуля → tests/e2e/video/demo.mp4
|
||||
make video # весь прогон, склеенный по устройствам → tests/e2e/video/
|
||||
make video-sizes # то же для каждого размера → tests/e2e/video/<формат>/
|
||||
```
|
||||
|
||||
`make demo` прогоняет `tour.spec.js` — один непрерывный сценарий: реестр и фильтры → импортированная карточка `mod. 6.3-1` → создание оборудования → добавление ТО → регистрация работы с подписью мышью → пересчёт срока → история → печатная форма → оба календаря → категории → телефон и планшет. Это полноценный тест: если что-то сломано, он упадёт.
|
||||
|
||||
`make video` записывает все 69 тестов и склеивает их в пять файлов (`ffmpeg`, склейка по разрешениям — иначе кадры разного размера не соединить):
|
||||
|
||||
| Файл | Что внутри | Длительность |
|
||||
|---|---|---|
|
||||
| `demo.mp4` | сквозной обход | ~50 с |
|
||||
| `suite-funzionali.mp4` | реестр, ТО, интервенции, календари, печать, права | ~70 с |
|
||||
| `suite-desktop.mp4` | вёрстка 1440 px | ~15 с |
|
||||
| `suite-tablet.mp4` | вёрстка 820 px + подпись пальцем | ~35 с |
|
||||
| `suite-mobile.mp4` | вёрстка 390 px | ~15 с |
|
||||
|
||||
Прогоны API и браузерный делают настоящий логин, работают с живой страницей и сверяют результат в базе. Заводят только данные с префиксом `ZZTEST_` / `ZZE2E_` и **удаляют их за собой**, в том числе при падении. Оба возвращают ненулевой код при ошибке — годятся для CI.
|
||||
|
||||
Полезное для e2e:
|
||||
|
||||
```bash
|
||||
npm run test:e2e:ui # интерактивный режим: видно каждый шаг
|
||||
npm run test:e2e:headed # с открытым браузером
|
||||
npx playwright show-trace tests/e2e/.artifacts/<папка>/trace.zip # разбор падения
|
||||
```
|
||||
|
||||
**Скриншоты.** Каждый прогон e2e складывает в `tests/e2e/screenshots/` по 5 картинок на устройство (390 / 820 / 1440 px): реестр, список ТО, карточка, календарь, модалка интервенции, плюс `tablet-signature.png` с реальным росчерком пальцем. Проще пролистать их, чем кликать вручную.
|
||||
|
||||
**Что закрыто автоматикой:** разделы 1, 2, 3, 5, 6, 7, 8, 9 (включая генерацию PDF), 10, 11, 12 (запуск без ошибок).
|
||||
|
||||
## Что смотреть глазами (короткий список)
|
||||
|
||||
Осталось немного — то, что машина проверить не может в принципе:
|
||||
|
||||
| Что | Пункты |
|
||||
|---|---|
|
||||
| Субъективное качество вёрстки — по скриншотам из `tests/e2e/screenshots/` | 2.1, 11.1–11.4 |
|
||||
| Как выглядит PDF после реальной печати из браузера | 9.4, 9.5 |
|
||||
| **Реальная доставка писем** на живой ящик | 12.2, 12.4 |
|
||||
| Импортированные из XLS данные — выборочная сверка с их файлами | 13.2–13.7 |
|
||||
| Подпись пальцем на **настоящем** планшете (в браузере эмулируется, но железо стоит потрогать) | 6.6 |
|
||||
|
||||
Ниже — полный список, если хочется пройти всё подряд руками.
|
||||
|
||||
---
|
||||
|
||||
## 0. Подготовка
|
||||
|
||||
- База: `http://localhost:8001/zibo-dashboard/public` (контейнеры `zibo-app` + `zibo-db`, база на порту 3308).
|
||||
Если не подняты: `docker compose up -d` (порт 3307 может быть занят — тогда нужен override на 3308).
|
||||
- Логин под админом (роль Admin, id 1). В форме логина поле называется **username**, туда e-mail.
|
||||
- Дев-база уже наполнена импортом: **101 единица оборудования, 126 ТО, 20 подрядчиков, 5 категорий**.
|
||||
- Всё меню модуля: сайдбар → **Manutenzioni**.
|
||||
|
||||
---
|
||||
|
||||
## 1. Ничего старого не сломалось (сначала это!)
|
||||
|
||||
Переименование `production_tools` → `inv_equipment` затронуло модуль производства.
|
||||
|
||||
- [ ] **1.1** `userarea/production_tools.php` — открывается по прежнему адресу, в списке видны `Taglierina` (×2), `Marcatura Laser`, `Coestrusore diametro 70` **и** оборудование из импорта.
|
||||
- [ ] **1.2** Там же: кнопка «Aggiungi Strumento» — создать тестовый инструмент. Сохраняется, появляется в списке.
|
||||
- [ ] **1.3** Он же появился в новом реестре (`Manutenzioni → Registro Attrezzature`) в категории **Attrezzature**.
|
||||
- [ ] **1.4** Редактирование инструмента на старой странице: в поле «Stato» теперь три варианта (Attivo / Fuori servizio / Dismesso). Меняем на «Fuori servizio» → сохранилось.
|
||||
- [ ] **1.5** Кнопка удаления на старой странице — раньше **всегда падала** с «Invalid ID.», теперь помечает как «Dismesso». Проверить на тестовом инструменте.
|
||||
- [ ] **1.6** `userarea/skills.php` — открывается, выпадающий список «Attrezzature» заполнен.
|
||||
- [ ] **1.7** `userarea/production_line_view2.php` — открывается, колонка с инструментами у записей производства не пустая и не сломана.
|
||||
- [ ] **1.8** `userarea/production_dashboard.php` — открывается, кнопка «Attrezzature» ведёт куда вела.
|
||||
|
||||
---
|
||||
|
||||
## 2. Реестр оборудования
|
||||
|
||||
`Manutenzioni → Registro Attrezzature`
|
||||
|
||||
- [ ] **2.1** Список открывается, у части позиций видна обложка-заглушка (шестерёнка), у категорий свои цветные точки.
|
||||
- [ ] **2.2** Поиск «CARRELLO» → находит погрузчики.
|
||||
- [ ] **2.3** Фильтр по категории **Edifici e impianti** → ~24 позиции (здания, противопожарные двери, чиллеры, котёл).
|
||||
- [ ] **2.4** Фильтр по линии **Linea 1 — UHF** → 10 позиций, все с «LINEA 1» в названии.
|
||||
- [ ] **2.5** Фильтр по статусу «Dismesso» → пусто (или только то, что сам пометил в п.1.4).
|
||||
- [ ] **2.6** Кнопка «Azzera» сбрасывает все фильтры.
|
||||
- [ ] **2.7** «Nuova attrezzatura» → заполнить имя + категорию **Attrezzature** → сохраняется, появляется в списке.
|
||||
- [ ] **2.8** В той же форме выбрать категорию **Linea di produzione** → появляется обязательное поле «Linea di produzione». Попытка сохранить без линии → предупреждение.
|
||||
- [ ] **2.9** Редактирование (карандаш) — форма открывается **с заполненными** полями, изменения сохраняются.
|
||||
- [ ] **2.10** Удаление (корзина) своей тестовой записи → удаляется после подтверждения.
|
||||
- [ ] **2.11** Удаление `Taglierina` (id 1) → **отказ**: «используется в 2 записях производства, пометьте как Dismesso».
|
||||
|
||||
---
|
||||
|
||||
## 3. Категории
|
||||
|
||||
`Manutenzioni → Categorie`
|
||||
|
||||
- [ ] **3.1** Пять категорий: Linea di produzione, Edifici e impianti, Attrezzature, Accessori, Qualità. У «Linea di produzione» стоит галка «Richiede linea».
|
||||
- [ ] **3.2** Создать категорию «Test QA» с цветом и порядком → появилась.
|
||||
- [ ] **3.3** Создать вторую с тем же именем → отказ «Esiste già una categoria con questo nome».
|
||||
- [ ] **3.4** Отредактировать «Test QA», поставить «Richiede una linea di produzione» → сохранилось; в форме оборудования при выборе этой категории появляется поле линии.
|
||||
- [ ] **3.5** Удалить «Test QA» (пустую) → удаляется.
|
||||
- [ ] **3.6** Удалить «Attrezzature» → **отказ**: используется N оборудованием.
|
||||
|
||||
---
|
||||
|
||||
## 4. Карточка оборудования, фото и документы
|
||||
|
||||
Открыть `CARRELLO ELEVATORE CAR.MI. MOD. PL416` (из реестра).
|
||||
|
||||
- [ ] **4.1** Слева блок «Dati»: матрикола `55551002N5069`, производитель `CAR.MI.`, дата ввода в эксплуатацию 01/01/2002.
|
||||
- [ ] **4.2** Справа 8 работ с кодами **A–H**, частоты: A — «Ogni 2 settimane», B–E — «Ogni 3 mesi», F,G — «Ogni 6 mesi», H — «Ogni 1 anno».
|
||||
- [ ] **4.3** Загрузить фото (кнопка «+» в блоке «Foto») → появилось в галерее и **сразу стало обложкой** (рамка), обложка видна в списке реестра.
|
||||
- [ ] **4.4** Загрузить второе фото → обложка не поменялась. Нажать на нём звёздочку → стало обложкой.
|
||||
- [ ] **4.5** Загрузить документ PDF в блок «Documenti» → появился, открывается по клику в новой вкладке.
|
||||
- [ ] **4.6** Попробовать загрузить `.php` файл → отказ «Tipo di file non consentito».
|
||||
- [ ] **4.7** Скопировать ссылку на фото, открыть в **приватном окне** (без сессии) → 401, файл не отдаётся.
|
||||
- [ ] **4.8** Удалить фото и документ → исчезают.
|
||||
|
||||
---
|
||||
|
||||
## 5. Манутенции (ТО)
|
||||
|
||||
- [ ] **5.1** «Nuova manutenzione» на карточке: код `Z`, название, тип **Programmata**, исполнение **Interna**, частота «Ogni 2 mesi», преавизо 15, исполнитель и ответственный → сохранилось, видно в списке.
|
||||
- [ ] **5.2** Исполнение **Esterna** → появляется обязательный «Fornitore esterno». Сохранить без него → предупреждение.
|
||||
- [ ] **5.3** Частота **«Al bisogno»** → поле «Ogni» прячется; сохранённая запись показывает «Al bisogno», даты «Prossimo» нет.
|
||||
- [ ] **5.4** Поле «Nota sulla frequenza»: вписать «prima dell'accensione» → текст виден в строке ТО после частоты.
|
||||
- [ ] **5.5** Галка «Manutenzione critica» → красная плашка «Critica» и красная полоса слева.
|
||||
- [ ] **5.6** Галка «Attiva» снята → строка тускнеет, плашка «Disattivata»; такое ТО пропадает из общего списка `Manutenzioni`.
|
||||
- [ ] **5.7** Приложить файл-инструкцию в форме ТО → после сохранения счётчик «N istruzioni» в строке; при повторном открытии формы файл в списке, скачивается, удаляется.
|
||||
- [ ] **5.8** Удалить своё тестовое ТО → предупреждение о числе интервентов, после подтверждения исчезает.
|
||||
- [ ] **5.9** Открыть `CHILLER UFFICI E POMPA DI CALORE ELCO` → 4 работы A–D **без даты** (сезонные), в примечании частоты полный текст «prima dell'accensione / durante il periodo estivo… / dopo lo spegnimento». Плюс одна внешняя от `Piacenza Impianti`.
|
||||
- [ ] **5.10** Открыть `EVAPORATORE SOTTOVUOTO…` → **три** ТО: внутреннее + два внешних, `Ecotechno` и `Ecogenerazione` (не должны схлопнуться в одно).
|
||||
|
||||
---
|
||||
|
||||
## 6. Регистрация интервенций и пересчёт срока
|
||||
|
||||
Это ядро модуля — проверить внимательно. Взять любое ТО с частотой (например CARMI, код B — «Ogni 3 mesi»).
|
||||
|
||||
- [ ] **6.1** Кнопка «✓» → открывается форма, дата подставлена сегодняшняя, вверху написано, к какому оборудованию и ТО относится.
|
||||
- [ ] **6.2** Поставить дату **три месяца назад**, статус **Completato**, эсито **Conforme**, оператора, заметку, материалы → сохранить.
|
||||
- [ ] **6.3** В строке ТО: «Ultimo» = введённая дата, «Prossimo» = она же + 3 месяца, плашка состояния пересчиталась.
|
||||
- [ ] **6.4** Кнопка «Storico interventi (N)» разворачивает таймлайн, там видна запись с оператором, эсито и заметками.
|
||||
- [ ] **6.5** **Подпись:** в форме интервенции расписаться мышью в поле подписи → после сохранения миниатюра подписи видна в таймлайне и в печатной форме.
|
||||
- [ ] **6.6** На планшете/телефоне: подпись рисуется пальцем, страница при этом не скроллится.
|
||||
- [ ] **6.7** «Cancella firma» очищает поле; при редактировании существующей интервенции стирает и сохранённую подпись.
|
||||
- [ ] **6.8** Добавить интервенцию в статусе **Pianificato** на будущую дату → «Prossimo» **не изменился** (двигают только завершённые).
|
||||
- [ ] **6.9** Приложить файл к интервенции (модуль подрядчика) → счётчик скрепки в таймлайне, файл открывается.
|
||||
- [ ] **6.10** Удалить последнюю завершённую интервенцию → «Prossimo» откатился на предыдущую дату (или опустел, если она была единственной).
|
||||
- [ ] **6.11** Редактирование интервенции (карандаш в таймлайне) → поля подставлены, изменение даты пересчитывает срок.
|
||||
|
||||
---
|
||||
|
||||
## 7. Общий список ТО
|
||||
|
||||
`Manutenzioni → Manutenzioni`
|
||||
|
||||
- [ ] **7.1** Четыре плитки сверху: Scadute / In scadenza / In regola / Al bisogno, сумма ≈ числу активных ТО активного оборудования.
|
||||
- [ ] **7.2** Клик по плитке «Scadute» фильтрует список; повторный клик снимает фильтр.
|
||||
- [ ] **7.3** Фильтр «Solo programmata» / «Solo straordinaria» работает.
|
||||
- [ ] **7.4** Галка «Solo critiche» → остаются только с красной плашкой.
|
||||
- [ ] **7.5** Галка «Assegnate a me» → остаются ТО, где ты исполнитель или ответственный (нужно, чтобы твой `auth_users` был связан с `employees.auth_user_id`; если связи нет — список пустой, это ожидаемо).
|
||||
- [ ] **7.6** Сортировка: просроченные и ближайшие сверху, «Al bisogno» — в конце.
|
||||
- [ ] **7.7** Кнопка «✓» прямо из списка открывает ту же форму интервенции.
|
||||
|
||||
---
|
||||
|
||||
## 8. Календари
|
||||
|
||||
- [ ] **8.1** `Manutenzioni → Calendario`: события на датах, цвет по состоянию (красный — просрочено, жёлтый — скоро, иначе цвет категории).
|
||||
- [ ] **8.2** Клик по событию → открывается карточка нужного оборудования.
|
||||
- [ ] **8.3** Фильтры «тип» и «категория» перерисовывают календарь.
|
||||
- [ ] **8.4** На телефоне календарь открывается сразу в виде списка (listMonth), не ломается по ширине.
|
||||
- [ ] **8.5** `Manutenzioni → Calendario Cumulativo`: три переключателя — Scadenze 📅, Formazione 🎓, Manutenzioni 🔧.
|
||||
- [ ] **8.6** Выключение слоя убирает его события, включение возвращает.
|
||||
- [ ] **8.7** Клик по событию scadenza ведёт в scadenzario, по formazione — в trainings, по manutenzione — в карточку оборудования.
|
||||
- [ ] **8.8** Выключить все три слоя → календарь пуст, ошибок нет.
|
||||
|
||||
---
|
||||
|
||||
## 9. Печать / PDF
|
||||
|
||||
- [ ] **9.1** На карточке кнопка «Scheda PDF» → открывается вёрстка их бланка: шапка «SCHEDA MANUTENZIONE», справа «ZIBOGOMMA / mod. 6.3-1», строка «MACCHINA:».
|
||||
- [ ] **9.2** Таблица «Interventi previsti» — коды, описания, частоты, исполнение (внутр./фирма).
|
||||
- [ ] **9.3** Таблица «Registro interventi eseguiti» — дата, код, описание, оператор, картинка подписи.
|
||||
- [ ] **9.4** Ctrl/Cmd+P → в предпросмотре печати кнопки скрыты, таблицы не рвутся по строкам, шапка таблицы повторяется на второй странице.
|
||||
- [ ] **9.5** Сохранить как PDF — файл читаемый.
|
||||
|
||||
---
|
||||
|
||||
## 10. Права (важно — проверяется на бэке, не только в меню)
|
||||
|
||||
Понадобится второй пользователь с ролью без прав `maintenance.*` (например `employee`).
|
||||
|
||||
- [ ] **10.1** Под таким пользователем пункт «Manutenzioni» в меню не виден.
|
||||
- [ ] **10.2** Прямой заход на `userarea/manutenzioni/index.php` → «Permesso negato», а не страница.
|
||||
- [ ] **10.3** Выдать в «Autorizzazioni» роли только `maintenance.equipment.view` → реестр открывается, но **кнопок создания/редактирования нет**, блок «Manutenzioni» на карточке пишет, что прав нет.
|
||||
- [ ] **10.4** Добавить `maintenance.manage` → кнопки появились, создание работает.
|
||||
|
||||
---
|
||||
|
||||
## 11. Мобильный и планшет
|
||||
|
||||
Проверять на реальном планшете или в devtools (375px и 768px).
|
||||
|
||||
- [ ] **11.1** 375px: реестр показан **карточками**, не таблицей; ничего не уезжает за край, горизонтального скролла нет.
|
||||
- [ ] **11.2** 375px: список ТО — карточками; плитки-счётчики по две в ряд.
|
||||
- [ ] **11.3** Модалки открываются на весь экран, кнопки внизу доступны.
|
||||
- [ ] **11.4** 768px (планшет — целевое устройство по ТЗ): таблицы читаемы, сайдбар по умолчанию скрыт, гамбургер работает.
|
||||
- [ ] **11.5** Форма интервенции на планшете: подпись пальцем, все поля доступны без зума.
|
||||
|
||||
---
|
||||
|
||||
## 12. Уведомления (cron)
|
||||
|
||||
- [ ] **12.1** Поставить у ТО исполнителя, у которого `employees.auth_user_id` связан с реальным почтовым ящиком, и дату «Prossimo» в прошлом.
|
||||
- [ ] **12.2** Запустить: `docker exec zibo-app php /var/www/zibo-dashboard/public/userarea/manutenzioni/cron/send_notifications.php`
|
||||
→ в консоли «Inviate: N», письмо приходит исполнителю **и** ответственному.
|
||||
- [ ] **12.3** Запустить второй раз в тот же день → «saltate», повторных писем нет.
|
||||
- [ ] **12.4** В письме: тема с названием оборудования, дата, для критичного ТО — пометка, кнопка ведёт на карточку.
|
||||
- [ ] **12.5** ТО с частотой «Al bisogno» писем не порождает.
|
||||
|
||||
---
|
||||
|
||||
## 13. Импортированные данные (выборочно, глазами)
|
||||
|
||||
- [ ] **13.1** Всего в реестре ~101 позиция; фильтр по категориям даёт ~74 Attrezzature, ~24 Edifici e impianti, 3 Linee.
|
||||
- [ ] **13.2** У `FABBRICATI` — 8 работ уборки от `PULINET di Angelini Bassano` (giornaliero / settimanale / mensile / trimestrale / al bisogno).
|
||||
- [ ] **13.3** У позиций с «LINEA 1/2/3» в названии проставлена соответствующая линия (в карточке строка «Linea»).
|
||||
- [ ] **13.4** Исполнители расставлены: Alfonso, Gabriele, Junior, Marco, Ester, Marina.
|
||||
- [ ] **13.5** У `DERATTIZZAZIONE CON ESCHE DOMESTICHE` исполнитель пуст, а в заметках ТО написано «Incaricato da XLS: M.GRANATA» — это фирма, записанная в колонке внутренних работ; надо решить, переводить ли её в подрядчики.
|
||||
- [ ] **13.6** В заметках оборудования сохранены имена их бумажных карточек («Schede originali: …»).
|
||||
- [ ] **13.7** **Ожидаемо и требует решения клиента:** у 110 из 125 ТО частота «Al bisogno» — в сводном XLS частот попросту нет, они лежат в отдельных карточках `mod. 6.3-1`, а прислали три из 57.
|
||||
|
||||
---
|
||||
|
||||
## Чего в модуле нет намеренно
|
||||
|
||||
- Калибровка/поверка приборов — вынесена за скоуп самим клиентом. Структура данных её примет отдельной таблицей без переделок.
|
||||
- Импорт истории выполненных работ из старых карточек — журналы в присланных файлах пустые.
|
||||
@@ -0,0 +1,105 @@
|
||||
# Manutenzioni — трассируемость: ТЗ → тесты
|
||||
|
||||
Каждый пункт исходного документа клиента (`Manutenzioni - ACS.pdf`) и то, чем он подтверждён.
|
||||
Условные обозначения: **UI** — браузерный тест (Playwright, гоняется на 1440/820/390), **API** — `tests/manutenzioni/api_test.php`, **U** — юнит-тест PHPUnit.
|
||||
|
||||
---
|
||||
|
||||
## 1. Реестр оборудования
|
||||
|
||||
| Пункт ТЗ | Чем подтверждён | Тест |
|
||||
|---|---|---|
|
||||
| Единая база оборудования, у каждой позиции категория | UI | `§1.2 le quattro categorie del capitolato esistono e sono gestibili` |
|
||||
| Категории: Linea di produzione, Attrezzature, Accessori, Qualità | UI | там же |
|
||||
| Категории **не хардкод**, свой CRUD | UI + API | `Categories › CRUD from the modal, and categories in use cannot be deleted`; API: создание, дубль имени, запрет удаления занятой |
|
||||
| Для категории «линия» обязательно указать линию | UI + API | `§1.5 il campo «linea» compare solo per le categorie che lo richiedono`; API: отказ без линии |
|
||||
| Фильтрация по категории / линии / отделу | UI | `§1.5 the registry filters by production line and by department`; `Equipment registry › the filters really narrow the list` |
|
||||
| Перенос существующих `production_lines` и `production_tools` | UI + API | `§1.6 le linee e gli attrezzi già esistenti sono nel registro unico`; API: старые страницы производства работают после переименования |
|
||||
| Поля: название, серийник, партия, дата покупки, дата ввода, производитель, тип, ubicazione, отдел, заметки | UI | `§1.7 tutti i campi dell'anagrafica si salvano e si rivedono` — сохранение, возврат в форму и отображение в карточке |
|
||||
| Статус (attivo / fuori servizio / dismesso) исключает неактивное из планировочных вью | UI | `§1.7 un'attrezzatura non attiva sparisce dalle viste di pianificazione` — проверяет и список ТО, и календарь |
|
||||
| Вложения: файлы-инструкции и мануалы | UI + API | `Photos, cover image and documents › documents upload and stay downloadable`; отказ на недопустимый тип |
|
||||
| Обложка + дополнительные фото | UI | `la prima foto caricata diventa copertina, anche nel registro`; `la stellina sposta la copertina sulla seconda foto`; `la foto si elimina previa conferma` |
|
||||
| Калибровка — вне скоупа | — | намеренно не реализована; отдельной таблицы нет |
|
||||
|
||||
## 2. Модуль обслуживания
|
||||
|
||||
| Пункт ТЗ | Чем подтверждён | Тест |
|
||||
|---|---|---|
|
||||
| 0..N обслуживаний на единицу; 0 = вне планирования | UI | `§2.1 un'attrezzatura senza manutenzioni resta fuori dalla pianificazione` |
|
||||
| Несколько видов ТО одновременно | UI | `§2.2 la stessa attrezzatura porta più manutenzioni insieme` (три работы на одной машине) |
|
||||
| Типы: программное и внеплановое | UI + API | `«solo critiche» e «programmate/straordinarie» restringono l'elenco`; `riaprendo una manutenzione i campi sono quelli salvati` |
|
||||
| Флаг критичности | UI | `una manutenzione critica è evidenziata nella scheda` |
|
||||
| Внешние исполнители: указать подрядчика | UI + API | `«esterna» chiede il fornitore e blocca il salvataggio senza` |
|
||||
| Приложить форму подрядчика | UI | `un allegato dell'intervento compare nello storico` |
|
||||
| Название/описание | UI | `riaprendo una manutenzione i campi sono quelli salvati` |
|
||||
| Частота через выпадающий список интервалов | UI + U | `«al bisogno» nasconde il campo della frequenza`; `la nota di frequenza resta visibile`; юниты на все единицы интервала |
|
||||
| Файлы-инструкции к ТО | UI | `le istruzioni allegate a una manutenzione si vedono, si riaprono e si eliminano` |
|
||||
| Срок предупреждения | UI | `riaprendo una manutenzione i campi sono quelli salvati` (alert_days) |
|
||||
| Один исполнитель + один ответственный | UI | `§2.6 incaricato e responsabile si salvano e si leggono nella scheda` |
|
||||
| Следующий срок = от последней выполненной работы | UI + U | `registrare un intervento completato aggiorna le date a schermo`; `un intervento pianificato non sposta la scadenza`; `eliminando l'ultimo intervento completato la scadenza torna indietro`; 20 юнитов на арифметику дат |
|
||||
|
||||
## 3. Журнал интервенций
|
||||
|
||||
| Пункт ТЗ | Чем подтверждён | Тест |
|
||||
|---|---|---|
|
||||
| Привязка к конкретному ТО | UI | `la registrazione rapida dall'elenco aggiorna la scadenza` (контекст в модалке) |
|
||||
| Дата | UI | `registrare un intervento completato aggiorna le date a schermo` |
|
||||
| Заметки | UI | `riaprendo un intervento i campi sono quelli salvati` |
|
||||
| Оператор + подпись | UI | `la firma disegnata finisce nello storico`; `la firma si cancella con il pulsante dedicato`; `si firma col dito e la pagina non scorre sotto il tratto` (планшет/телефон) |
|
||||
| Статус (pianificato / in corso / completato) | UI | `un intervento pianificato non sposta la scadenza` |
|
||||
| Результат (conforme / bloccato …) | UI | `riaprendo un intervento i campi sono quelli salvati` |
|
||||
| Материалы / замененные части | UI | там же |
|
||||
| Для внешних: подрядчик и его форма | UI | `un allegato dell'intervento compare nello storico` |
|
||||
|
||||
## 4. Фильтры и вью
|
||||
|
||||
| Пункт ТЗ | Чем подтверждён | Тест |
|
||||
|---|---|---|
|
||||
| Фильтр между программными и внеплановыми | UI | `«solo critiche» e «programmate/straordinarie» restringono l'elenco` |
|
||||
| Календарь ТО по срокам | UI | `il calendario disegna gli eventi e il click porta alla scheda`; `i filtri del calendario rifanno la richiesta` |
|
||||
|
||||
## 5. Выгрузка PDF
|
||||
|
||||
| Пункт ТЗ | Чем подтверждён | Тест |
|
||||
|---|---|---|
|
||||
| Карточка с историей обслуживания по единице | UI | `la scheda riproduce il modulo cartaceo` (шапка mod. 6.3-1, работы, журнал) |
|
||||
| Собственно PDF | UI | `in stampa la barra dei pulsanti sparisce e il PDF si genera` |
|
||||
|
||||
## 6. Уведомления
|
||||
|
||||
| Пункт ТЗ | Чем подтверждён | Тест |
|
||||
|---|---|---|
|
||||
| Письма о просрочке и заранее | API | cron запускается без ошибок; выборка находит просроченное ТО |
|
||||
| Получатели: ответственный **и** исполнитель | — | **браузером не проверяется**: письма уходят из cron, а не из UI. Логика получателей сверена запросом; фактическая доставка — ручной пункт 12 тест-плана |
|
||||
|
||||
## 7. Сводный календарь
|
||||
|
||||
| Пункт ТЗ | Чем подтверждён | Тест |
|
||||
|---|---|---|
|
||||
| Scadenze + formazione + manutenzioni в одном календаре | UI | `ogni strato porta i propri eventi`; `il calendario cumulativo accende e spegne gli strati` |
|
||||
| Разные цветные бейджи по типу срока | UI | `§7 i tre tipi di scadenza hanno colori distinti` (свой цвет и свой значок у каждого слоя) |
|
||||
| Переход из календаря в нужный модуль | UI | `dal calendario cumulativo si arriva alla scheda dell'attrezzatura` |
|
||||
|
||||
## 8. Техтребования
|
||||
|
||||
| Пункт ТЗ | Чем подтверждён | Тест |
|
||||
|---|---|---|
|
||||
| Работа на PC и планшете → адаптивность | UI × 3 | весь набор гоняется на 1440 / 820 / 390; `Layout › …` (нет горизонтальной прокрутки, карточки против таблицы, модалка достижима, сайдбар не прыгает) |
|
||||
|
||||
---
|
||||
|
||||
## Что осталось за пределами автотестов
|
||||
|
||||
| Пункт | Почему | Где проверять |
|
||||
|---|---|---|
|
||||
| Фактическая доставка писем | нужен живой SMTP и ящик | ручной чеклист, раздел 12 |
|
||||
| Внешний вид PDF после печати из браузера | субъективно | ручной чеклист, разделы 9.4–9.5 |
|
||||
| Подпись на физическом планшете | эмуляция ≠ железо | ручной чеклист, 6.6 |
|
||||
| Соответствие импортированных данных их XLS | сверка с бумагой | ручной чеклист, раздел 13 |
|
||||
|
||||
## Как перепроверить
|
||||
|
||||
```bash
|
||||
make test-sizes # весь набор на трёх размерах
|
||||
npx playwright test tests/e2e/capitolato.spec.js # только пункты ТЗ
|
||||
```
|
||||
Reference in New Issue
Block a user