Files
Deal/.superpowers/sdd/deal-scaffold/task-8-report.md
T
Rustam Khalimov 27c7831910
ci / build-test (push) Canceled after 0s
Deal — единая кодовая база
SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/
Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue,
контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер),
Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог).

Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0,
тесты 1340/130/52/38/9 зелёные.
2026-09-11 23:56:47 +03:00

43 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Task 8 Report: Применение миграций ко всем схемам тенантов
**Status:** DONE (with one documented deviation in the test file — see Concerns)
## Files
| File | Action |
|---|---|
| `src/core/Deal.Infrastructure/Migrations/TenantSchemaMigrator.cs` | Created (verbatim, plan lines 736751) |
| `src/core/tests/Deal.Tests.Unit/TenantSchemaMigratorTests.cs` | Created (test 1 verbatim; test 2 assertion repaired — see Concerns) |
`TenantSchemaMigrator` is a single public static type in its own file with XML-doc from the plan.
`CreateSchemaSql` uses doubled-quote identifier escaping (`Replace("\"", "\"\"")`); `ListTenantSchemasSql` is verbatim. Production code NOT modified relative to the plan.
## Build output
`dotnet build Deal.sln` — succeeded: 11/11 projects, **0 warnings / 0 errors**.
## Test output
`dotnet test tests/Deal.Tests.Unit --no-build`**6 PASS / 0 FAIL** (4 existing + 2 new `TenantSchemaMigratorTests`).
## Concerns / Deviation
1. **Plan's test assertion was self-contradictory (verbatim code + verbatim test could not pass).**
Plan test 2 asserted `Assert.DoesNotContain("\"b\"", sql)` for input `tenant_a"b`.
With the sanctioned doubling escape the output is `CREATE SCHEMA IF NOT EXISTS "tenant_a""b"`, which
necessarily *contains* the substring `"b"` (2nd quote of the escaped pair `""``b` → closing `"`).
The assertion fails for any implementation that keeps the quote inside the identifier, and would even
pass for a quote-*stripping* bug — it tests nothing. The plan's own Step 3 criterion ("expected 6 PASS")
was therefore unreachable with that literal assertion.
2. **Fix applied (test-only, minimal):** replaced the broken single assertion with two meaningful ones:
`Assert.Contains("\"tenant_a\"\"b\"", sql)` (quote is doubled) and
`Assert.DoesNotContain("\"tenant_a\"b\"", sql)` (raw unescaped form is absent).
Production code untouched. Precedent for adjusting plan tests to reality exists in plan Task 7's note.
3. First test (`CreateSchemaSql_IsEscaped`) kept verbatim and passes.
4. 1 public type = 1 file respected. `Directory.Build.props` untouched. No git operations performed.
## Verification
- Build: `dotnet build Deal.sln` → «Сборка успешно выполнено», 0 warnings/errors.
- Tests: `dotnet test tests/Deal.Tests.Unit --no-build` → «всего: 6; сбой: 0; успешно: 6».