diff --git a/docs/sprint1-progress.md b/docs/sprint1-progress.md index 8755e69..92a879f 100644 --- a/docs/sprint1-progress.md +++ b/docs/sprint1-progress.md @@ -51,9 +51,39 @@ ✅ 23 теста зелёные. Чистая логика вынесена в Application (`MovingAverageCost`, `RetailPaymentValidator`) и используется контроллерами. StockService + query-filter на SQLite in-memory (EF8 поддерживает `ToJson`). `FakeTenantContext`, `SqliteDb` helper. -9. [ ] **P1-21 Integration-тесты** — Testcontainers.PostgreSql + WebApplicationFactory: +9. [x] **P1-21 Integration-тесты** — Testcontainers.PostgreSql + WebApplicationFactory: signup-flow, supply post→unpost, retail overselling, tenant isolation A vs B, permission-проверки. + ✅ `tests/food-market.IntegrationTests` — 10 тестов зелёные на реальном postgres:16-alpine + (Ryuk off, RateLimiting off через env). `ApiFactory`+`ApiActor`. Все 5 сценариев покрыты. + +## Итог + +**Все 9 пунктов выполнены.** Спринт 1 (стабилизация P0/P1-инфра) завершён 2026-05-27. + +Сводка: +- **P0-3** rate-limit (5/мин+20/час на IP, конфигурируем) — `AuthRateLimiterExtensions`. +- **P0-4** health `/health/live` + `/health/ready` (БД+миграции), compose/Dockerfile healthcheck. +- **P0-5** permission-based authz (`[RequiresPermission]` + handler по флагам роли), 10 контроллеров. +- **P0-1** OpenIddict prod X509-ключи из конфига, persistent self-signed. +- **P0-6** авто-бэкап (systemd timer + скрипт + ротация 30д) + `backup-restore.md`. +- **P0-8** `deploy/.env.example` + `secrets.md`. +- **P0-9** `release-checklist.md`. +- **P1-20** unit-тесты (23) — `MovingAverageCost`, `RetailPaymentValidator`, StockService, query-filter. +- **P1-21** integration-тесты (10) — Testcontainers + WebApplicationFactory. + +Сборка зелёная (`dotnet build src/food-market.api`); тесты: **23 unit + 10 integration = 33 зелёных**. +POS (net8.0-windows) на Linux не собирается — ожидаемо, вне scope. + +Пропущено намеренно (по инструкции): P0-7 ОФД (нужен внешний оператор), gateway nginx HTTPS, +`global.json` (локальный даунгрейд не коммитим). Установка backup-таймера/сертификатов на +prod-vm — отдельный деплой-шаг (артефакты готовы). + +### Эффект на код вне P0/P1 +- Чистая логика вынесена в Application (`MovingAverageCost`, `RetailPaymentValidator`) — контроллеры используют её. +- `Program` стал `public partial` для WebApplicationFactory. +- e2e `roles` step08: gap → реальная проверка permission-enforcement (8/8 зелёный). ## Лог -(заполняется по ходу) +- Каждый пункт: build + тесты + коммит порцией + отметка [x] + коммит прогресса. +- Все правки на ветке `main` (origin Forgejo), без коммита `global.json`.