[CLAUDE] Docs+Tests: chốt final session 5 — 77 test (Phase 3 mini PE WF) + 3 gotcha CI + 8 doc updates
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m21s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m21s
Final close session 5 — bao gồm: ==== Tests Phase 3 mini (NEW) ==== tests/SolutionErp.Infrastructure.Tests/Application/PeWorkflowAdminTests.cs - 6 test CreatePeWorkflowDefinitionCommandHandler: - First version → IsActive=true, Version=1, ActivatedAt set - Second version same Code → auto-increment v2 + deactivate v1 (atomic) - Different EvaluationType (A vs B) → independent active state - Persists steps ordered by Order field - Persists approvers per step - Third version → v1 + v2 deactivate, v3 active Total tests: 71 → 77 pass / ~2s (54 Domain + 23 Infra). Skip Phase 3 full (UpsertOpinion + Budget link validation) — cần Identity UserManager DI helper, defer session sau. ==== 3 gotcha CI mới (#39 #40 #41) ==== - #39 act_runner github.com TCP timeout 21s → manual checkout fix (run #108/#109 fail, #110 pass) - #40 npm junction cache `tsc not found` after Move-Item — rolled back, hypothesis nested junctions trong node_modules disrupt .bin/ paths. TODO debug session sau với robocopy hoặc act_runner cache.host - #41 Gitea Actions paths-ignore behavior — workflow file change vẫn trigger (correct), commit MD-only skip 100% (verify512880c→ no run #113) + Checklist debug bug mới items 18-20 referencing 3 gotcha trên. ==== Doc updates (8 file) ==== - STATUS.md: header Phase 8 update + 3 row Recently Done CI fixes + cumulative test 71→77 - HANDOFF.md: TL;DR + CI optimize section + Phase status + gotcha count 38→41 - migration-todos.md: Phase 8 §E updated với Phase 3 mini done + CI fixes - rules.md §7 Testing: rewrite full — stack + test pyramid + quy tắc bổ sung mỗi feature + workflow user end-of-task (`dotnet test` local trước push) + CI gate behavior - architecture.md §11: update test pyramid + phased priority + CI optimization sub-section (3 fix manual checkout / path filter / npm cache rollback) + tốc độ deploy table - gotchas.md: + #39 #40 #41 đầy đủ (triệu chứng + nguyên nhân + fix + reference) - ef-core-migration SKILL: Phase 8 update note thêm CI fixes + 77 test - CLAUDE.md root: test count 71→77 + folder structure + CI/CD pipeline 3 fix section - memory project_solution_erp.md: session 5 summary + workflow user mới - session log 2026-04-29-2300-chot-final-ci-tests-gotchas.md (NEW — 9 section detail) ==== Skill audit cron ==== `solution-erp-skill-audit-monthly` next fire 2026-05-01 (2 ngày sau). Cron survives across sessions (setup commitb904a25). Khi fire sẽ: - Cross-check 6 skill với STATUS/gotchas/migration-todos - Auto-refresh stale + đề xuất add/archive cho human approve - Log vào docs/changelog/skill-audit-2026-05.md - ABORT nếu repo dirty ==== Verify ==== - dotnet test SolutionErp.slnx → 77 pass / ~2s (54 Domain + 23 Infra) - git status clean sau commit này - CI: commit này chứa code (test + workflow) → trigger CI test gate Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -318,13 +318,15 @@ Test pyramid bottom-heavy, **không E2E** (brittle, maintenance cao cho solo dev
|
||||
│ E2E / UI (Playwright) │ Brittle, slow, tốn time maintain
|
||||
├──────────────────────────────────┤ ⚠️ TODO Phase 4
|
||||
│ API smoke (WebApplicationFactory)│ 1-2 happy path roundtrip per critical endpoint
|
||||
├──────────────────────────────────┤ ⚠️ TODO Phase 3
|
||||
│ Application Handler (CQRS) │ EF InMemory cho business rules
|
||||
├──────────────────────────────────┤ 🟡 Mini done — 6 test (29/04)
|
||||
│ Application Handler (CQRS) │ PE Workflow Definition versioning. Phase 3 full
|
||||
│ │ (Opinion + Budget link) cần UserManager DI helper
|
||||
├──────────────────────────────────┤ ✅ Done Phase 2 — 17 test
|
||||
│ Infrastructure (SQLite in-mem) │ Code generator format + sequence + year boundary
|
||||
├──────────────────────────────────┤ ✅ Done Phase 1 — 54 test
|
||||
│ Domain Policy (pure functions) │ State machine + role transition + Registry mapping
|
||||
└──────────────────────────────────┘
|
||||
Total: 77 test pass / ~3s
|
||||
```
|
||||
|
||||
**Stack:**
|
||||
@ -348,18 +350,46 @@ Test pyramid bottom-heavy, **không E2E** (brittle, maintenance cao cho solo dev
|
||||
|
||||
**Phase priority — anti-overkill:**
|
||||
|
||||
1. **Phase 1 (Done)** — Domain policy: 3 test file (Contract WF / PE WF / Budget) cover transition rules + Registry + FromDefinition. ~54 test, < 7s.
|
||||
2. **Phase 2 (Done)** — Infra code generator: format RG-001/PE + sequence increment + year boundary (framework HĐ). ~17 test, ~2s.
|
||||
3. **Phase 3 (Pending)** — Application CQRS handler: critical state-change handlers (Transition + Create) với EF InMemory.
|
||||
4. **Phase 4 (Pending)** — API smoke: WebApplicationFactory + SQLite, 5-7 endpoint critical roundtrip.
|
||||
5. **Phase 5 (Pending)** — FE Vitest cho lib utility (queryMatches, fmtMoney) — chỉ pure functions, KHÔNG component snapshot.
|
||||
1. **Phase 1 (Done)** — Domain policy: 3 test file (Contract WF / PE WF / Budget) cover transition rules + Registry + FromDefinition. **54 test**, < 1s.
|
||||
2. **Phase 2 (Done)** — Infra code generator: format RG-001/PE + sequence increment + year boundary (framework HĐ). **17 test**, ~2s.
|
||||
3. **Phase 3 mini (Done)** — Application versioning: `CreatePeWorkflowDefinitionCommand` auto-increment + deactivate cũ + EvaluationType independence. **6 test**.
|
||||
4. **Phase 3 full (Pending)** — Application handlers cần Identity (UpsertOpinion, Budget link validation in CreatePE/CreateContract). Cần build UserManager DI helper trong test fixture.
|
||||
5. **Phase 4 (Pending)** — API smoke: WebApplicationFactory + SQLite, 5-7 endpoint critical roundtrip.
|
||||
6. **Phase 5 (Pending)** — FE Vitest cho lib utility (queryMatches, fmtMoney) — chỉ pure functions, KHÔNG component snapshot.
|
||||
|
||||
**Quy tắc bổ sung mỗi feature mới:**
|
||||
- Domain policy method → 2-3 test (positive + negative + edge)
|
||||
- CQRS handler có guard → 1 test mỗi guard branch
|
||||
- Bug found in production → 1 regression test added before merge
|
||||
|
||||
Detail run: `dotnet test SolutionErp.slnx` chạy cả 71 test ~2s.
|
||||
Detail run: `dotnet test SolutionErp.slnx` chạy cả **77 test ~3s**.
|
||||
|
||||
### CI/CD optimization (29/04)
|
||||
|
||||
3 fix lớn cho Gitea Actions sau khi gặp incident #108/#109:
|
||||
|
||||
1. **Manual checkout bypass github.com (gotcha #39)**:
|
||||
- Replace `uses: actions/checkout@v4` bằng manual `git init` + `git fetch` từ Gitea internal
|
||||
- Lý do: act_runner mỗi run đều fetch action source từ github.com → TCP timeout 21s liên tục → toàn job fail trước test gate
|
||||
- Token `${{ github.token }}` Gitea tự cấp per-job, fetch by ref + depth=30
|
||||
|
||||
2. **Path filter docs-only skip (gotcha #41)**:
|
||||
- `paths-ignore: ['docs/**', '**/*.md', '.claude/skills/**']` trong `on:push`
|
||||
- Commit chỉ touch docs/MD/skill → **Gitea NO trigger workflow** (saving 100% time, ~196s/commit)
|
||||
- Workflow file `.gitea/workflows/**` KHÔNG ignore → vẫn trigger khi sửa CI config
|
||||
|
||||
3. **npm junction cache (gotcha #40)** — thử ở commit `29eb5d9`, fail `tsc not found`:
|
||||
- Hypothesis: Move-Item của `node_modules` chứa nested junctions → .bin/ relative paths broken
|
||||
- Rolled back ở `a21790d`, giữ fresh `npm install` mỗi run (49s + 33s = 82s)
|
||||
- TODO future session: thử `robocopy /MIR` hoặc act_runner built-in cache server
|
||||
|
||||
**Tốc độ deploy hiện tại** (run #110/#112):
|
||||
|
||||
| Trigger | CI behavior | Total time |
|
||||
|---|---|---:|
|
||||
| Code commit | Build + test gate + deploy | ~3 phút |
|
||||
| Docs-only commit | **Skip CI** (path filter) | **0s** |
|
||||
| Test fail | Skip build/deploy | ~30-40s |
|
||||
|
||||
## 12. Liên quan
|
||||
|
||||
|
||||
Reference in New Issue
Block a user