[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:
@ -270,16 +270,74 @@ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||||
- Thêm pattern → update skill tương ứng ở `.claude/skills/`
|
||||
- Phase đổi → update [`STATUS.md`](STATUS.md) + [`HANDOFF.md`](HANDOFF.md) + [`changelog/migration-todos.md`](changelog/migration-todos.md)
|
||||
|
||||
## 7. Testing (hiện chưa có test tự động)
|
||||
## 7. Testing (Phase 8 active — 77 test pass + CI gate live)
|
||||
|
||||
**Phase 1-4 — manual test:**
|
||||
- E2E qua curl/Postman trong mỗi session log
|
||||
- Build + TS check mỗi commit
|
||||
### Stack đã apply
|
||||
|
||||
**Phase 5 — tự động (chưa làm):**
|
||||
- Unit test: xUnit cho BE, Vitest cho FE
|
||||
- Integration test: TestContainer SQL Server cho BE
|
||||
- E2E test: Playwright cho FE
|
||||
- **xUnit 2.9.3** + **FluentAssertions 7.2** (pin trước v8 commercial license)
|
||||
- **Microsoft.EntityFrameworkCore.Sqlite 10** (in-memory testing — supports transactions, không như InMemory provider)
|
||||
- **Custom `TestApplicationDbContext`** override `nvarchar(max) → TEXT` cho SQLite compat (xem `tests/.../Common/SqliteDbFixture.cs`)
|
||||
- **NO mock framework** (tránh mock-heavy, prefer EF in-memory hoặc fake data)
|
||||
|
||||
### Test pyramid (bottom-heavy, KHÔNG E2E)
|
||||
|
||||
```
|
||||
✅ Phase 1: Domain policy 54 test (pure functions, no DB)
|
||||
✅ Phase 2: Infra code generator 17 test (SQLite in-mem)
|
||||
✅ Phase 3 mini: Application versioning 6 test (SQLite, no UserManager)
|
||||
⏸️ Phase 3 full: Application handlers w/ Identity (cần UserManager DI helper)
|
||||
⏸️ Phase 4: API smoke (WebApplicationFactory)
|
||||
⏸️ Phase 5: FE Vitest cho lib utility
|
||||
❌ E2E (Playwright) — KHÔNG làm (brittle cho solo dev)
|
||||
```
|
||||
|
||||
### Quy tắc bổ sung mỗi feature mới
|
||||
|
||||
- **Domain entity / enum** → 0 test (compile check đủ)
|
||||
- **Domain policy method** → 2-3 test (positive + negative + edge case)
|
||||
- **CQRS handler có guard logic** → 1 test mỗi guard branch
|
||||
- **Migration mới** → smoke test "DbInitializer chạy được + seed không lỗi"
|
||||
- **API endpoint mới** → 1 happy path smoke (cho endpoint critical)
|
||||
- **Bug found in production / staging** → 1 regression test BEFORE merge fix
|
||||
|
||||
Pattern: **"1 bug found → 1 regression test added"**.
|
||||
|
||||
### Workflow user end-of-task
|
||||
|
||||
```bash
|
||||
# Sau mỗi task code (BẮT BUỘC trước commit code):
|
||||
dotnet test SolutionErp.slnx # local verify ~3s
|
||||
git add -A && git commit -m "..."
|
||||
git push # CI tự run test gate trước build/deploy
|
||||
```
|
||||
|
||||
Test fail local → fix trước khi push. Test fail trên CI → no deploy.
|
||||
|
||||
### CI gate behavior
|
||||
|
||||
`.gitea/workflows/deploy.yml`:
|
||||
|
||||
```yaml
|
||||
# Path filter: skip CI hoàn toàn cho commit MD-only
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
- '.claude/skills/**'
|
||||
|
||||
# 2 step test gate trước build/deploy (fail → exit → no deploy)
|
||||
- name: Run unit tests (Domain)
|
||||
- name: Run integration tests (Infrastructure)
|
||||
```
|
||||
|
||||
### Pending (Phase 3-5 future)
|
||||
|
||||
- Application handler tests cần Identity UserManager DI setup helper
|
||||
- API smoke tests via `WebApplicationFactory` + SQLite
|
||||
- FE Vitest cho `lib/queryMatches`, `lib/cn`, money formatter
|
||||
|
||||
Detail: `docs/architecture.md §11 Testing strategy`.
|
||||
|
||||
## 8. Security baseline
|
||||
|
||||
|
||||
Reference in New Issue
Block a user