@relipa/ai-flow-kit 0.1.2-beta.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +26 -0
  2. package/bin/aiflow.js +40 -1
  3. package/custom/harness/playwright/.env.example +10 -0
  4. package/custom/harness/playwright/playwright.config.ts +34 -0
  5. package/custom/harness/playwright/tests/e2e/auth.setup.ts +25 -0
  6. package/custom/harness/playwright/tests/e2e/fixtures/test.ts +6 -0
  7. package/custom/harness/playwright/tests/e2e/pages/BasePage.ts +9 -0
  8. package/custom/harness/playwright/tests/e2e/support/auth.ts +5 -0
  9. package/custom/mcp-presets/playwright.json +8 -0
  10. package/custom/rules/test-patterns.md +70 -0
  11. package/custom/skills/automation-testing/SKILL.md +239 -0
  12. package/custom/skills/automation-testing/templates/BasePage.ts +29 -0
  13. package/custom/skills/automation-testing/templates/PageObject.example.ts +29 -0
  14. package/custom/skills/automation-testing/templates/playwright.config.ts +39 -0
  15. package/custom/skills/automation-testing/templates/spec.example.ts +29 -0
  16. package/custom/skills/coverage-check/SKILL.md +202 -0
  17. package/custom/skills/evidence-aggregation/SKILL.md +246 -0
  18. package/custom/skills/execute-flow/SKILL.md +479 -0
  19. package/custom/skills/execute-flow/templates/playwright.config.ts +39 -0
  20. package/custom/skills/generate-test-report/SKILL.md +99 -0
  21. package/custom/skills/generate-test-report/templates/test-report.md +58 -0
  22. package/custom/skills/generate-testcase/SKILL.md +303 -0
  23. package/custom/skills/generate-testcase/templates/testcase.md +88 -0
  24. package/custom/skills/log-bug/SKILL.md +131 -0
  25. package/custom/skills/pr-impact-analysis/SKILL.md +180 -0
  26. package/custom/skills/retest-orchestration/SKILL.md +191 -0
  27. package/custom/skills/script-sync/SKILL.md +208 -0
  28. package/custom/skills/test-analysis/SKILL.md +262 -0
  29. package/custom/templates/shared/gate-workflow.md +306 -2
  30. package/docs/common/CHANGELOG.md +84 -0
  31. package/docs/common/QUICK_START.md +30 -0
  32. package/docs/common/cli-reference.md +48 -7
  33. package/package.json +1 -1
  34. package/scripts/create-score-excel.js +20 -7
  35. package/scripts/detect.js +10 -0
  36. package/scripts/guide.js +9 -0
  37. package/scripts/prompt.js +36 -0
  38. package/scripts/scaffold-playwright.js +106 -0
  39. package/scripts/task.js +21 -7
  40. package/scripts/update.js +124 -124
  41. package/scripts/use.js +30 -12
@@ -0,0 +1,303 @@
1
+ ---
2
+ name: generate-testcase
3
+ description: Use when TESTER needs to create test checklist or test cases from requirements. Follows 5-step process across Gate 2 Phase 2a (Dev Artifacts Check + scenarios/checklist), 2b (generate testcase + test-plan.md), 2c (review & optimize with action list). TESTER must approve each phase before AI proceeds.
4
+ keywords: testcase, checklist, qa, testing, test plan, scenarios, validation, boundary value, equivalence partitioning
5
+ ---
6
+
7
+ # Generate Testcase — Gate 2 (Phase 2a → 2c)
8
+
9
+ > **Phạm vi:** Gate 2 Phase 2a → 2b → 2c trong workflow 4-gate (`docs/workflow.md`)
10
+ > **TESTER phải gõ `APPROVED` sau mỗi bước — AI KHÔNG tự động chuyển bước.**
11
+
12
+ ---
13
+
14
+ ## Quy trình 5 bước (theo thứ tự, không bỏ qua)
15
+
16
+ ### Bước 1 — Phân tích Requirement
17
+
18
+ Trước khi tạo bất kỳ testcase nào:
19
+ - Đọc `test-plan/test-analysis.md` (Gate 1 output đã approved)
20
+ - Xác định: scope, field types, business rules, validations, roles
21
+ - Nếu requirement chưa rõ → hỏi TESTER từng câu một, chờ trả lời
22
+ - **KHÔNG tạo testcase ở bước này**
23
+
24
+ ---
25
+
26
+ ### Bước 2 — Dev Artifacts Check (Phase 2a — trước checklist)
27
+
28
+ Xác định phạm vi ảnh hưởng thật từ code dev **trước khi** generate scenarios:
29
+
30
+ - **Nếu TESTER khai báo `PR: <url>`** hoặc AI phát hiện PR link trên ticket → **invoke `pr-impact-analysis` skill**:
31
+ - Fetch PR diff qua `gh pr view`, phân tích theo layer, map code → regression scope
32
+ - Lưu kết quả vào `test-plan/impact-analysis.md`
33
+ - Lấy danh sách regression scenarios để bổ sung vào checklist Bước 3
34
+ - **Nếu chưa có PR** → tạo `test-plan/impact-analysis.md` với nội dung "chưa có dev artifacts — sẽ re-check ở Gate 3", **không block bước**
35
+ - **Nếu không có PR nào và ticket không đề cập** → bỏ qua, đi thẳng Bước 3
36
+
37
+ > ⚠️ PR diff chỉ dùng để **mở rộng coverage** (thêm regression TCs). Tuyệt đối không dùng để xác định expected result — expected result chỉ lấy từ ticket/spec của BA/PM.
38
+
39
+ ---
40
+
41
+ ### Bước 3 — Generate Checklist (Phase 2a)
42
+
43
+ Liệt kê scenarios theo nhóm, output vào `test-plan/checklist.md`:
44
+
45
+ | ID | Scenario/Checklist Item | Mục đích kiểm tra | Expected Result |
46
+
47
+ **Nhóm cần cover:**
48
+
49
+ 📗 **Functional**
50
+ - Happy Path / Positive Cases
51
+ - Negative Cases
52
+ - Validation Cases (input validation, format, required fields)
53
+ - Boundary Value Analysis
54
+ - Edge Cases
55
+ - Equivalence Partitioning
56
+ - Decision Table Cases
57
+ - State Transition Cases
58
+ - Permission / Role-based Cases
59
+ - UI/UX Cases
60
+
61
+ 📘 **Non-Functional**
62
+ - Accessibility Cases (WCAG compliance)
63
+ - Compatibility Cases (Browser/Device/OS)
64
+ - Localization / i18n Cases
65
+
66
+ 📙 **Data & Integration**
67
+ - Data Integrity Cases
68
+ - Concurrent Access Cases
69
+ - Integration / API Cases
70
+ - Error Handling / Recovery Cases
71
+
72
+ 📕 **Exploratory**
73
+ - Error Guessing
74
+ - Pairwise Testing
75
+
76
+ 📙 **Regression** _(nếu Dev Artifacts Check Bước 2 tìm thấy impacted areas)_
77
+ - Mỗi item ghi rõ: "Regression — [vùng ảnh hưởng] — [lý do từ PR diff]"
78
+
79
+ ```
80
+ ⏸️ GATE 2 — PHASE 2a: SCENARIOS READY
81
+ Scenarios: [N] total
82
+ - Functional: [N] | Non-functional: [N] | Integration: [N] | Exploratory: [N] | Regression: [N]
83
+ → Review: test-plan/checklist.md
84
+ → Type APPROVED to proceed to Phase 2b
85
+ ```
86
+
87
+ ---
88
+
89
+ ### Bước 4 — Generate Testcase + Test Plan (Phase 2b)
90
+
91
+ > ⚠️ CHỈ TẠO — KHÔNG REVIEW. Review ở Bước 5.
92
+
93
+ **Dùng template:** `templates/testcase.md` — giữ nguyên toàn bộ cột và cấu trúc sections.
94
+
95
+ **Quy tắc TC_ID:** `[ScreenID]_[3 chữ số]`
96
+ - `ScreenID` là **mã màn hình/chức năng theo quy ước của từng dự án** — không cố định. Ví dụ: `AD10_001`, `LOGIN_001`, `ORD_002`, `USR_015`
97
+ - Nếu dự án chưa có convention → hỏi TESTER trước khi tạo TC đầu tiên
98
+ - Nếu đã có TC cũ trong dự án → đọc các file `test-plan/test-cases/` hiện tại để suy ra convention đang dùng
99
+
100
+ **Nhóm testcase theo sections:**
101
+ - **3.1 Access & Authorization** — URL trực tiếp, menu, phân quyền theo role
102
+ - **3.2 UI/UX** — Layout, placeholder, label, dấu *, responsive
103
+ - **3.3 Input Validation** — Theo từng field type (xem Validation Rules bên dưới)
104
+ - **3.4 Business Rules** — Logic nghiệp vụ, unique, dynamic form, save to DB
105
+ - **3.5 Exceptions & Systems** — Double click, mất mạng, back button
106
+
107
+ **Yêu cầu từng cột:**
108
+ - **Steps:** Đánh số `1. 2. 3.` — rõ ràng, execute được ngay
109
+ - **Expected Result:** Cụ thể, verify được — ví dụ: `"Hiển thị thông báo 'Lưu thành công' và chuyển về trang danh sách"`
110
+ - **Severity:** Critical / High / Medium / Low
111
+ - Mỗi testcase độc lập, có thể execute riêng lẻ
112
+
113
+ Output testcases: `test-plan/test-cases/[ScreenID]-testcases.md`
114
+
115
+ **Tạo thêm `test-plan/test-plan.md`** — kế hoạch tổng thể:
116
+
117
+ ```markdown
118
+ # Test Plan — [Feature Name]
119
+
120
+ **Ticket:** [ID] | **Date:** [YYYY-MM-DD] | **Tester:** [Name]
121
+
122
+ ## 1. Objectives
123
+ [Mục tiêu của đợt testing này — 1-2 câu]
124
+
125
+ ## 2. Scope
126
+ - **In-scope:** [danh sách module/màn hình từ test-analysis.md Section 1]
127
+ - **Out-of-scope:** [từ test-analysis.md Section 9]
128
+
129
+ ## 3. Test Types
130
+ | Type | Số lượng | Ghi chú |
131
+ |------|---------|---------|
132
+ | Functional (positive) | [N] | |
133
+ | Functional (negative) | [N] | |
134
+ | Edge cases | [N] | |
135
+ | Regression | [N] | từ Dev Artifacts Check |
136
+ | Accessibility / Compatibility | [N] | |
137
+
138
+ ## 4. Entry Criteria
139
+ - [ ] Gate 1 APPROVED — test-analysis.md
140
+ - [ ] Test environment sẵn sàng (app running tại BASE_URL)
141
+ - [ ] Test data đã chuẩn bị
142
+
143
+ ## 5. Exit Criteria
144
+ - [ ] 100% TCs executed
145
+ - [ ] 0 Critical bugs unresolved
146
+ - [ ] 0 High bugs unresolved (hoặc có deferred plan rõ ràng)
147
+ - [ ] Test report ký duyệt (Gate 4 APPROVED)
148
+
149
+ ## 6. Schedule Estimate
150
+ | Phase | Effort |
151
+ |-------|--------|
152
+ | Gate 2 (Planning) | [S/M/L] |
153
+ | Gate 3 (Execution) | [S/M/L] |
154
+ | Gate 4 (Report) | S |
155
+ | **Total** | **[S/M/L/XL]** |
156
+ ```
157
+
158
+ ```
159
+ ⏸️ GATE 2 — PHASE 2b: TESTCASES GENERATED
160
+ Test cases: [N] total ([N] positive / [N] negative / [N] edge)
161
+ Test plan: test-plan/test-plan.md
162
+ → Review: test-plan/test-cases/
163
+ → Type APPROVED to proceed to Phase 2c (Review & Optimize)
164
+ → Or provide feedback to update
165
+ ```
166
+
167
+ ---
168
+
169
+ ### Bước 5 — Review & Optimize (Phase 2c)
170
+
171
+ > ⚠️ CHỈ REVIEW — KHÔNG tạo lại toàn bộ.
172
+
173
+ Kiểm tra theo thứ tự, output vào `test-plan/review-report.md`:
174
+
175
+ ```
176
+ 1. ❌ DUPLICATE TESTCASE
177
+ | TC_ID | TC trùng với | Đề xuất |
178
+
179
+ 2. ⚠️ TESTCASE CÓ VẤN ĐỀ
180
+ | TC_ID | Vấn đề | Đề xuất sửa |
181
+ (Scenario mơ hồ / Steps không cụ thể / Expected Result không verify được / thiếu Precondition)
182
+
183
+ 3. 🔧 TESTCASE CẦN OPTIMIZE
184
+ | TC_ID | Vấn đề | Đề xuất |
185
+ (Quá dài → tách / có thể gộp / thiếu test data)
186
+
187
+ 4. ➕ MISSING TESTCASE
188
+ (Case chưa cover → đề xuất TC mới đầy đủ với TC_ID, Scenario, Steps, Expected Result)
189
+
190
+ 5. 📊 COVERAGE GAPS
191
+ (Vùng/feature chưa phủ đủ, business rules còn thiếu, edge cases bị miss)
192
+
193
+ 6. ♿ ACCESSIBILITY / COMPATIBILITY CHECK
194
+ (Đã đủ chưa? Đề xuất bổ sung nếu thiếu)
195
+
196
+ 7. 📋 DANH SÁCH CẦN SỬA
197
+ Tổng hợp TẤT CẢ action items từ sections 1–6, sắp xếp theo Priority:
198
+
199
+ | TC_ID | Vấn đề | Đề xuất sửa | Priority |
200
+ |-------|--------|------------|---------|
201
+ | AD10_003 | Duplicate với AD10_001 | Xóa AD10_003 | High |
202
+ | AD10_007 | Expected Result mơ hồ | Sửa thành "Hiển thị error 'Email không hợp lệ'" | High |
203
+ | AD10_012 | Thiếu TC keyboard navigation | Thêm TC mới AD10_015 | Medium |
204
+ | AD10_005 | Steps quá dài, 2 luồng | Tách thành AD10_005 và AD10_016 | Low |
205
+
206
+ Priority: High (phải fix trước Phase 2d) / Medium / Low (có thể defer)
207
+ ```
208
+
209
+ ```
210
+ ⏸️ GATE 2 — PHASE 2c: REVIEW COMPLETE
211
+ Issues: [N] duplicate | [N] problematic | [N] to optimize | [N] missing
212
+ → Review: test-plan/review-report.md
213
+ → Type APPROVED to proceed to Phase 2d (Coverage Check & Final Output)
214
+ → Or provide specific fixes to apply
215
+ ```
216
+
217
+ ---
218
+
219
+ ## Validation Rules — 14 Field Types
220
+
221
+ ### 1. String Field (textbox, textarea)
222
+ - **Required:** empty → error; non-empty → accepted
223
+ - **Length:** 0, 1, max-1, max, max+1
224
+ - **Format** (nếu có rule): invalid format, valid format
225
+ - **Special chars:** ký tự đặc biệt (%&# ...), leading/trailing spaces, toàn khoảng trắng
226
+ - **Case sensitivity:** lowercase, uppercase, mixed
227
+
228
+ ### 2. Number Field
229
+ - **Required:** empty
230
+ - **Datatype:** số hợp lệ, chữ cái (abc), ký tự đặc biệt (@#$), số âm, 0, thập phân
231
+ - **Range:** value < min → error; = min; between; = max; > max → error
232
+ - **Boundary:** min-1, max+1
233
+ - **Format:** leading zero (00123), overflow int
234
+
235
+ ### 3. Radio Button
236
+ - **Required:** không chọn → error; chọn 1 → accepted
237
+ - **Behavior:** mutually exclusive, chuyển đổi option
238
+ - **Boundary:** test từng option
239
+ - **Default:** verify nếu có default
240
+
241
+ ### 4. Checkbox
242
+ - **Required** (nếu có): 0 checked → error; ≥1 → accepted
243
+ - **Behavior:** chọn nhiều, bỏ chọn từng cái, check all, uncheck all
244
+ - **Max selection** (nếu có): = max; > max → error
245
+ - **Default:** verify
246
+
247
+ ### 5. Dropdown
248
+ - **Required:** không chọn → error; chọn hợp lệ → accepted
249
+ - **Selection:** từng option, thay đổi selection
250
+ - **Boundary:** option đầu, option cuối, scroll list dài
251
+ - **Data integrity:** label vs value, disabled option
252
+
253
+ ### 6. Date Picker
254
+ - **Required, Format sai** (32/13/2025) → error
255
+ - **Range:** ngày < min → error; = min; trong range; = max; > max → error
256
+ - **Boundary:** ngày cuối tháng (28,29,30,31), 29/02 năm nhuận
257
+ - **Input:** nhập tay vs chọn calendar, copy-paste
258
+
259
+ ### 7. File Upload
260
+ - **Required, Type:** đúng format → accepted; sai format → error
261
+ - **Size:** < max, = max → accepted; > max → error
262
+ - **File name:** ký tự đặc biệt, tên dài
263
+ - **Multiple** (nếu có): số lượng vượt giới hạn → error
264
+ - **Drag & drop, File spoofing** (đổi đuôi .exe → .jpg, check MIME type)
265
+
266
+ ### 8. Password Field
267
+ - **Required, Length:** < min → error; = min → accepted; > max → error
268
+ - **Complexity** (theo rule): thiếu hoa / thường / số / ký tự đặc biệt → error; đủ → accepted
269
+ - **Security:** hiển thị dạng mask, toggle show/hide
270
+
271
+ ### 9. Confirm Password
272
+ - Empty → error; không khớp → error; khớp → accepted
273
+
274
+ ### 10. Search Field
275
+ - Empty → show all / no result (theo spec)
276
+ - Keyword hợp lệ → trả về đúng kết quả
277
+ - Ký tự đặc biệt, keyword dài, không tồn tại → "No data"
278
+
279
+ ### 11. Textarea
280
+ - Length: min/max boundary; rất dài (stress)
281
+ - Multi-line input, copy-paste text dài
282
+
283
+ ### 12. Toggle/Switch
284
+ - Default state (ON/OFF); toggle ON→OFF; toggle OFF→ON
285
+ - Ảnh hưởng field khác (enable/disable)
286
+
287
+ ### 13. Hidden/System Field
288
+ - Giá trị được set đúng; không bị user chỉnh sửa (inspect element)
289
+
290
+ ### 14. Auto-complete
291
+ - Nhập ký tự → hiển thị suggestion; không match → không hiển thị
292
+ - Chọn từ list → đúng value; nhập tự do (nếu cho phép)
293
+
294
+ ---
295
+
296
+ ## Severity Level
297
+
298
+ | Level | Mô tả |
299
+ |---|---|
300
+ | **Critical** | Crash app, mất data, không vào được màn hình |
301
+ | **High** | Chức năng chính không hoạt động đúng |
302
+ | **Medium** | Chức năng phụ bị ảnh hưởng, workaround có thể có |
303
+ | **Low** | UI/UX nhỏ, cosmetic, không ảnh hưởng chức năng |
@@ -0,0 +1,88 @@
1
+ # [Screen_ID]_[Screen_Name] - Test Cases
2
+
3
+ ## 1. Thông tin chung
4
+
5
+ | Mục | Chi tiết |
6
+ |:---|:---|
7
+ | **Mã màn hình - Tên màn hình** | [VD: AD10_Create Product] |
8
+ | **Tài liệu tham chiếu (SRS)** | [VD: [Project]_SRS_v1.0] |
9
+ | **Người tạo (Author)** | |
10
+ | **Ngày tạo (Created Date)** | |
11
+ | **Người kiểm duyệt (Reviewer)** | |
12
+ | **Ngày kiểm duyệt (Review Date)** | |
13
+
14
+ ## 2. Kết quả kiểm thử tổng hợp (Test Execution Summary)
15
+
16
+ | Vòng kiểm thử (Round) | Đạt (Passed) | Lỗi (Failed) | Chưa test (Untest) | Chờ (Pending) | Tổng số (Total) | Tỷ lệ đạt (%) |
17
+ |:---|:---:|:---:|:---:|:---:|:---:|:---:|
18
+ | Round 1 | 0 | 0 | 0 | 0 | 0 | 0% |
19
+ | Round 2 | 0 | 0 | 0 | 0 | 0 | 0% |
20
+
21
+ ---
22
+
23
+ ## 3. Danh sách Test Cases Chi Tiết
24
+
25
+ ### 3.1. Kiểm thử Truy cập & Phân quyền (Access & Authorization)
26
+
27
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
28
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
29
+ | [ID]_001 | Truy cập trực tiếp qua URL khi chưa đăng nhập | High | Người dùng chưa đăng nhập hệ thống | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống không cho phép truy cập.<br>Tự động chuyển hướng về trang đăng nhập (Login). | | | | | | | | |
30
+ | [ID]_002 | Truy cập trực tiếp qua URL khi đã đăng nhập | Medium | Người dùng đã đăng nhập thành công | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống cho phép truy cập.<br>Hiển thị đúng giao diện màn hình. | | | | | | | | |
31
+ | [ID]_003 | Truy cập qua button/menu điều hướng | Low | Người dùng đang ở màn hình danh sách | 1. Click vào nút "Thêm mới" hoặc menu tương ứng. | - | Hệ thống mở màn hình đăng ký/thực hiện tương ứng thành công. | | | | | | | | |
32
+
33
+ ### 3.2. Kiểm thử Giao diện Người dùng (UI/UX)
34
+
35
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
36
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
37
+ | [ID]_004 | Kiểm tra hiển thị giao diện tổng quan | Low | Màn hình hiển thị bình thường | 1. Quan sát giao diện màn hình.<br>2. Kiểm tra layout, màu sắc, font chữ, khoảng cách giữa các trường. | - | 1. Layout cân đối, font chữ và cỡ chữ đồng nhất.<br>2. Các trường bắt buộc nhập có dấu sao đỏ (*).<br>3. Không có lỗi chính tả.<br>4. Định dạng placeholder hiển thị chính xác theo thiết kế. | | | | | | | | |
38
+
39
+ ### 3.3. Kiểm thử Validation các trường nhập liệu (Input Validation)
40
+
41
+ *(Tạo riêng từng bảng hoặc nhóm theo từng Field để dễ theo dõi)*
42
+
43
+ #### * Đối với Trường [Tên Trường] — Text
44
+
45
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
46
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
47
+ | [ID]_0xx | Kiểm tra giá trị mặc định | Low | Đã truy cập màn hình | 1. Quan sát trường [Tên Trường]. | - | Giá trị mặc định là trống (blank).<br>Hiển thị đúng Placeholder theo thiết kế. | | | | | | | | |
48
+ | [ID]_0xx | Kiểm tra trường bắt buộc nhập để trống | High | Đã truy cập màn hình | 1. Để trống trường [Tên Trường].<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | Empty | 1. Hiển thị thông báo lỗi: "Hãy nhập [Tên Trường]".<br>2. Field bị highlight viền đỏ. | | | | | | | | |
49
+ | [ID]_0xx | Kiểm tra nhập ký tự khoảng trắng (Spaces) | Medium | Đã truy cập màn hình | 1. Nhập toàn khoảng trắng vào trường.<br>2. Bấm nút thực hiện hoặc focus out. | `" "` | Hệ thống xem như để trống.<br>Báo lỗi bắt buộc nhập (nếu là trường Required) hoặc tự động trim khoảng trắng. | | | | | | | | |
50
+ | [ID]_0xx | Kiểm tra nhập khoảng trắng ở đầu/cuối chuỗi | Low | Đã truy cập màn hình | 1. Nhập chuỗi có khoảng trắng ở đầu/cuối.<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | `" data_test "` | Hệ thống tự động cắt bỏ (trim) khoảng trắng ở đầu và cuối chuỗi trước khi lưu vào DB. | | | | | | | | |
51
+ | [ID]_0xx | Kiểm tra nhập độ dài tối thiểu/tối đa (Boundary Value) | Medium | Đã truy cập màn hình, biết Maxlength = N | 1. Nhập chuỗi độ dài N-1 ký tự.<br>2. Nhập chuỗi độ dài N ký tự.<br>3. Nhập chuỗi độ dài > N ký tự. | Chuỗi test tương ứng | - Độ dài <= N: cho phép nhập và lưu bình thường.<br>- Độ dài > N: hệ thống chặn trực tiếp trên UI hoặc báo lỗi hợp lệ. | | | | | | | | |
52
+ | [ID]_0xx | Kiểm tra nhập ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Nhập các ký tự đặc biệt (!@#$%^&*).<br>2. Bấm nút thực hiện. | `"!@#$%"` | Hệ thống lưu trữ đúng định dạng ký tự đã nhập (hoặc báo lỗi nếu có quy định hạn chế định dạng). | | | | | | | | |
53
+ | [ID]_0xx | Kiểm tra thao tác Copy/Paste | Low | Đã truy cập màn hình | 1. Copy một chuỗi hợp lệ.<br>2. Paste vào trường thông tin.<br>3. Bấm nút thực hiện. | - | Cho phép paste dữ liệu vào field thành công và xử lý lưu bình thường. | | | | | | | | |
54
+
55
+ #### * Đối với Trường Số (Number / Price / Quantity)
56
+
57
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
58
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
59
+ | [ID]_0xx | Kiểm tra nhập chữ cái và ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Cố gắng nhập chữ cái (a, b, c...) hoặc ký tự đặc biệt.<br>2. Bấm nút thực hiện. | `"abc"`, `"@#$"` | UI ngăn không cho nhập chữ cái/ký tự đặc biệt, chỉ chấp nhận chữ số. | | | | | | | | |
60
+ | [ID]_0xx | Kiểm tra nhập số âm | High | Đã truy cập màn hình | 1. Nhập số âm.<br>2. Bấm nút thực hiện. | `-10` | Báo lỗi giá trị phải lớn hơn hoặc bằng 0 (hoặc chặn dấu trừ `-` trực tiếp từ UI). | | | | | | | | |
61
+ | [ID]_0xx | Kiểm tra nhập số thập phân | High | Đã truy cập màn hình | 1. Nhập số có dấu phẩy thập phân.<br>2. Bấm nút thực hiện. | `1.5`, `2,3` | Báo lỗi chỉ chấp nhận số nguyên (hoặc chấp nhận số thập phân tùy đặc tả nghiệp vụ). | | | | | | | | |
62
+ | [ID]_0xx | Kiểm tra hiển thị định dạng phân tách hàng nghìn | Low | Đã truy cập màn hình | 1. Nhập số lớn.<br>2. Focus out khỏi trường nhập liệu. | `1000000` | Số tự động định dạng phân tách hàng nghìn (VD: `1,000,000`). | | | | | | | | |
63
+
64
+ #### * Đối với Trường File Upload (Hình ảnh)
65
+
66
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
67
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
68
+ | [ID]_0xx | Kiểm tra không upload file (Trường tùy chọn) | Medium | Đã truy cập màn hình | 1. Không chọn file upload.<br>2. Bấm nút thực hiện. | - | Hệ thống cho phép thực hiện thành công mà không báo lỗi. | | | | | | | | |
69
+ | [ID]_0xx | Kiểm tra upload file sai định dạng | High | Định dạng cho phép: jpeg, png | 1. Chọn upload file có định dạng không được phép (xlsx, gif, pdf...).<br>2. Tiến hành upload. | File `.pdf`, `.xlsx` | Upload không thành công. Hiển thị thông báo lỗi đúng thiết kế: "Hình ảnh phải là định dạng jpeg hoặc png." | | | | | | | | |
70
+ | [ID]_0xx | Kiểm tra upload dung lượng vượt quá giới hạn | High | Giới hạn dung lượng: tối đa 10MB | 1. Chọn file có kích thước > 10MB.<br>2. Tiến hành upload. | File kích thước `10.5MB` | Upload thất bại. Hiển thị lỗi cảnh báo: "Dung lượng hình ảnh vượt quá 10MB." | | | | | | | | |
71
+ | [ID]_0xx | Kiểm tra upload file giả mạo đuôi mở rộng (Spoofing) | High | Đã truy cập màn hình | 1. Đổi đuôi file thực thi nguy hiểm `.exe` thành `.jpg`.<br>2. Chọn upload file này. | File `.exe` đổi tên thành `.jpg` | Hệ thống kiểm tra phần thân file (MIME type) thực tế và báo lỗi không đúng định dạng. | | | | | | | | |
72
+ | [ID]_0xx | Kiểm tra kéo thả file (Drag & Drop) | Low | Đã truy cập màn hình | 1. Kéo file ảnh thả vào vùng upload. | File `.png` hợp lệ | Upload file thành công và hiển thị thumbnail ảnh xem trước trên giao diện. | | | | | | | | |
73
+
74
+ ### 3.4. Kiểm thử Logic Nghiệp vụ (Business Rules - BR)
75
+
76
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
77
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
78
+ | [ID]_0xx | Kiểm tra ràng buộc trùng lặp dữ liệu duy nhất (Unique) | High | Đã tồn tại bản ghi trong DB | 1. Nhập thông tin trùng khóa chính/mã duy nhất với bản ghi cũ.<br>2. Điền các thông tin hợp lệ khác.<br>3. Bấm Đăng ký. | Mã trùng lặp | Hệ thống báo lỗi trùng lặp: "Mã/Tên này đã tồn tại trong hệ thống. Vui lòng kiểm tra lại." | | | | | | | | |
79
+ | [ID]_0xx | Kiểm tra logic liên kết dữ liệu động (Dynamic Form Control) | High | Điều kiện thay đổi hiển thị | 1. Tích chọn/Bỏ tích chọn [Checkbox điều kiện]. | - | Giao diện tự động thay đổi hiển thị ẩn/hiện hoặc disable/enable các trường thông tin liên quan theo đúng mô tả Business Rule. | | | | | | | | |
80
+ | [ID]_0xx | Kiểm tra lưu dữ liệu vào Database thành công | Critical | Nhập đầy đủ và chính xác tất cả dữ liệu hợp lệ | 1. Nhập toàn bộ dữ liệu hợp lệ.<br>2. Bấm nút Đăng ký.<br>3. Kiểm tra DB và màn hình danh sách. | Dữ liệu hợp lệ | 1. Lưu bản ghi mới thành công.<br>2. Hiển thị thông báo thành công.<br>3. Dữ liệu trong Database khớp hoàn toàn các trường thông tin đã điền trên UI. | | | | | | | | |
81
+
82
+ ### 3.5. Kiểm thử Ngoại lệ & Hệ thống (Exceptions & Systems)
83
+
84
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
85
+ |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
86
+ | [ID]_0xx | Bấm nút Đăng ký nhiều lần liên tiếp (Double Click) | High | Đã điền đầy đủ dữ liệu hợp lệ | 1. Click liên tiếp nhiều lần vào nút Đăng ký/Lưu. | - | Nút bấm bị disable ngay sau lượt click đầu tiên. Hệ thống chỉ xử lý và tạo duy nhất 1 bản ghi trong DB, không tạo trùng lặp. | | | | | | | | |
87
+ | [ID]_0xx | Kiểm tra mất kết nối mạng đột ngột khi bấm Lưu | High | Điền đầy đủ dữ liệu hợp lệ | 1. Bấm nút Lưu.<br>2. Đồng thời ngắt kết nối mạng. | - | Hệ thống hiển thị loading và thông báo lỗi kết nối mạng, không bị crash hoặc treo màn hình trắng. | | | | | | | | |
88
+ | [ID]_0xx | Kiểm tra nhấn nút Quay lại | Low | Đã điền một số dữ liệu | 1. Nhập một số thông tin.<br>2. Bấm nút Quay lại. | - | Hệ thống chuyển hướng về màn hình danh sách trước đó.<br>Bản ghi mới không được tạo trong DB. | | | | | | | | |
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: log-bug
3
+ description: Use when a test case fails during Gate 3 execution and a bug needs to be logged with full reproduction steps and evidence. Creates a structured bug report file in the bugs/ directory. Different from investigate-bug which is for developers debugging root causes.
4
+ keywords: bug report, log bug, test fail, defect, reproduction steps, evidence, severity, gate 3
5
+ ---
6
+
7
+ # Log Bug — Gate 3
8
+
9
+ > **Phạm vi:** Gate 3 — mỗi khi test case fail, AI tạo file bug report chuẩn trong `bugs/`.
10
+ > **TESTER** xác nhận severity và nội dung trước khi submit lên Backlog/Jira.
11
+
12
+ ---
13
+
14
+ ## Khi nào log bug
15
+
16
+ - Test case fail sau khi execute (Playwright hoặc manual)
17
+ - Actual result khác Expected result — dù là lỗi nhỏ
18
+ - App crash, timeout, lỗi console không mong đợi
19
+ - Hành vi không nhất quán giữa các lần chạy
20
+
21
+ ---
22
+
23
+ ## Quy trình
24
+
25
+ ### Bước 1 — Xác định thông tin bug
26
+
27
+ Thu thập ngay khi test fail:
28
+ - TC ID và tên test case bị fail
29
+ - Actual result nhận được vs Expected result trong testcase
30
+ - Screenshot/log evidence từ `evidence/[TC-ID]/`
31
+ - Browser, OS, build/version đang test
32
+
33
+ ### Bước 2 — Đánh giá Severity
34
+
35
+ | Severity | Tiêu chí |
36
+ |---|---|
37
+ | **Critical** | App crash, mất data, không vào được màn hình, security breach |
38
+ | **High** | Chức năng chính không hoạt động, không có workaround |
39
+ | **Medium** | Chức năng phụ bị lỗi, có workaround tạm thời |
40
+ | **Low** | UI/UX nhỏ, cosmetic, typo, không ảnh hưởng chức năng |
41
+
42
+ ### Bước 3 — Tạo file bug report
43
+
44
+ **File naming:** `bugs/BUG-[số thứ tự 3 chữ số]-[tên ngắn kebab-case].md`
45
+ **Ví dụ:** `bugs/BUG-001-login-button-not-disabled-on-submit.md`
46
+
47
+ **Dùng template bên dưới.**
48
+
49
+ ### Bước 4 — Thông báo TESTER
50
+
51
+ ```
52
+ 🐛 BUG LOGGED: BUG-[XXX]
53
+
54
+ TC: [TC_ID] — [Tên test case]
55
+ Severity: [Critical / High / Medium / Low]
56
+ File: bugs/BUG-[XXX]-[name].md
57
+
58
+ → Review bug report
59
+ → Type RETEST: [TC_ID] after dev fixes to re-execute
60
+ ```
61
+
62
+ ---
63
+
64
+ ## Bug Report Template
65
+
66
+ ```markdown
67
+ # BUG-[XXX] — [Tiêu đề mô tả ngắn gọn vấn đề]
68
+
69
+ ## Thông tin chung
70
+
71
+ | Property | Value |
72
+ |---|---|
73
+ | **Bug ID** | BUG-[XXX] |
74
+ | **Severity** | Critical / High / Medium / Low |
75
+ | **TC ID** | [TC_ID] |
76
+ | **Reported By** | [Tester Name] |
77
+ | **Report Date** | [Date] |
78
+ | **Status** | Open |
79
+
80
+ ## Môi trường
81
+
82
+ | Property | Value |
83
+ |---|---|
84
+ | **Browser** | [Chrome 120 / Firefox 121 / ...] |
85
+ | **OS** | [Windows 11 / macOS / ...] |
86
+ | **Build/Version** | [v1.2.3 / commit hash] |
87
+ | **Test Environment** | [Staging / Dev / UAT] |
88
+
89
+ ## Mô tả
90
+
91
+ [Mô tả ngắn gọn vấn đề trong 1-2 câu]
92
+
93
+ ## Preconditions
94
+
95
+ [Điều kiện cần thiết trước khi reproduce bug]
96
+
97
+ ## Steps to Reproduce
98
+
99
+ 1. [Bước 1]
100
+ 2. [Bước 2]
101
+ 3. [Bước 3]
102
+ ...
103
+
104
+ ## Expected Result
105
+
106
+ [Kết quả mong đợi theo testcase / spec]
107
+
108
+ ## Actual Result
109
+
110
+ [Kết quả thực tế nhận được]
111
+
112
+ ## Evidence
113
+
114
+ - Screenshot: [evidence/[TC-ID]/step-XX-description.png]
115
+ - Video: [evidence/[TC-ID]/recording.mp4] (nếu có)
116
+ - Console log: [evidence/[TC-ID]/console.log] (nếu có)
117
+
118
+ ## Notes
119
+
120
+ [Ghi chú thêm nếu có: intermittent, chỉ xảy ra trên specific browser, ...]
121
+ ```
122
+
123
+ ---
124
+
125
+ ## Mandatory Rules
126
+
127
+ - ❌ KHÔNG tự đánh giá root cause — chỉ mô tả WHAT happened, không WHY
128
+ - ❌ KHÔNG bỏ qua bug dù severity thấp — log tất cả, TESTER quyết định defer
129
+ - ✅ Steps to Reproduce PHẢI đủ để dev reproduce mà không cần hỏi thêm
130
+ - ✅ Evidence PHẢI link cụ thể đến file screenshot/log trong `evidence/`
131
+ - ✅ Expected Result PHẢI lấy từ testcase / spec của BA, không từ cách dev implement