@sun-asterisk/sungen 2.2.2 → 2.3.0
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.
- package/README.md +66 -37
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +21 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/generators/gherkin-parser/index.d.ts +2 -0
- package/dist/generators/gherkin-parser/index.d.ts.map +1 -1
- package/dist/generators/gherkin-parser/index.js +17 -3
- package/dist/generators/gherkin-parser/index.js.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/alert-accept-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/alert-dismiss-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/alert-fill-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/alert-text-assertion.hbs +8 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/attribute-assertion.hbs +3 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/have-value-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +12 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +12 -1
- package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/assertion-patterns.js +95 -57
- package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/index.d.ts +9 -0
- package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/index.js +32 -0
- package/dist/generators/test-generator/patterns/index.js.map +1 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.d.ts +1 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.js +56 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/table-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/table-patterns.js +8 -5
- package/dist/generators/test-generator/patterns/table-patterns.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +16 -0
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/orchestrator/ai-rules-updater.d.ts +13 -0
- package/dist/orchestrator/ai-rules-updater.d.ts.map +1 -0
- package/dist/orchestrator/ai-rules-updater.js +157 -0
- package/dist/orchestrator/ai-rules-updater.js.map +1 -0
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +2 -27
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/screen-manager.d.ts +1 -0
- package/dist/orchestrator/screen-manager.d.ts.map +1 -1
- package/dist/orchestrator/screen-manager.js +70 -3
- package/dist/orchestrator/screen-manager.js.map +1 -1
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-add-screen.md +18 -9
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-make-tc.md +11 -4
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-make-test.md +11 -6
- package/dist/orchestrator/templates/ai-instructions/claude-skill-error-mapping.md +22 -9
- package/dist/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +170 -24
- package/dist/orchestrator/templates/ai-instructions/claude-skill-selector-fix.md +118 -12
- package/dist/orchestrator/templates/ai-instructions/claude-skill-selector-keys.md +16 -2
- package/dist/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +124 -71
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +13 -5
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-make-tc.md +12 -4
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-make-test.md +11 -6
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-error-mapping.md +22 -9
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +170 -24
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix.md +93 -12
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +16 -2
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +124 -72
- package/dist/orchestrator/templates/readme.md +13 -8
- package/package.json +1 -1
- package/src/cli/commands/update.ts +18 -0
- package/src/cli/index.ts +3 -1
- package/src/generators/gherkin-parser/index.ts +20 -3
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/alert-accept-action.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/alert-dismiss-action.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/alert-fill-action.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/alert-text-assertion.hbs +8 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/attribute-assertion.hbs +3 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/have-value-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +12 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +12 -1
- package/src/generators/test-generator/patterns/assertion-patterns.ts +106 -65
- package/src/generators/test-generator/patterns/index.ts +41 -0
- package/src/generators/test-generator/patterns/interaction-patterns.ts +58 -1
- package/src/generators/test-generator/patterns/table-patterns.ts +8 -5
- package/src/generators/test-generator/utils/selector-resolver.ts +16 -0
- package/src/orchestrator/ai-rules-updater.ts +139 -0
- package/src/orchestrator/project-initializer.ts +2 -32
- package/src/orchestrator/screen-manager.ts +72 -3
- package/src/orchestrator/templates/ai-instructions/claude-cmd-add-screen.md +18 -9
- package/src/orchestrator/templates/ai-instructions/claude-cmd-make-tc.md +11 -4
- package/src/orchestrator/templates/ai-instructions/claude-cmd-make-test.md +11 -6
- package/src/orchestrator/templates/ai-instructions/claude-skill-error-mapping.md +22 -9
- package/src/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +170 -24
- package/src/orchestrator/templates/ai-instructions/claude-skill-selector-fix.md +118 -12
- package/src/orchestrator/templates/ai-instructions/claude-skill-selector-keys.md +16 -2
- package/src/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +124 -71
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +13 -5
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-make-tc.md +12 -4
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-make-test.md +11 -6
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-error-mapping.md +22 -9
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +170 -24
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix.md +93 -12
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +16 -2
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +124 -72
- package/src/orchestrator/templates/readme.md +13 -8
- package/docs/gherkin standards/gherkin-core-standard.md +0 -428
- package/docs/gherkin standards/gherkin-core-standard.vi.md +0 -513
- package/docs/gherkin-dictionary.md +0 -1071
- package/docs/makeauth.md +0 -225
|
@@ -33,6 +33,46 @@ For options 1 and 2:
|
|
|
33
33
|
For option 3:
|
|
34
34
|
- Overwrite both `.feature` and `test-data.yaml` completely
|
|
35
35
|
|
|
36
|
+
### Requirements-Driven Generation
|
|
37
|
+
|
|
38
|
+
When `qa/screens/<screen>/requirements/` exists, use it as the **primary source** for test case generation. This produces higher quality tests because requirements contain exact validation messages, field constraints, business rules, and states.
|
|
39
|
+
|
|
40
|
+
#### Reading Requirements
|
|
41
|
+
|
|
42
|
+
1. **`spec.md`** (primary) — structured screen specification:
|
|
43
|
+
- **Sections** → map directly to test case sections
|
|
44
|
+
- **Fields table** → generate boundary value tests (min/max constraints), required field tests, format tests
|
|
45
|
+
- **Validation Rules table** → generate exact assertion tests using the error messages as `{{test_data}}` values
|
|
46
|
+
- **Actions table** → generate interaction tests (click, submit, navigate)
|
|
47
|
+
- **States table** → generate state transition tests (loading, error, success, disabled)
|
|
48
|
+
- **Business Rules** → generate logic tests (limits, permissions, conditional behavior)
|
|
49
|
+
- **Accessibility** → generate tab-order and aria tests
|
|
50
|
+
|
|
51
|
+
2. **`ui/`** (supplementary) — screenshots, mockups, design images:
|
|
52
|
+
- Read images to understand layout, element positions, visual states
|
|
53
|
+
- Cross-reference with spec.md — identify elements visible in UI but missing from spec
|
|
54
|
+
- Use for UI/UX viewpoint tests (element visibility, placement, responsive)
|
|
55
|
+
|
|
56
|
+
3. **`notes.md`** (supplementary) — free-form edge cases, decisions, known issues:
|
|
57
|
+
- Extract edge cases → add to test coverage
|
|
58
|
+
- Flag known issues → add TODO scenarios
|
|
59
|
+
|
|
60
|
+
#### How Requirements Improve Each Viewpoint
|
|
61
|
+
|
|
62
|
+
| Viewpoint | Without Requirements | With Requirements |
|
|
63
|
+
|-----------|---------------------|-------------------|
|
|
64
|
+
| **UI/UX** | "see [Field] is visible" (generic) | "see [Field] field" + verify label, placeholder, default from spec |
|
|
65
|
+
| **Validation** | "submit empty → see error" (vague) | "submit empty email → see {{email_required_error}}" with exact message from spec |
|
|
66
|
+
| **Logic** | Based on observed page behavior | Business rules drive specific tests (lockout after N attempts, session expiry) |
|
|
67
|
+
| **Security** | Generic injection tests | Role-based tests from auth requirements, permission-specific scenarios |
|
|
68
|
+
|
|
69
|
+
#### Merging Requirements + Live Page
|
|
70
|
+
|
|
71
|
+
If the user also explores the live page:
|
|
72
|
+
- **Verify** spec.md against actual page — flag mismatches (e.g., field in spec but not on page)
|
|
73
|
+
- **Supplement** — discover elements on page not in spec (e.g., footer links, tooltips)
|
|
74
|
+
- **Exact text** — capture actual placeholder text, button labels, error messages from live page and update test-data accordingly
|
|
75
|
+
|
|
36
76
|
### Page Exploration & Auth
|
|
37
77
|
|
|
38
78
|
Use Playwright MCP to explore the live page. If the page requires authentication:
|
|
@@ -55,26 +95,7 @@ Use Playwright MCP to explore the live page. If the page requires authentication
|
|
|
55
95
|
|
|
56
96
|
#### Detail screens with dynamic IDs
|
|
57
97
|
|
|
58
|
-
For screens like `/admin/users/:id` or `/products/:slug
|
|
59
|
-
1. Navigate to the **list page** first via MCP browser to find a real record ID
|
|
60
|
-
2. Use that ID in the page selector value
|
|
61
|
-
3. Use `User is on [X] page` — sungen resolves the path from the selector
|
|
62
|
-
|
|
63
|
-
```yaml
|
|
64
|
-
# selectors.yaml — full path with real ID (generated during make-test)
|
|
65
|
-
user detail:
|
|
66
|
-
type: 'page'
|
|
67
|
-
value: '/admin/users/de42d800-0f5a-490e-9dcf-344fedbd34a5'
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
```gherkin
|
|
71
|
-
Scenario: VP-UI-001 User detail displays name
|
|
72
|
-
Given User is on [User Detail] page
|
|
73
|
-
And User wait for [User Name] heading is visible
|
|
74
|
-
Then User see [User Name] heading with {{user_name}}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Note: the selector uses a hardcoded ID from the live page. If the record is deleted, update the ID in `selectors.yaml`.
|
|
98
|
+
For screens like `/admin/users/:id` or `/products/:slug`, write Gherkin normally (`User is on [User Detail] page`). The real ID will be resolved during `/sungen:make-test` when selectors are generated from the live page. See `sungen-selector-fix` skill for details.
|
|
78
99
|
|
|
79
100
|
### Section-Focused Approach
|
|
80
101
|
|
|
@@ -113,71 +134,90 @@ For each selected section, generate **20+ scenarios per applicable viewpoint**.
|
|
|
113
134
|
|
|
114
135
|
Present a test plan summary and wait for user confirmation before generating files.
|
|
115
136
|
|
|
137
|
+
### Assertion Quality Rules
|
|
138
|
+
|
|
139
|
+
**CRITICAL** — these rules prevent shallow, low-value test cases:
|
|
140
|
+
|
|
141
|
+
1. **NEVER use `is visible`** — `User see [T] type` already asserts visibility. Writing `is visible` is redundant noise. Only use `is hidden` to assert something is NOT shown.
|
|
142
|
+
2. **Group related assertions** — one scenario can have 3-7 `Then/And` steps. Don't waste a whole scenario on one element. Group elements that verify the same concern.
|
|
143
|
+
3. **Assert content, not just existence** — verify values, text, states, not just "it's there":
|
|
144
|
+
- `User see [Title] heading with {{page_title}}` — verify text
|
|
145
|
+
- `User see [Email] field with {{default_email}}` — verify default value
|
|
146
|
+
- `User see [Submit] button is disabled` — verify state
|
|
147
|
+
- `User see [Error] message with {{error_text}}` — verify exact error
|
|
148
|
+
4. **Every assertion must have test value** — if you write `User see [T] type`, ask: what EXACTLY should the user see? Add `with {{value}}` or `is state` whenever the expected content/state is known.
|
|
149
|
+
|
|
150
|
+
**Bad** (shallow — just checks existence):
|
|
151
|
+
```gherkin
|
|
152
|
+
Scenario: VP-UI-001 Email field is visible
|
|
153
|
+
Given User is on [Login] page
|
|
154
|
+
Then User see [Email] field is visible
|
|
155
|
+
|
|
156
|
+
Scenario: VP-UI-002 Password field is visible
|
|
157
|
+
Given User is on [Login] page
|
|
158
|
+
Then User see [Password] field is visible
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Good** (rich — verifies content, states, groups related checks):
|
|
162
|
+
```gherkin
|
|
163
|
+
Scenario: VP-UI-001 Login form displays all fields with correct defaults
|
|
164
|
+
Given User is on [Login] page
|
|
165
|
+
Then User see [Login] heading with {{login_title}}
|
|
166
|
+
And User see [Email] field
|
|
167
|
+
And User see [Password] field
|
|
168
|
+
And User see [Remember me] checkbox is unchecked
|
|
169
|
+
And User see [Submit] button is enabled
|
|
170
|
+
And User see [Forgot password] link
|
|
171
|
+
```
|
|
172
|
+
|
|
116
173
|
### Viewpoint Categories
|
|
117
174
|
|
|
118
175
|
| VP Category | Description |
|
|
119
176
|
|---|---|
|
|
120
|
-
| **UI/UX** | Default appearance,
|
|
121
|
-
| **Validation** | Input validation, error messages, edge cases. **
|
|
177
|
+
| **UI/UX** | Default appearance, default values/text, default states. Group related elements per scenario. |
|
|
178
|
+
| **Validation** | Input validation, error messages, edge cases. **Assert exact error messages via `User see [T] with {{error_var}}`** — store texts in test-data.yaml. |
|
|
122
179
|
| **Logic** | Business logic, interactions, state changes |
|
|
123
180
|
| **Security** | Auth guards, injection, permission checks |
|
|
124
181
|
|
|
125
182
|
### Coverage Checklist per Section Pattern
|
|
126
183
|
|
|
127
|
-
Apply the relevant checklist based on the section pattern:
|
|
128
|
-
|
|
129
184
|
#### Form sections
|
|
130
|
-
- **UI/UX**: All fields
|
|
131
|
-
- **Validation**: Empty submit
|
|
132
|
-
- **Logic**: Successful submit
|
|
133
|
-
- **Security**:
|
|
185
|
+
- **UI/UX**: All fields + labels + default values in 1-2 grouped scenarios. Default states (button enabled/disabled, checkbox unchecked). Placeholder text via `with {{placeholder}}`.
|
|
186
|
+
- **Validation**: Empty submit → verify all error messages. Each required field empty individually → verify specific error. Invalid formats → verify specific error. Boundary values (min/max length). Special chars, unicode, XSS, SQL injection.
|
|
187
|
+
- **Logic**: Successful submit → verify success state/redirect. Edit existing → verify pre-filled values. Cancel → verify form resets. Field dependencies (show/hide).
|
|
188
|
+
- **Security**: Unauthorized submit, role-based field visibility, input sanitization
|
|
134
189
|
|
|
135
190
|
#### Data Table sections
|
|
136
|
-
- **UI/UX**: All
|
|
137
|
-
- **
|
|
138
|
-
- **
|
|
139
|
-
- **Security**: Cannot access other users' data, action permissions per role, data not exposed in DOM
|
|
191
|
+
- **UI/UX**: All column headers in one scenario. Row data displays with correct values. Empty state message. Action buttons per row.
|
|
192
|
+
- **Logic**: Sort ascending/descending. Filter by column. Search. Row actions (edit/delete/view). Bulk select + action.
|
|
193
|
+
- **Security**: Action permissions per role
|
|
140
194
|
|
|
141
195
|
#### Search & Filter sections
|
|
142
|
-
- **UI/UX**: Search field
|
|
143
|
-
- **Validation**: Empty search, special chars,
|
|
144
|
-
- **Logic**: Apply single filter, combine
|
|
145
|
-
- **Security**: Injection via search
|
|
196
|
+
- **UI/UX**: Search field + filter buttons + clear button states in one scenario
|
|
197
|
+
- **Validation**: Empty search, special chars, injection, long text, unicode
|
|
198
|
+
- **Logic**: Apply/clear single filter, combine filters, no results state with message
|
|
199
|
+
- **Security**: Injection via search/filter params
|
|
146
200
|
|
|
147
201
|
#### Pagination sections
|
|
148
|
-
- **UI/UX**: Page indicator
|
|
149
|
-
- **Logic**:
|
|
150
|
-
- **Security**: Filters persist across pages, search persists, cannot access page beyond max
|
|
202
|
+
- **UI/UX**: Page indicator + button states (previous disabled on page 1, next enabled)
|
|
203
|
+
- **Logic**: Navigate pages, boundary behavior, indicator updates
|
|
151
204
|
|
|
152
205
|
#### Modal / Dialog sections
|
|
153
|
-
- **UI/UX**: Modal
|
|
154
|
-
- **Validation**:
|
|
155
|
-
- **Logic**: Open
|
|
156
|
-
- **Security**: Cannot open unauthorized modals, CSRF on modal submit
|
|
157
|
-
|
|
158
|
-
#### Card Grid / List sections
|
|
159
|
-
- **UI/UX**: Cards display all expected fields (title, image, description, metadata), empty state, loading state
|
|
160
|
-
- **Logic**: Click card navigates to detail, load more / infinite scroll, card action buttons (like, share, delete), responsive layout
|
|
161
|
-
- **Security**: User-generated content sanitized, cannot access other users' cards
|
|
162
|
-
|
|
163
|
-
#### Carousel / Slider sections
|
|
164
|
-
- **UI/UX**: Arrows visible, indicators visible, current slide highlighted
|
|
165
|
-
- **Logic**: Next slide, previous slide, wrap at end, auto-play, indicator click navigates, swipe gesture
|
|
166
|
-
- **Security**: N/A
|
|
206
|
+
- **UI/UX**: Modal content + all fields + close button in one scenario
|
|
207
|
+
- **Validation**: Field validation inside modal with exact errors
|
|
208
|
+
- **Logic**: Open/close methods (X, Escape, overlay), submit success/error behavior
|
|
167
209
|
|
|
168
210
|
#### Tabs / Accordion sections
|
|
169
|
-
- **UI/UX**: All
|
|
170
|
-
- **Logic**: Switch tabs
|
|
171
|
-
- **Security**: Tab content respects permissions
|
|
211
|
+
- **UI/UX**: All tab labels + active tab highlighted + default tab content
|
|
212
|
+
- **Logic**: Switch tabs → verify content changes, accordion expand/collapse
|
|
172
213
|
|
|
173
214
|
### General Coverage Dimensions (aim for 20+ total per viewpoint)
|
|
174
215
|
|
|
175
|
-
**Happy paths (3-5):** Standard flow
|
|
176
|
-
**Edge cases (5-8):** Empty, max length, special chars, unicode
|
|
177
|
-
**
|
|
178
|
-
**
|
|
179
|
-
**
|
|
180
|
-
**Combinatorial (2-4):** Multiple invalid fields, valid+invalid combos, different roles
|
|
216
|
+
**Happy paths (3-5):** Standard flow with full assertion of result state
|
|
217
|
+
**Edge cases (5-8):** Empty, max length, special chars, unicode, whitespace, boundary values
|
|
218
|
+
**Negative cases (3-5):** Invalid format, missing required, wrong type, exact error messages
|
|
219
|
+
**State transitions (2-4):** Before/after action, verify both old and new state
|
|
220
|
+
**Combinatorial (2-4):** Multiple invalid fields, valid+invalid combos
|
|
181
221
|
|
|
182
222
|
### SPA Wait-For Steps
|
|
183
223
|
|
|
@@ -208,24 +248,37 @@ Feature: <Screen> Screen
|
|
|
208
248
|
# Section: Create User Form
|
|
209
249
|
# ============================================================
|
|
210
250
|
|
|
211
|
-
# --- UI/UX
|
|
251
|
+
# --- UI/UX ---
|
|
212
252
|
|
|
213
|
-
Scenario: VP-UI-001
|
|
214
|
-
|
|
253
|
+
Scenario: VP-UI-001 Form displays all fields with correct defaults
|
|
254
|
+
Given User is on [Create User] page
|
|
255
|
+
Then User see [Create User] heading with {{form_title}}
|
|
256
|
+
And User see [Name] field
|
|
257
|
+
And User see [Email] field
|
|
258
|
+
And User see [Role] dropdown with {{default_role}}
|
|
259
|
+
And User see [Submit] button is disabled
|
|
260
|
+
And User see [Cancel] button is enabled
|
|
215
261
|
|
|
216
|
-
# --- Validation
|
|
262
|
+
# --- Validation ---
|
|
217
263
|
|
|
218
|
-
Scenario: VP-VAL-001 Submit with empty
|
|
219
|
-
|
|
264
|
+
Scenario: VP-VAL-001 Submit with all empty fields shows errors
|
|
265
|
+
Given User is on [Create User] page
|
|
266
|
+
When User click [Submit] button
|
|
267
|
+
Then User see [Name error] message with {{name_required_error}}
|
|
268
|
+
And User see [Email error] message with {{email_required_error}}
|
|
220
269
|
|
|
221
270
|
# ============================================================
|
|
222
271
|
# Section: User Table
|
|
223
272
|
# ============================================================
|
|
224
273
|
|
|
225
|
-
# --- UI/UX
|
|
274
|
+
# --- UI/UX ---
|
|
226
275
|
|
|
227
|
-
Scenario: VP-UI-
|
|
228
|
-
|
|
276
|
+
Scenario: VP-UI-010 Table displays all columns
|
|
277
|
+
Given User is on [Users] page
|
|
278
|
+
Then User see [Name] column in [Users] table
|
|
279
|
+
And User see [Email] column in [Users] table
|
|
280
|
+
And User see [Status] column in [Users] table
|
|
281
|
+
And User see [Actions] column in [Users] table
|
|
229
282
|
```
|
|
230
283
|
|
|
231
284
|
**Naming convention:** `VP-<CATEGORY>-<NNN>` prefix in Scenario name.
|
|
@@ -24,15 +24,23 @@ Run with #tool:terminal:
|
|
|
24
24
|
sungen add --screen ${input:screen} --path ${input:path}
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
### 2.
|
|
27
|
+
### 2. Fill requirements (recommended)
|
|
28
|
+
|
|
29
|
+
Ask the user: "Would you like to fill in `requirements/spec.md` now? This helps generate higher quality test cases."
|
|
30
|
+
|
|
31
|
+
- If yes → open `qa/screens/${input:screen}/requirements/spec.md` and help the user fill sections, fields, validation rules, business rules, and states.
|
|
32
|
+
- If they have UI designs (screenshots, Figma exports, mockups) → suggest copying them to `requirements/ui/`.
|
|
33
|
+
- If no → proceed to step 3.
|
|
34
|
+
|
|
35
|
+
### 3. Create test cases
|
|
28
36
|
|
|
29
37
|
Ask the user: "Would you like to create test cases now?"
|
|
30
38
|
|
|
31
|
-
If yes
|
|
39
|
+
If yes → **tell the user to run `/sungen-make-tc ${input:screen}` as a separate command.** Do NOT attempt to generate test cases yourself in this session — the `make-tc` command auto-loads the `sungen-gherkin-syntax` and `sungen-tc-generation` skills which contain the full Gherkin syntax rules, pattern shapes, viewpoint checklists, and output format.
|
|
32
40
|
|
|
33
|
-
###
|
|
41
|
+
### 4. Confirm
|
|
34
42
|
|
|
35
|
-
|
|
36
|
-
-
|
|
43
|
+
If the user declined test case creation, tell them next steps:
|
|
44
|
+
- Fill `requirements/spec.md` with screen specs (if not done)
|
|
37
45
|
- Run `/sungen-make-tc` to create test cases
|
|
38
46
|
- Run `/sungen-make-test` to generate selectors, compile, and run tests
|
|
@@ -20,9 +20,17 @@ You are a **Senior QA Engineer**. You structure test cases by viewpoint categori
|
|
|
20
20
|
|
|
21
21
|
1. Verify `qa/screens/${input:screen}/` exists. If not → run `/sungen-add-screen` first.
|
|
22
22
|
2. Check if `.feature` already has scenarios. If yes → summarize existing coverage and ask: **1) Add new sections**, **2) Add viewpoints to existing sections**, or **3) Replace all**. See `sungen-tc-generation` skill for update mode details.
|
|
23
|
-
3.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
3. **Read requirements** — check `qa/screens/${input:screen}/requirements/`:
|
|
24
|
+
- If `spec.md` exists → read it as PRIMARY source (sections, fields, validation rules, business rules, states).
|
|
25
|
+
- If `ui/` has images → read them for visual context (layout, element positions, states).
|
|
26
|
+
- If `notes.md` exists → read for edge cases and additional context.
|
|
27
|
+
- Summarize what you found in requirements and present to the user.
|
|
28
|
+
4. **Explore page** (supplements requirements, or is primary source if no requirements):
|
|
29
|
+
- Ask: "How should I explore the page? **1) Live page** (via Playwright MCP) or **2) Static designs** (screenshots, Figma) or **3) Skip** (if requirements are sufficient)?"
|
|
30
|
+
- If live page, explore via #tool:playwright (see [copilot-instructions.md](../../copilot-instructions.md) for MCP rules). If auth needed, ask user to log in manually.
|
|
31
|
+
- If exploring, verify and supplement requirements — flag any discrepancies found.
|
|
32
|
+
5. Identify screen sections → ask user which to focus on (per `sungen-tc-generation` skill). When requirements exist, use the "Requirements-Driven Generation" strategy. Present sections as a numbered list and let user pick.
|
|
33
|
+
6. Generate or update `.feature` + `test-data.yaml` following `sungen-gherkin-syntax` and `sungen-tc-generation` skills.
|
|
34
|
+
7. Show summary → next: `/sungen-make-test ${input:screen}`
|
|
27
35
|
|
|
28
36
|
**No selectors.yaml** — selectors are generated during `/sungen-make-test`.
|
|
@@ -19,9 +19,14 @@ You are a **Senior Developer** specialized in Playwright test debugging. You gen
|
|
|
19
19
|
## Steps
|
|
20
20
|
|
|
21
21
|
1. Verify `qa/screens/${input:screen}/` has `.feature` + `test-data.yaml`. If not → run `/sungen-make-tc` first.
|
|
22
|
-
2.
|
|
23
|
-
3.
|
|
24
|
-
4.
|
|
25
|
-
5.
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
2. **Generate selectors** — explore live page via #tool:playwright, build `selectors.yaml` (per `sungen-selector-fix` skill).
|
|
23
|
+
3. **Proactive validation** — verify EVERY selector against the live page using `browser_snapshot` + `browser_evaluate` BEFORE running any test. Fix mismatches immediately. See `sungen-selector-fix` skill "Proactive Selector Validation" section. Target: 80%+ issues fixed before first run.
|
|
24
|
+
4. **Compile** with #tool:terminal: `sungen generate --screen ${input:screen}`
|
|
25
|
+
5. **Batched test run** — run tests in batches of 20 via `--grep`:
|
|
26
|
+
`npx playwright test specs/generated/${input:screen}/*.spec.ts --grep "VP-UI-001|...|VP-UI-020" --reporter=line`
|
|
27
|
+
- If failures in batch → group by root cause, fix, recompile, re-run only failing tests
|
|
28
|
+
- If batch passes → move to next 20 tests
|
|
29
|
+
- Max 5 fix attempts per batch
|
|
30
|
+
6. **Final confirmation** — run ALL tests once to catch regressions.
|
|
31
|
+
7. After 5 fix attempts still failing → ask user about direct `.spec.ts` fix.
|
|
32
|
+
8. Show: pass/fail, attempt count, files changed.
|
|
@@ -6,16 +6,29 @@ user-invocable: false
|
|
|
6
6
|
|
|
7
7
|
## Playwright Errors → Fix
|
|
8
8
|
|
|
9
|
-
| Error | Fix
|
|
9
|
+
| Error | Fix |
|
|
10
10
|
|---|---|
|
|
11
|
-
| strict mode violation | add `nth`, `exact: true`, or specific `name` |
|
|
12
|
-
| Element is not an input | change `type` or `value` |
|
|
13
|
-
| Timeout waiting for selector | fix `type`/`value`/`name` to match element |
|
|
14
|
-
| toBeVisible Timeout | verify accessible name or use `testid` |
|
|
15
|
-
| toHaveText mismatch | fix in `test-data.yaml` |
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
11
|
+
| strict mode violation | add `nth`, `exact: true`, or specific `name` in selectors.yaml |
|
|
12
|
+
| Element is not an input | change `type` or `value` in selectors.yaml |
|
|
13
|
+
| Timeout waiting for selector | fix `type`/`value`/`name` to match element in selectors.yaml |
|
|
14
|
+
| toBeVisible Timeout | verify accessible name or use `testid` in selectors.yaml |
|
|
15
|
+
| toHaveText mismatch | fix expected text in `test-data.yaml` — OR if element is an input (field/textarea/search/dropdown), change Gherkin type so compiler uses `toHaveValue` instead |
|
|
16
|
+
| toHaveValue mismatch | fix expected value in `test-data.yaml` — this is for input elements (field, textarea, search, dropdown, slider, date-picker) |
|
|
17
|
+
| toContainText mismatch | fix expected partial text in `test-data.yaml` |
|
|
18
|
+
| Navigation failed | fix page `value` path in selectors.yaml |
|
|
19
|
+
| not a select | set `variant: 'custom'` in selectors.yaml |
|
|
20
|
+
| Frame not found | fix `frame` value in selectors.yaml |
|
|
21
|
+
| dialog was dismissed | alert step is AFTER the trigger — move `click [OK] alert` BEFORE the button click that opens the dialog |
|
|
22
|
+
| page.once('dialog') never fired | no browser dialog appeared — check if the action actually triggers a `window.alert/confirm/prompt`, not a CSS modal |
|
|
23
|
+
|
|
24
|
+
### Assertion type mismatch (toHaveText vs toHaveValue)
|
|
25
|
+
|
|
26
|
+
Sungen picks the assertion based on element type:
|
|
27
|
+
- **Input types** (`field`, `textarea`, `search`, `dropdown`, `slider`, `date-picker`) → `toHaveValue()`
|
|
28
|
+
- **Text types** (everything else: `message`, `header`, `label`, `row`, etc.) → `toHaveText()`
|
|
29
|
+
- **Partial match** (uses `contains` keyword) → `toContainText()`
|
|
30
|
+
|
|
31
|
+
If you see `toHaveText` failing on an input element, the Gherkin step has the wrong target type. Fix: change the target type in the `.feature` file (e.g., `see [Email] message with {{v}}` → `see [Email] field with {{v}}`).
|
|
19
32
|
|
|
20
33
|
## Auth Errors → Fix
|
|
21
34
|
|