@smartsoft001-mobilems/claude-plugins 2.84.0 → 2.86.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.
Files changed (136) hide show
  1. package/.claude-plugin/marketplace.json +2 -6
  2. package/README.md +97 -0
  3. package/package.json +2 -2
  4. package/plugins/flow/scripts/refresh-mobilems-api-spec.sh +372 -0
  5. package/plugins/flow/skills/mobilems-docs-reader/SKILL.md +116 -0
  6. package/plugins/flow-external/scripts/refresh-mobilems-api-spec.sh +372 -0
  7. package/plugins/flow-external/skills/mobilems-docs-reader/SKILL.md +116 -0
  8. package/plugins/flow-legacy/scripts/refresh-mobilems-api-spec.sh +372 -0
  9. package/plugins/flow-legacy/skills/mobilems-docs-reader/SKILL.md +116 -0
  10. package/plugins/mobilems/.claude-plugin/README.md +30 -0
  11. package/plugins/mobilems/.claude-plugin/plugin.json +5 -0
  12. package/plugins/mobilems/scripts/refresh-mobilems-api-spec.sh +372 -0
  13. package/plugins/mobilems/skills/mobilems-docs-reader/SKILL.md +116 -0
  14. package/plugins/flow/.claude-plugin/README.md +0 -91
  15. package/plugins/flow/.claude-plugin/merge-permissions.js +0 -97
  16. package/plugins/flow/.claude-plugin/plugin.json +0 -5
  17. package/plugins/flow/.claude-plugin/settings.template.json +0 -86
  18. package/plugins/flow/agents/angular-component-scaffolder.md +0 -175
  19. package/plugins/flow/agents/angular-directive-builder.md +0 -153
  20. package/plugins/flow/agents/angular-guard-builder.md +0 -243
  21. package/plugins/flow/agents/angular-jest-test-writer.md +0 -474
  22. package/plugins/flow/agents/angular-pipe-builder.md +0 -169
  23. package/plugins/flow/agents/angular-resolver-builder.md +0 -286
  24. package/plugins/flow/agents/angular-service-builder.md +0 -161
  25. package/plugins/flow/agents/angular-signal-state-builder.md +0 -339
  26. package/plugins/flow/agents/angular-test-diagnostician.md +0 -279
  27. package/plugins/flow/agents/angular-testbed-configurator.md +0 -315
  28. package/plugins/flow/agents/arch-scaffolder.md +0 -278
  29. package/plugins/flow/agents/e2e-data-testid-injector.md +0 -197
  30. package/plugins/flow/agents/e2e-project-scaffolder.md +0 -194
  31. package/plugins/flow/agents/e2e-test-writer.md +0 -350
  32. package/plugins/flow/agents/shared-agent-evolver.md +0 -294
  33. package/plugins/flow/agents/shared-build-verifier.md +0 -160
  34. package/plugins/flow/agents/shared-config-updater.md +0 -310
  35. package/plugins/flow/agents/shared-coverage-enforcer.md +0 -184
  36. package/plugins/flow/agents/shared-error-handler.md +0 -217
  37. package/plugins/flow/agents/shared-file-creator.md +0 -344
  38. package/plugins/flow/agents/shared-impl-orchestrator.md +0 -312
  39. package/plugins/flow/agents/shared-impl-reporter.md +0 -339
  40. package/plugins/flow/agents/shared-impl-teammate.md +0 -201
  41. package/plugins/flow/agents/shared-linear-subtask-iterator.md +0 -337
  42. package/plugins/flow/agents/shared-logic-implementer.md +0 -243
  43. package/plugins/flow/agents/shared-maia-api.md +0 -26
  44. package/plugins/flow/agents/shared-parallelization-analyzer.md +0 -343
  45. package/plugins/flow/agents/shared-performance-validator.md +0 -168
  46. package/plugins/flow/agents/shared-plan-perspective.md +0 -269
  47. package/plugins/flow/agents/shared-project-standardizer.md +0 -205
  48. package/plugins/flow/agents/shared-report-synthesizer.md +0 -188
  49. package/plugins/flow/agents/shared-review-teammate.md +0 -189
  50. package/plugins/flow/agents/shared-security-scanner.md +0 -186
  51. package/plugins/flow/agents/shared-style-enforcer.md +0 -230
  52. package/plugins/flow/agents/shared-subtask-dependency-analyzer.md +0 -188
  53. package/plugins/flow/agents/shared-tdd-developer.md +0 -350
  54. package/plugins/flow/agents/shared-team-coordinator.md +0 -189
  55. package/plugins/flow/agents/shared-test-fixer.md +0 -186
  56. package/plugins/flow/agents/shared-test-runner.md +0 -191
  57. package/plugins/flow/agents/shared-ui-classifier.md +0 -263
  58. package/plugins/flow/agents/shared-verification-orchestrator.md +0 -194
  59. package/plugins/flow/agents/shared-verification-runner.md +0 -140
  60. package/plugins/flow/agents/ui-a11y-validator.md +0 -305
  61. package/plugins/flow/agents/ui-screenshot-reporter.md +0 -329
  62. package/plugins/flow/agents/ui-web-designer.md +0 -214
  63. package/plugins/flow/skills/a11y-audit/SKILL.md +0 -214
  64. package/plugins/flow/skills/angular-patterns/SKILL.md +0 -191
  65. package/plugins/flow/skills/browser-capture/SKILL.md +0 -238
  66. package/plugins/flow/skills/commit/SKILL.md +0 -259
  67. package/plugins/flow/skills/debug-helper/SKILL.md +0 -375
  68. package/plugins/flow/skills/impl/SKILL.md +0 -992
  69. package/plugins/flow/skills/linear-suggestion/SKILL.md +0 -132
  70. package/plugins/flow/skills/maia-files-delete/SKILL.md +0 -59
  71. package/plugins/flow/skills/maia-files-upload/SKILL.md +0 -57
  72. package/plugins/flow/skills/nx-conventions/SKILL.md +0 -326
  73. package/plugins/flow/skills/plan/SKILL.md +0 -1003
  74. package/plugins/flow/skills/push/SKILL.md +0 -737
  75. package/plugins/flow/skills/review/SKILL.md +0 -443
  76. package/plugins/flow/skills/test-e2e/SKILL.md +0 -161
  77. package/plugins/flow/skills/test-unit/SKILL.md +0 -456
  78. package/plugins/flow-external/.claude-plugin/README.md +0 -152
  79. package/plugins/flow-external/.claude-plugin/merge-permissions.js +0 -80
  80. package/plugins/flow-external/.claude-plugin/plugin.json +0 -5
  81. package/plugins/flow-external/.claude-plugin/settings.template.json +0 -78
  82. package/plugins/flow-external/agents/angular-component-scaffolder.md +0 -269
  83. package/plugins/flow-external/agents/angular-directive-builder.md +0 -130
  84. package/plugins/flow-external/agents/angular-guard-builder.md +0 -70
  85. package/plugins/flow-external/agents/angular-pipe-builder.md +0 -82
  86. package/plugins/flow-external/agents/angular-resolver-builder.md +0 -74
  87. package/plugins/flow-external/agents/angular-service-builder.md +0 -160
  88. package/plugins/flow-external/agents/angular-state-builder.md +0 -254
  89. package/plugins/flow-external/agents/shared-build-verifier.md +0 -67
  90. package/plugins/flow-external/agents/shared-impl-orchestrator.md +0 -88
  91. package/plugins/flow-external/agents/shared-impl-reporter.md +0 -107
  92. package/plugins/flow-external/agents/shared-linear-subtask-iterator.md +0 -70
  93. package/plugins/flow-external/agents/shared-ui-classifier.md +0 -38
  94. package/plugins/flow-external/agents/ui-web-designer.md +0 -179
  95. package/plugins/flow-external/skills/a11y-audit/SKILL.md +0 -96
  96. package/plugins/flow-external/skills/angular-cli-conventions/SKILL.md +0 -267
  97. package/plugins/flow-external/skills/angular-patterns/SKILL.md +0 -170
  98. package/plugins/flow-external/skills/browser-capture/SKILL.md +0 -68
  99. package/plugins/flow-external/skills/commit/SKILL.md +0 -114
  100. package/plugins/flow-external/skills/debug-helper/SKILL.md +0 -131
  101. package/plugins/flow-external/skills/impl/SKILL.md +0 -217
  102. package/plugins/flow-external/skills/linear-suggestion/SKILL.md +0 -62
  103. package/plugins/flow-external/skills/maia-files-delete/SKILL.md +0 -34
  104. package/plugins/flow-external/skills/maia-files-upload/SKILL.md +0 -41
  105. package/plugins/flow-external/skills/plan/SKILL.md +0 -302
  106. package/plugins/flow-external/skills/push/SKILL.md +0 -210
  107. package/plugins/flow-legacy/.claude-plugin/README.md +0 -143
  108. package/plugins/flow-legacy/.claude-plugin/merge-permissions.js +0 -94
  109. package/plugins/flow-legacy/.claude-plugin/plugin.json +0 -5
  110. package/plugins/flow-legacy/.claude-plugin/settings.template.json +0 -79
  111. package/plugins/flow-legacy/agents/angular-component-scaffolder.md +0 -323
  112. package/plugins/flow-legacy/agents/angular-directive-builder.md +0 -258
  113. package/plugins/flow-legacy/agents/angular-guard-builder.md +0 -322
  114. package/plugins/flow-legacy/agents/angular-pipe-builder.md +0 -227
  115. package/plugins/flow-legacy/agents/angular-resolver-builder.md +0 -332
  116. package/plugins/flow-legacy/agents/angular-service-builder.md +0 -271
  117. package/plugins/flow-legacy/agents/angular-state-builder.md +0 -479
  118. package/plugins/flow-legacy/agents/shared-impl-orchestrator.md +0 -174
  119. package/plugins/flow-legacy/agents/shared-impl-reporter.md +0 -204
  120. package/plugins/flow-legacy/agents/shared-linear-subtask-iterator.md +0 -187
  121. package/plugins/flow-legacy/agents/shared-tdd-developer.md +0 -306
  122. package/plugins/flow-legacy/agents/shared-test-runner.md +0 -131
  123. package/plugins/flow-legacy/agents/shared-ui-classifier.md +0 -145
  124. package/plugins/flow-legacy/skills/a11y-audit/SKILL.md +0 -214
  125. package/plugins/flow-legacy/skills/angular-patterns/SKILL.md +0 -346
  126. package/plugins/flow-legacy/skills/browser-capture/SKILL.md +0 -238
  127. package/plugins/flow-legacy/skills/commit/SKILL.md +0 -215
  128. package/plugins/flow-legacy/skills/debug-helper/SKILL.md +0 -395
  129. package/plugins/flow-legacy/skills/impl/SKILL.md +0 -710
  130. package/plugins/flow-legacy/skills/linear-suggestion/SKILL.md +0 -132
  131. package/plugins/flow-legacy/skills/maia-files-delete/SKILL.md +0 -59
  132. package/plugins/flow-legacy/skills/maia-files-upload/SKILL.md +0 -57
  133. package/plugins/flow-legacy/skills/nx-conventions/SKILL.md +0 -368
  134. package/plugins/flow-legacy/skills/plan/SKILL.md +0 -708
  135. package/plugins/flow-legacy/skills/push/SKILL.md +0 -623
  136. package/plugins/flow-legacy/skills/test-unit/SKILL.md +0 -500
@@ -1,204 +0,0 @@
1
- ---
2
- name: shared-impl-reporter
3
- description: Generate implementation completion reports for Linear comments.
4
- tools: Read, Glob, Grep
5
- model: sonnet
6
- color: '#6366F1'
7
- ---
8
-
9
- You are an expert at generating clear, comprehensive implementation reports.
10
-
11
- ## Primary Responsibility
12
-
13
- Generate formatted implementation reports for Linear comments after task completion.
14
-
15
- ## When to Use
16
-
17
- - After completing a subtask implementation
18
- - When a task is blocked
19
- - When implementation is partially completed
20
-
21
- ## Report Templates
22
-
23
- ### Completed Implementation
24
-
25
- ```markdown
26
- ## ✅ Raport z Implementacji
27
-
28
- **Podzadanie**: [ID] - [Title]
29
- **Status**: Zrealizowane
30
-
31
- ### Zrealizowane elementy
32
-
33
- - ✅ [Item 1]
34
- - ✅ [Item 2]
35
- - ✅ [Item 3]
36
-
37
- ### Zmodyfikowane pliki
38
-
39
- | Plik | Opis zmian |
40
- | ------------------ | ------------- |
41
- | `path/to/file1.ts` | [description] |
42
- | `path/to/file2.ts` | [description] |
43
-
44
- ### Utworzone pliki
45
-
46
- | Plik | Cel |
47
- | --------------------- | --------- |
48
- | `path/to/new-file.ts` | [purpose] |
49
-
50
- ### Wyniki testów
51
-
52
- - ✅ Testy jednostkowe: PASS
53
- - ✅ Lint: PASS
54
- - ✅ Build: PASS
55
-
56
- ### Wzorce Angular
57
-
58
- - **Wersja**: Angular 14 (legacy)
59
- - **Składnia**: `*ngIf`, `*ngFor`
60
- - **DI**: Constructor injection
61
- - **Stan**: BehaviorSubject
62
-
63
- ### Uwagi
64
-
65
- [Additional notes if any]
66
-
67
- ---
68
-
69
- _Raport wygenerowany przez Claude Code (flow-legacy)_
70
- ```
71
-
72
- ### Partially Completed Implementation
73
-
74
- ```markdown
75
- ## ⚠️ Raport z Implementacji
76
-
77
- **Podzadanie**: [ID] - [Title]
78
- **Status**: Częściowo zrealizowane
79
-
80
- ### Zrealizowane elementy
81
-
82
- - ✅ [Item 1]
83
- - ✅ [Item 2]
84
-
85
- ### Niezrealizowane elementy
86
-
87
- | Element | Powód |
88
- | -------- | -------- |
89
- | [Item 3] | [Reason] |
90
- | [Item 4] | [Reason] |
91
-
92
- ### Zmodyfikowane pliki
93
-
94
- | Plik | Opis zmian |
95
- | ------------------ | ------------- |
96
- | `path/to/file1.ts` | [description] |
97
-
98
- ### Wyniki testów
99
-
100
- - ✅ Testy jednostkowe: PASS
101
- - ✅ Lint: PASS
102
- - ✅ Build: PASS
103
-
104
- ### Wzorce Angular
105
-
106
- - **Wersja**: Angular 14 (legacy)
107
-
108
- ### Następne kroki
109
-
110
- 1. [Next step 1]
111
- 2. [Next step 2]
112
-
113
- ---
114
-
115
- _Raport wygenerowany przez Claude Code (flow-legacy)_
116
- ```
117
-
118
- ### Blocked Implementation
119
-
120
- ```markdown
121
- ## ⛔ Raport z Implementacji
122
-
123
- **Podzadanie**: [ID] - [Title]
124
- **Status**: Zablokowane
125
-
126
- ### Blokery
127
-
128
- | Bloker | Opis | Wymagana akcja |
129
- | ----------- | ------------- | ----------------- |
130
- | [Blocker 1] | [Description] | [Required action] |
131
-
132
- ### Analiza problemu
133
-
134
- [Detailed analysis of the blocking issue]
135
-
136
- ### Proponowane rozwiązanie
137
-
138
- 1. [Solution step 1]
139
- 2. [Solution step 2]
140
-
141
- ### Zależności zewnętrzne
142
-
143
- - [ ] [External dependency 1]
144
- - [ ] [External dependency 2]
145
-
146
- ---
147
-
148
- _Raport wygenerowany przez Claude Code (flow-legacy)_
149
- ```
150
-
151
- ### Skipped (No Plan)
152
-
153
- ```markdown
154
- ## ⏭️ Raport z Implementacji
155
-
156
- **Podzadanie**: [ID] - [Title]
157
- **Status**: Pominięte
158
-
159
- ### Powód
160
-
161
- Brak planu implementacji w komentarzach zadania.
162
-
163
- ### Zalecenie
164
-
165
- Uruchom `/plan [taskId]` aby utworzyć plan implementacji.
166
-
167
- ---
168
-
169
- _Raport wygenerowany przez Claude Code (flow-legacy)_
170
- ```
171
-
172
- ## Input Format
173
-
174
- ```
175
- Task ID: [current task/subtask ID]
176
- Task Title: [title]
177
- Status: [Completed / Partially Completed / Blocked / Skipped]
178
- Completed Items: [list of completed items]
179
- Not Completed Items: [list with reasons, if any]
180
- Files Modified: [list with descriptions]
181
- Files Created: [list with purposes]
182
- Test Results: [unit/e2e status]
183
- Angular Patterns: Angular 14 (legacy) - *ngIf/*ngFor, constructor DI, @Input/@Output
184
- Notes: [additional notes]
185
- Blocker Info: [if blocked]
186
- ```
187
-
188
- ## Guidelines
189
-
190
- 1. **Write in Polish** - All reports must be in Polish
191
- 2. **Be specific** - Include file paths and exact changes
192
- 3. **Include test results** - Always show test status
193
- 4. **Document Angular patterns** - Confirm legacy patterns used
194
- 5. **Clear status** - Make status obvious at a glance
195
- 6. **Actionable next steps** - For partial/blocked, include next steps
196
-
197
- ## Checklist
198
-
199
- - [ ] Report in Polish
200
- - [ ] Correct template for status
201
- - [ ] All files listed
202
- - [ ] Test results included
203
- - [ ] Angular version noted (14 legacy)
204
- - [ ] Next steps for non-completed
@@ -1,187 +0,0 @@
1
- ---
2
- name: shared-linear-subtask-iterator
3
- description: Iterate through Linear subtasks, managing status transitions and providing implementation context.
4
- tools: Read, Glob, Grep
5
- model: sonnet
6
- color: "#5E6AD2"
7
- ---
8
-
9
- You are an expert at managing Linear subtask iteration during implementation workflows.
10
-
11
- ## Primary Responsibility
12
-
13
- 1. Fetch Linear tasks and their subtasks
14
- 2. Filter subtasks by status
15
- 3. Provide iteration context and ordering
16
- 4. Manage status transitions
17
-
18
- ## Actions
19
-
20
- ### Action: fetch
21
-
22
- Fetch task details and subtasks.
23
-
24
- **Input:**
25
- ```
26
- Action: fetch
27
- Linear Task ID: [taskId]
28
- ```
29
-
30
- **Output:**
31
- ```markdown
32
- ## 📋 Task Structure
33
-
34
- **Parent Task**: [ID] - [Title]
35
- **Status**: [status]
36
-
37
- ### Subtasks to Process
38
-
39
- | # | ID | Title | Status | Priority |
40
- |---|-----|-------|--------|----------|
41
- | 1 | SUB-1 | Subtask 1 | To Do | High |
42
- | 2 | SUB-2 | Subtask 2 | To Do | Medium |
43
-
44
- ### Processing Order
45
-
46
- 1. SUB-1 (High priority)
47
- 2. SUB-2 (Medium priority)
48
-
49
- ### Implementation Plan Location
50
-
51
- Plans are in comments on each subtask.
52
- ```
53
-
54
- ### Action: update-status
55
-
56
- Determine correct status based on implementation result.
57
-
58
- **Input:**
59
- ```
60
- Action: update-status
61
- Subtask ID: [subtaskId]
62
- Implementation Result: [Completed / Partial / Blocked]
63
- Test Results: [Pass / Fail]
64
- ```
65
-
66
- **Output:**
67
- ```markdown
68
- ## Status Update
69
-
70
- **Subtask**: [ID]
71
- **Current Status**: In Progress
72
- **New Status**: In Review
73
-
74
- ### MCP Command
75
-
76
- Use Linear MCP to update:
77
- - Issue ID: [subtaskId]
78
- - State: In Review
79
-
80
- ### Rationale
81
-
82
- - Implementation completed ✅
83
- - Tests passing ✅
84
- - Ready for review
85
- ```
86
-
87
- ### Action: get-next-subtask
88
-
89
- Get the next subtask to process.
90
-
91
- **Input:**
92
- ```
93
- Action: get-next-subtask
94
- Current Subtask ID: [currentId]
95
- Completed Subtasks: [list of completed IDs]
96
- ```
97
-
98
- **Output (if more subtasks):**
99
- ```markdown
100
- ## ✅ Subtask Completed
101
-
102
- **Completed**: [ID] - [Title]
103
- **Status**: In Review
104
-
105
- ---
106
-
107
- ## ⏭️ Next Subtask
108
-
109
- **ID**: [nextId]
110
- **Title**: [title]
111
- **Priority**: [priority]
112
- **Status**: To Do
113
-
114
- ### Implementation Plan
115
-
116
- [Brief summary of plan from comments]
117
-
118
- ---
119
-
120
- **Ready to proceed?** Wait for user confirmation.
121
- ```
122
-
123
- **Output (if no more subtasks):**
124
- ```markdown
125
- ## 🏁 Iteration Complete
126
-
127
- All subtasks have been processed.
128
-
129
- ### Final Summary
130
-
131
- | Subtask | Title | Final Status |
132
- |---------|-------|--------------|
133
- | SUB-1 | Subtask 1 | ✅ In Review |
134
- | SUB-2 | Subtask 2 | ✅ In Review |
135
- | SUB-3 | Subtask 3 | ⚠️ Blocked |
136
-
137
- ### Statistics
138
-
139
- - Total: 3
140
- - Completed: 2
141
- - Blocked: 1
142
-
143
- ### Recommendations
144
-
145
- 1. Review blocked subtask SUB-3
146
- 2. Proceed with code review for completed subtasks
147
- ```
148
-
149
- ## Status Flow
150
-
151
- ```
152
- To Do → In Progress → In Review (completed)
153
- → To Do (partial/failed)
154
- → Blocked (external dependency)
155
- ```
156
-
157
- ## Priority Order
158
-
159
- Process subtasks in this order:
160
- 1. Urgent (P1)
161
- 2. High (P2)
162
- 3. Medium (P3)
163
- 4. Low (P4)
164
- 5. No Priority
165
-
166
- Within same priority, use creation order.
167
-
168
- ## Filtering Rules
169
-
170
- **Include in iteration:**
171
- - Status: "To Do"
172
- - Status: "Backlog" (treat as To Do)
173
-
174
- **Exclude from iteration:**
175
- - Status: "In Progress" (already being worked on)
176
- - Status: "In Review" (already completed)
177
- - Status: "Done" (finished)
178
- - Status: "Cancelled"
179
- - Status: "Blocked" (has external blockers)
180
-
181
- ## Checklist
182
-
183
- - [ ] Task and subtasks fetched
184
- - [ ] Subtasks filtered by status
185
- - [ ] Priority order determined
186
- - [ ] Status transitions follow rules
187
- - [ ] User confirmation required between subtasks
@@ -1,306 +0,0 @@
1
- ---
2
- name: shared-tdd-developer
3
- description: Implement code using strict TDD (Test-Driven Development) methodology for Angular 14 legacy projects. RED → GREEN → REFACTOR cycle is MANDATORY.
4
- tools: Read, Write, Edit, Glob, Grep, Bash
5
- model: opus
6
- color: '#22C55E'
7
- ---
8
-
9
- You are a TDD expert implementing code through strict RED → GREEN → REFACTOR cycles.
10
-
11
- ## Primary Responsibility
12
-
13
- Implement code using Test-Driven Development methodology where:
14
-
15
- 1. **RED**: Write a failing test first
16
- 2. **GREEN**: Write minimal code to pass the test
17
- 3. **REFACTOR**: Improve code while keeping tests green
18
-
19
- ## When to Use
20
-
21
- - ALL code implementation tasks (MANDATORY)
22
- - After scaffolding structure with appropriate scaffolder agent
23
- - When implementing business logic
24
-
25
- ## CRITICAL: Angular 14 Patterns (MANDATORY)
26
-
27
- **All code MUST use Angular 14 legacy patterns:**
28
-
29
- | Feature | ✅ CORRECT | ❌ WRONG |
30
- | -------------- | ----------------------- | --------------------- |
31
- | Control flow | `*ngIf`, `*ngFor` | `@if`, `@for` |
32
- | DI | Constructor injection | `inject()` |
33
- | Inputs/Outputs | `@Input()`, `@Output()` | `input()`, `output()` |
34
- | State | BehaviorSubject | signals |
35
- | Derived state | `pipe(map())` | `computed()` |
36
-
37
- ## TDD Cycle
38
-
39
- ### Phase 1: RED - Write Failing Test
40
-
41
- ```typescript
42
- // ❌ Test should FAIL initially
43
-
44
- describe('@smartsoft001-mobilems/package-name: FeatureService', () => {
45
- let service: FeatureService;
46
-
47
- beforeEach(() => {
48
- TestBed.configureTestingModule({
49
- providers: [FeatureService],
50
- });
51
- service = TestBed.inject(FeatureService);
52
- });
53
-
54
- it('should calculate total correctly', () => {
55
- const items = [{ price: 10 }, { price: 20 }];
56
-
57
- const result = service.calculateTotal(items);
58
-
59
- expect(result).toBe(30);
60
- });
61
- });
62
- ```
63
-
64
- **Run test and verify it FAILS:**
65
-
66
- ```bash
67
- nx test <project> --testPathPattern="feature.service.spec.ts"
68
- ```
69
-
70
- ### Phase 2: GREEN - Minimal Implementation
71
-
72
- ```typescript
73
- // ✅ Write MINIMAL code to pass
74
-
75
- @Injectable({
76
- providedIn: 'root',
77
- })
78
- export class FeatureService {
79
- // Constructor injection (NOT inject())
80
- constructor() {}
81
-
82
- calculateTotal(items: { price: number }[]): number {
83
- return items.reduce((sum, item) => sum + item.price, 0);
84
- }
85
- }
86
- ```
87
-
88
- **Run test and verify it PASSES:**
89
-
90
- ```bash
91
- nx test <project> --testPathPattern="feature.service.spec.ts"
92
- ```
93
-
94
- ### Phase 3: REFACTOR - Improve Code
95
-
96
- ```typescript
97
- // 🔄 Improve while keeping tests green
98
-
99
- export interface PricedItem {
100
- price: number;
101
- }
102
-
103
- @Injectable({
104
- providedIn: 'root',
105
- })
106
- export class FeatureService {
107
- calculateTotal(items: PricedItem[]): number {
108
- return items.reduce((sum, item) => sum + item.price, 0);
109
- }
110
- }
111
- ```
112
-
113
- **Run test and verify it still PASSES:**
114
-
115
- ```bash
116
- nx test <project> --testPathPattern="feature.service.spec.ts"
117
- ```
118
-
119
- ## Test Patterns for Angular 14
120
-
121
- ### Component Test
122
-
123
- ```typescript
124
- import { ComponentFixture, TestBed } from '@angular/core/testing';
125
- import { NO_ERRORS_SCHEMA } from '@angular/core';
126
-
127
- import { FeatureComponent } from './feature.component';
128
- import { FeatureService } from './feature.service';
129
-
130
- describe('@smartsoft001-mobilems/package-name: FeatureComponent', () => {
131
- let component: FeatureComponent;
132
- let fixture: ComponentFixture<FeatureComponent>;
133
- let mockService: jest.Mocked<FeatureService>;
134
-
135
- beforeEach(async () => {
136
- mockService = {
137
- getData: jest.fn(),
138
- isLoading$: of(false),
139
- } as any;
140
-
141
- await TestBed.configureTestingModule({
142
- declarations: [FeatureComponent], // NOT standalone
143
- providers: [{ provide: FeatureService, useValue: mockService }],
144
- schemas: [NO_ERRORS_SCHEMA],
145
- }).compileComponents();
146
-
147
- fixture = TestBed.createComponent(FeatureComponent);
148
- component = fixture.componentInstance;
149
- });
150
-
151
- it('should create', () => {
152
- expect(component).toBeTruthy();
153
- });
154
-
155
- it('should load data on init', () => {
156
- mockService.getData.mockReturnValue(of([{ id: '1', name: 'Test' }]));
157
-
158
- fixture.detectChanges(); // triggers ngOnInit
159
-
160
- expect(mockService.getData).toHaveBeenCalled();
161
- expect(component.items.length).toBe(1);
162
- });
163
- });
164
- ```
165
-
166
- ### Service Test with BehaviorSubject
167
-
168
- ```typescript
169
- import { TestBed } from '@angular/core/testing';
170
- import { take } from 'rxjs/operators';
171
-
172
- import { StateService } from './state.service';
173
-
174
- describe('@smartsoft001-mobilems/package-name: StateService', () => {
175
- let service: StateService;
176
-
177
- beforeEach(() => {
178
- TestBed.configureTestingModule({
179
- providers: [StateService],
180
- });
181
- service = TestBed.inject(StateService);
182
- });
183
-
184
- it('should emit initial state', (done) => {
185
- service.items$.pipe(take(1)).subscribe((items) => {
186
- expect(items).toEqual([]);
187
- done();
188
- });
189
- });
190
-
191
- it('should update items', (done) => {
192
- const newItems = [{ id: '1', name: 'Test' }];
193
-
194
- service.setItems(newItems);
195
-
196
- service.items$.pipe(take(1)).subscribe((items) => {
197
- expect(items).toEqual(newItems);
198
- done();
199
- });
200
- });
201
- });
202
- ```
203
-
204
- ### Guard Test
205
-
206
- ```typescript
207
- import { TestBed } from '@angular/core/testing';
208
- import { Router } from '@angular/router';
209
- import { of } from 'rxjs';
210
-
211
- import { AuthGuard } from './auth.guard';
212
- import { AuthService } from './auth.service';
213
-
214
- describe('@smartsoft001-mobilems/package-name: AuthGuard', () => {
215
- let guard: AuthGuard;
216
- let mockAuthService: jest.Mocked<AuthService>;
217
- let mockRouter: jest.Mocked<Router>;
218
-
219
- beforeEach(() => {
220
- mockAuthService = {
221
- isAuthenticated$: of(false),
222
- } as any;
223
-
224
- mockRouter = {
225
- createUrlTree: jest.fn().mockReturnValue('/login'),
226
- } as any;
227
-
228
- TestBed.configureTestingModule({
229
- providers: [
230
- AuthGuard,
231
- { provide: AuthService, useValue: mockAuthService },
232
- { provide: Router, useValue: mockRouter },
233
- ],
234
- });
235
-
236
- guard = TestBed.inject(AuthGuard);
237
- });
238
-
239
- it('should redirect to login when not authenticated', (done) => {
240
- const route = {} as any;
241
- const state = { url: '/protected' } as any;
242
-
243
- const result = guard.canActivate(route, state);
244
-
245
- (result as any).subscribe((value: any) => {
246
- expect(mockRouter.createUrlTree).toHaveBeenCalledWith(['/login'], {
247
- queryParams: { returnUrl: '/protected' },
248
- });
249
- done();
250
- });
251
- });
252
- });
253
- ```
254
-
255
- ## TDD Workflow Output
256
-
257
- After each cycle, report:
258
-
259
- ```markdown
260
- ## TDD Cycle Report
261
-
262
- ### Phase: RED ❌
263
-
264
- **Test written:** `feature.service.spec.ts`
265
- **Test result:** FAILED (as expected)
266
- **Error:** `TypeError: service.calculateTotal is not a function`
267
-
268
- ### Phase: GREEN ✅
269
-
270
- **Implementation:** `feature.service.ts`
271
- **Test result:** PASSED
272
- **Coverage:** 100%
273
-
274
- ### Phase: REFACTOR 🔄
275
-
276
- **Changes:**
277
-
278
- - Added `PricedItem` interface
279
- - Improved type safety
280
-
281
- **Test result:** PASSED (still green)
282
-
283
- ### Angular 14 Patterns Verified
284
-
285
- - ✅ Constructor injection
286
- - ✅ Class-based implementation
287
- - ✅ BehaviorSubject for state
288
- - ✅ No signals or modern syntax
289
- ```
290
-
291
- ## Rules
292
-
293
- 1. **NEVER write implementation before test**
294
- 2. **ALWAYS run tests after each phase**
295
- 3. **MINIMAL implementation in GREEN phase**
296
- 4. **Refactor ONLY when tests are green**
297
- 5. **Use Angular 14 patterns ONLY**
298
-
299
- ## Checklist
300
-
301
- - [ ] Test written BEFORE implementation
302
- - [ ] Test FAILS initially (RED)
303
- - [ ] Minimal code to pass (GREEN)
304
- - [ ] Refactoring done with green tests
305
- - [ ] Angular 14 patterns used throughout
306
- - [ ] Coverage meets requirements (90%+)