@nguyenphp/antigravity-marketing 1.0.18 → 1.0.20

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 (231) hide show
  1. package/README.md +130 -78
  2. package/package.json +4 -3
  3. package/templates/.agent/skills/marketing-report-expert/SKILL.md +70 -0
  4. package/templates/.agent/skills/minimax-docx/LICENSE +21 -0
  5. package/templates/.agent/skills/minimax-docx/SKILL.md +274 -0
  6. package/templates/.agent/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
  7. package/templates/.agent/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
  8. package/templates/.agent/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
  9. package/templates/.agent/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
  10. package/templates/.agent/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
  11. package/templates/.agent/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
  12. package/templates/.agent/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
  13. package/templates/.agent/skills/minimax-docx/references/cjk_typography.md +357 -0
  14. package/templates/.agent/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
  15. package/templates/.agent/skills/minimax-docx/references/comments_guide.md +191 -0
  16. package/templates/.agent/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
  17. package/templates/.agent/skills/minimax-docx/references/design_principles.md +819 -0
  18. package/templates/.agent/skills/minimax-docx/references/openxml_element_order.md +308 -0
  19. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
  20. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
  21. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
  22. package/templates/.agent/skills/minimax-docx/references/openxml_namespaces.md +82 -0
  23. package/templates/.agent/skills/minimax-docx/references/openxml_units.md +72 -0
  24. package/templates/.agent/skills/minimax-docx/references/scenario_a_create.md +284 -0
  25. package/templates/.agent/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
  26. package/templates/.agent/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
  27. package/templates/.agent/skills/minimax-docx/references/track_changes_guide.md +200 -0
  28. package/templates/.agent/skills/minimax-docx/references/troubleshooting.md +506 -0
  29. package/templates/.agent/skills/minimax-docx/references/typography_guide.md +294 -0
  30. package/templates/.agent/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
  31. package/templates/.agent/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
  32. package/templates/.agent/skills/minimax-docx/scripts/docx_preview.sh +37 -0
  33. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
  34. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
  35. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
  36. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
  37. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
  38. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
  39. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
  40. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
  41. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
  42. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
  43. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
  44. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
  45. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
  46. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
  47. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
  48. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
  49. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
  50. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
  51. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
  52. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
  53. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
  54. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
  55. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
  56. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
  57. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
  58. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
  59. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
  60. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
  61. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
  62. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
  63. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
  64. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
  65. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
  66. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
  67. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
  68. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
  69. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
  70. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
  71. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
  72. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
  73. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
  74. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
  75. package/templates/.agent/skills/minimax-docx/scripts/env_check.sh +196 -0
  76. package/templates/.agent/skills/minimax-docx/scripts/setup.ps1 +274 -0
  77. package/templates/.agent/skills/minimax-docx/scripts/setup.sh +504 -0
  78. package/templates/.agent/skills/minimax-multimodal-toolkit/SKILL.md +359 -0
  79. package/templates/.agent/skills/minimax-pdf/README.md +222 -0
  80. package/templates/.agent/skills/minimax-pdf/SKILL.md +201 -0
  81. package/templates/.agent/skills/minimax-pdf/design/design.md +381 -0
  82. package/templates/.agent/skills/minimax-pdf/scripts/cover.py +1579 -0
  83. package/templates/.agent/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
  84. package/templates/.agent/skills/minimax-pdf/scripts/fill_write.py +242 -0
  85. package/templates/.agent/skills/minimax-pdf/scripts/make.sh +491 -0
  86. package/templates/.agent/skills/minimax-pdf/scripts/merge.py +112 -0
  87. package/templates/.agent/skills/minimax-pdf/scripts/palette.py +559 -0
  88. package/templates/.agent/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
  89. package/templates/.agent/skills/minimax-pdf/scripts/render_body.py +1055 -0
  90. package/templates/.agent/skills/minimax-pdf/scripts/render_cover.cjs +111 -0
  91. package/templates/.agent/skills/minimax-xlsx/SKILL.md +138 -0
  92. package/templates/.agent/skills/minimax-xlsx/references/create.md +691 -0
  93. package/templates/.agent/skills/minimax-xlsx/references/edit.md +684 -0
  94. package/templates/.agent/skills/minimax-xlsx/references/fix.md +37 -0
  95. package/templates/.agent/skills/minimax-xlsx/references/format.md +768 -0
  96. package/templates/.agent/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
  97. package/templates/.agent/skills/minimax-xlsx/references/read-analyze.md +97 -0
  98. package/templates/.agent/skills/minimax-xlsx/references/validate.md +772 -0
  99. package/templates/.agent/skills/minimax-xlsx/scripts/formula_check.py +422 -0
  100. package/templates/.agent/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
  101. package/templates/.agent/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
  102. package/templates/.agent/skills/minimax-xlsx/scripts/style_audit.py +575 -0
  103. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
  104. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
  105. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
  106. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
  107. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
  108. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
  109. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
  110. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
  111. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
  112. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
  113. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
  114. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
  115. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
  116. package/templates/.agent/skills/pptx-generator/SKILL.md +249 -0
  117. package/templates/.agent/skills/pptx-generator/references/design-system.md +392 -0
  118. package/templates/.agent/skills/pptx-generator/references/editing.md +162 -0
  119. package/templates/.agent/skills/pptx-generator/references/pitfalls.md +112 -0
  120. package/templates/.agent/skills/pptx-generator/references/pptxgenjs.md +420 -0
  121. package/templates/.agent/skills/pptx-generator/references/slide-types.md +413 -0
  122. package/templates/.agent/skills/tutorial-video-expert/SKILL.md +88 -0
  123. package/templates/.agent/skills/ui-ux-pro-max/SKILL.md +170 -585
  124. package/templates/.agent/skills/vision-analysis/SKILL.md +174 -0
  125. package/templates/.agent/workflows/analyze.md +3 -0
  126. package/templates/.agent/workflows/brand-report.md +44 -0
  127. package/templates/.agent/workflows/report.md +49 -0
  128. package/templates/.agent/agents/backend-specialist.md +0 -263
  129. package/templates/.agent/agents/database-architect.md +0 -226
  130. package/templates/.agent/agents/debugger.md +0 -225
  131. package/templates/.agent/agents/devops-engineer.md +0 -242
  132. package/templates/.agent/agents/frontend-specialist.md +0 -527
  133. package/templates/.agent/agents/game-developer.md +0 -162
  134. package/templates/.agent/agents/mobile-developer.md +0 -377
  135. package/templates/.agent/agents/penetration-tester.md +0 -188
  136. package/templates/.agent/agents/security-auditor.md +0 -170
  137. package/templates/.agent/agents/test-engineer.md +0 -158
  138. package/templates/.agent/skills/api-patterns/SKILL.md +0 -81
  139. package/templates/.agent/skills/api-patterns/api-style.md +0 -42
  140. package/templates/.agent/skills/api-patterns/auth.md +0 -24
  141. package/templates/.agent/skills/api-patterns/documentation.md +0 -26
  142. package/templates/.agent/skills/api-patterns/graphql.md +0 -41
  143. package/templates/.agent/skills/api-patterns/rate-limiting.md +0 -31
  144. package/templates/.agent/skills/api-patterns/response.md +0 -37
  145. package/templates/.agent/skills/api-patterns/rest.md +0 -40
  146. package/templates/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  147. package/templates/.agent/skills/api-patterns/security-testing.md +0 -122
  148. package/templates/.agent/skills/api-patterns/trpc.md +0 -41
  149. package/templates/.agent/skills/api-patterns/versioning.md +0 -22
  150. package/templates/.agent/skills/app-builder/SKILL.md +0 -75
  151. package/templates/.agent/skills/app-builder/agent-coordination.md +0 -71
  152. package/templates/.agent/skills/app-builder/feature-building.md +0 -53
  153. package/templates/.agent/skills/app-builder/project-detection.md +0 -34
  154. package/templates/.agent/skills/app-builder/scaffolding.md +0 -118
  155. package/templates/.agent/skills/app-builder/tech-stack.md +0 -40
  156. package/templates/.agent/skills/app-builder/templates/SKILL.md +0 -39
  157. package/templates/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  158. package/templates/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  159. package/templates/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  160. package/templates/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  161. package/templates/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  162. package/templates/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  163. package/templates/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  164. package/templates/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -82
  165. package/templates/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -100
  166. package/templates/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -106
  167. package/templates/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -101
  168. package/templates/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  169. package/templates/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -93
  170. package/templates/.agent/skills/architecture/SKILL.md +0 -55
  171. package/templates/.agent/skills/architecture/context-discovery.md +0 -43
  172. package/templates/.agent/skills/architecture/examples.md +0 -94
  173. package/templates/.agent/skills/architecture/pattern-selection.md +0 -68
  174. package/templates/.agent/skills/architecture/patterns-reference.md +0 -50
  175. package/templates/.agent/skills/architecture/trade-off-analysis.md +0 -77
  176. package/templates/.agent/skills/bash-linux/SKILL.md +0 -199
  177. package/templates/.agent/skills/behavioral-modes/SKILL.md +0 -242
  178. package/templates/.agent/skills/clean-code/SKILL.md +0 -201
  179. package/templates/.agent/skills/code-review-checklist/SKILL.md +0 -109
  180. package/templates/.agent/skills/database-design/SKILL.md +0 -52
  181. package/templates/.agent/skills/database-design/database-selection.md +0 -43
  182. package/templates/.agent/skills/database-design/indexing.md +0 -39
  183. package/templates/.agent/skills/database-design/migrations.md +0 -48
  184. package/templates/.agent/skills/database-design/optimization.md +0 -36
  185. package/templates/.agent/skills/database-design/orm-selection.md +0 -30
  186. package/templates/.agent/skills/database-design/schema-design.md +0 -56
  187. package/templates/.agent/skills/database-design/scripts/schema_validator.py +0 -172
  188. package/templates/.agent/skills/deployment-procedures/SKILL.md +0 -241
  189. package/templates/.agent/skills/docker-expert/SKILL.md +0 -409
  190. package/templates/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  191. package/templates/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  192. package/templates/.agent/skills/game-development/SKILL.md +0 -167
  193. package/templates/.agent/skills/game-development/game-art/SKILL.md +0 -185
  194. package/templates/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  195. package/templates/.agent/skills/game-development/game-design/SKILL.md +0 -129
  196. package/templates/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  197. package/templates/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  198. package/templates/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  199. package/templates/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  200. package/templates/.agent/skills/game-development/web-games/SKILL.md +0 -150
  201. package/templates/.agent/skills/lint-and-validate/SKILL.md +0 -45
  202. package/templates/.agent/skills/lint-and-validate/scripts/lint_runner.py +0 -172
  203. package/templates/.agent/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  204. package/templates/.agent/skills/mcp-builder/SKILL.md +0 -176
  205. package/templates/.agent/skills/nestjs-expert/SKILL.md +0 -552
  206. package/templates/.agent/skills/nextjs-best-practices/SKILL.md +0 -203
  207. package/templates/.agent/skills/nodejs-best-practices/SKILL.md +0 -333
  208. package/templates/.agent/skills/parallel-agents/SKILL.md +0 -175
  209. package/templates/.agent/skills/performance-profiling/SKILL.md +0 -143
  210. package/templates/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +0 -76
  211. package/templates/.agent/skills/powershell-windows/SKILL.md +0 -167
  212. package/templates/.agent/skills/prisma-expert/SKILL.md +0 -355
  213. package/templates/.agent/skills/python-patterns/SKILL.md +0 -441
  214. package/templates/.agent/skills/react-patterns/SKILL.md +0 -198
  215. package/templates/.agent/skills/red-team-tactics/SKILL.md +0 -199
  216. package/templates/.agent/skills/server-management/SKILL.md +0 -161
  217. package/templates/.agent/skills/systematic-debugging/SKILL.md +0 -109
  218. package/templates/.agent/skills/tdd-workflow/SKILL.md +0 -149
  219. package/templates/.agent/skills/testing-patterns/SKILL.md +0 -178
  220. package/templates/.agent/skills/testing-patterns/scripts/test_runner.py +0 -219
  221. package/templates/.agent/skills/typescript-expert/SKILL.md +0 -429
  222. package/templates/.agent/skills/vue-expert/SKILL.md +0 -374
  223. package/templates/.agent/skills/vulnerability-scanner/SKILL.md +0 -276
  224. package/templates/.agent/skills/vulnerability-scanner/checklists.md +0 -121
  225. package/templates/.agent/skills/vulnerability-scanner/scripts/security_scan.py +0 -458
  226. package/templates/.agent/skills/webapp-testing/SKILL.md +0 -187
  227. package/templates/.agent/skills/webapp-testing/scripts/playwright_runner.py +0 -173
  228. package/templates/.agent/workflows/debug.md +0 -103
  229. package/templates/.agent/workflows/deploy.md +0 -176
  230. package/templates/.agent/workflows/enhance.md +0 -63
  231. package/templates/.agent/workflows/test.md +0 -144
@@ -1,178 +0,0 @@
1
- ---
2
- name: testing-patterns
3
- description: Testing patterns and principles. Unit, integration, mocking strategies.
4
- allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5
- ---
6
-
7
- # Testing Patterns
8
-
9
- > Principles for reliable test suites.
10
-
11
- ---
12
-
13
- ## 1. Testing Pyramid
14
-
15
- ```
16
- /\ E2E (Few)
17
- / \ Critical flows
18
- /----\
19
- / \ Integration (Some)
20
- /--------\ API, DB queries
21
- / \
22
- /------------\ Unit (Many)
23
- Functions, classes
24
- ```
25
-
26
- ---
27
-
28
- ## 2. AAA Pattern
29
-
30
- | Step | Purpose |
31
- |------|---------|
32
- | **Arrange** | Set up test data |
33
- | **Act** | Execute code under test |
34
- | **Assert** | Verify outcome |
35
-
36
- ---
37
-
38
- ## 3. Test Type Selection
39
-
40
- ### When to Use Each
41
-
42
- | Type | Best For | Speed |
43
- |------|----------|-------|
44
- | **Unit** | Pure functions, logic | Fast (<50ms) |
45
- | **Integration** | API, DB, services | Medium |
46
- | **E2E** | Critical user flows | Slow |
47
-
48
- ---
49
-
50
- ## 4. Unit Test Principles
51
-
52
- ### Good Unit Tests
53
-
54
- | Principle | Meaning |
55
- |-----------|---------|
56
- | Fast | < 100ms each |
57
- | Isolated | No external deps |
58
- | Repeatable | Same result always |
59
- | Self-checking | No manual verification |
60
- | Timely | Written with code |
61
-
62
- ### What to Unit Test
63
-
64
- | Test | Don't Test |
65
- |------|------------|
66
- | Business logic | Framework code |
67
- | Edge cases | Third-party libs |
68
- | Error handling | Simple getters |
69
-
70
- ---
71
-
72
- ## 5. Integration Test Principles
73
-
74
- ### What to Test
75
-
76
- | Area | Focus |
77
- |------|-------|
78
- | API endpoints | Request/response |
79
- | Database | Queries, transactions |
80
- | External services | Contracts |
81
-
82
- ### Setup/Teardown
83
-
84
- | Phase | Action |
85
- |-------|--------|
86
- | Before All | Connect resources |
87
- | Before Each | Reset state |
88
- | After Each | Clean up |
89
- | After All | Disconnect |
90
-
91
- ---
92
-
93
- ## 6. Mocking Principles
94
-
95
- ### When to Mock
96
-
97
- | Mock | Don't Mock |
98
- |------|------------|
99
- | External APIs | The code under test |
100
- | Database (unit) | Simple dependencies |
101
- | Time/random | Pure functions |
102
- | Network | In-memory stores |
103
-
104
- ### Mock Types
105
-
106
- | Type | Use |
107
- |------|-----|
108
- | Stub | Return fixed values |
109
- | Spy | Track calls |
110
- | Mock | Set expectations |
111
- | Fake | Simplified implementation |
112
-
113
- ---
114
-
115
- ## 7. Test Organization
116
-
117
- ### Naming
118
-
119
- | Pattern | Example |
120
- |---------|---------|
121
- | Should behavior | "should return error when..." |
122
- | When condition | "when user not found..." |
123
- | Given-when-then | "given X, when Y, then Z" |
124
-
125
- ### Grouping
126
-
127
- | Level | Use |
128
- |-------|-----|
129
- | describe | Group related tests |
130
- | it/test | Individual case |
131
- | beforeEach | Common setup |
132
-
133
- ---
134
-
135
- ## 8. Test Data
136
-
137
- ### Strategies
138
-
139
- | Approach | Use |
140
- |----------|-----|
141
- | Factories | Generate test data |
142
- | Fixtures | Predefined datasets |
143
- | Builders | Fluent object creation |
144
-
145
- ### Principles
146
-
147
- - Use realistic data
148
- - Randomize non-essential values (faker)
149
- - Share common fixtures
150
- - Keep data minimal
151
-
152
- ---
153
-
154
- ## 9. Best Practices
155
-
156
- | Practice | Why |
157
- |----------|-----|
158
- | One assert per test | Clear failure reason |
159
- | Independent tests | No order dependency |
160
- | Fast tests | Run frequently |
161
- | Descriptive names | Self-documenting |
162
- | Clean up | Avoid side effects |
163
-
164
- ---
165
-
166
- ## 10. Anti-Patterns
167
-
168
- | ❌ Don't | ✅ Do |
169
- |----------|-------|
170
- | Test implementation | Test behavior |
171
- | Duplicate test code | Use factories |
172
- | Complex test setup | Simplify or split |
173
- | Ignore flaky tests | Fix root cause |
174
- | Skip cleanup | Reset state |
175
-
176
- ---
177
-
178
- > **Remember:** Tests are documentation. If someone can't understand what the code does from the tests, rewrite them.
@@ -1,219 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Test Runner - Unified test execution and coverage reporting
4
- Runs tests and generates coverage report based on project type.
5
-
6
- Usage:
7
- python test_runner.py <project_path> [--coverage]
8
-
9
- Supports:
10
- - Node.js: npm test, jest, vitest
11
- - Python: pytest, unittest
12
- """
13
-
14
- import subprocess
15
- import sys
16
- import json
17
- from pathlib import Path
18
- from datetime import datetime
19
-
20
- # Fix Windows console encoding
21
- try:
22
- sys.stdout.reconfigure(encoding='utf-8', errors='replace')
23
- except:
24
- pass
25
-
26
-
27
- def detect_test_framework(project_path: Path) -> dict:
28
- """Detect test framework and commands."""
29
- result = {
30
- "type": "unknown",
31
- "framework": None,
32
- "cmd": None,
33
- "coverage_cmd": None
34
- }
35
-
36
- # Node.js project
37
- package_json = project_path / "package.json"
38
- if package_json.exists():
39
- result["type"] = "node"
40
- try:
41
- pkg = json.loads(package_json.read_text(encoding='utf-8'))
42
- scripts = pkg.get("scripts", {})
43
- deps = {**pkg.get("dependencies", {}), **pkg.get("devDependencies", {})}
44
-
45
- # Check for test script
46
- if "test" in scripts:
47
- result["framework"] = "npm test"
48
- result["cmd"] = ["npm", "test"]
49
-
50
- # Try to detect specific framework for coverage
51
- if "vitest" in deps:
52
- result["framework"] = "vitest"
53
- result["coverage_cmd"] = ["npx", "vitest", "run", "--coverage"]
54
- elif "jest" in deps:
55
- result["framework"] = "jest"
56
- result["coverage_cmd"] = ["npx", "jest", "--coverage"]
57
- elif "vitest" in deps:
58
- result["framework"] = "vitest"
59
- result["cmd"] = ["npx", "vitest", "run"]
60
- result["coverage_cmd"] = ["npx", "vitest", "run", "--coverage"]
61
- elif "jest" in deps:
62
- result["framework"] = "jest"
63
- result["cmd"] = ["npx", "jest"]
64
- result["coverage_cmd"] = ["npx", "jest", "--coverage"]
65
-
66
- except:
67
- pass
68
-
69
- # Python project
70
- if (project_path / "pyproject.toml").exists() or (project_path / "requirements.txt").exists():
71
- result["type"] = "python"
72
- result["framework"] = "pytest"
73
- result["cmd"] = ["python", "-m", "pytest", "-v"]
74
- result["coverage_cmd"] = ["python", "-m", "pytest", "--cov", "--cov-report=term-missing"]
75
-
76
- return result
77
-
78
-
79
- def run_tests(cmd: list, cwd: Path) -> dict:
80
- """Run tests and return results."""
81
- result = {
82
- "passed": False,
83
- "output": "",
84
- "error": "",
85
- "tests_run": 0,
86
- "tests_passed": 0,
87
- "tests_failed": 0
88
- }
89
-
90
- try:
91
- proc = subprocess.run(
92
- cmd,
93
- cwd=str(cwd),
94
- capture_output=True,
95
- text=True,
96
- encoding='utf-8',
97
- errors='replace',
98
- timeout=300 # 5 min timeout for tests
99
- )
100
-
101
- result["output"] = proc.stdout[:3000] if proc.stdout else ""
102
- result["error"] = proc.stderr[:500] if proc.stderr else ""
103
- result["passed"] = proc.returncode == 0
104
-
105
- # Try to parse test counts from output
106
- output = proc.stdout or ""
107
-
108
- # Jest/Vitest pattern: "Tests: X passed, Y failed, Z total"
109
- if "passed" in output.lower() and "failed" in output.lower():
110
- import re
111
- match = re.search(r'(\d+)\s+passed', output, re.IGNORECASE)
112
- if match:
113
- result["tests_passed"] = int(match.group(1))
114
- match = re.search(r'(\d+)\s+failed', output, re.IGNORECASE)
115
- if match:
116
- result["tests_failed"] = int(match.group(1))
117
- result["tests_run"] = result["tests_passed"] + result["tests_failed"]
118
-
119
- # Pytest pattern: "X passed, Y failed"
120
- if "pytest" in str(cmd):
121
- import re
122
- match = re.search(r'(\d+)\s+passed', output)
123
- if match:
124
- result["tests_passed"] = int(match.group(1))
125
- match = re.search(r'(\d+)\s+failed', output)
126
- if match:
127
- result["tests_failed"] = int(match.group(1))
128
- result["tests_run"] = result["tests_passed"] + result["tests_failed"]
129
-
130
- except FileNotFoundError:
131
- result["error"] = f"Command not found: {cmd[0]}"
132
- except subprocess.TimeoutExpired:
133
- result["error"] = "Timeout after 300s"
134
- except Exception as e:
135
- result["error"] = str(e)
136
-
137
- return result
138
-
139
-
140
- def main():
141
- project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
142
- with_coverage = "--coverage" in sys.argv
143
-
144
- print(f"\n{'='*60}")
145
- print(f"[TEST RUNNER] Unified Test Execution")
146
- print(f"{'='*60}")
147
- print(f"Project: {project_path}")
148
- print(f"Coverage: {'enabled' if with_coverage else 'disabled'}")
149
- print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
150
-
151
- # Detect test framework
152
- test_info = detect_test_framework(project_path)
153
- print(f"Type: {test_info['type']}")
154
- print(f"Framework: {test_info['framework']}")
155
- print("-"*60)
156
-
157
- if not test_info["cmd"]:
158
- print("No test framework found for this project.")
159
- output = {
160
- "script": "test_runner",
161
- "project": str(project_path),
162
- "type": test_info["type"],
163
- "framework": None,
164
- "passed": True,
165
- "message": "No tests configured"
166
- }
167
- print(json.dumps(output, indent=2))
168
- sys.exit(0)
169
-
170
- # Choose command
171
- cmd = test_info["coverage_cmd"] if with_coverage and test_info["coverage_cmd"] else test_info["cmd"]
172
-
173
- print(f"Running: {' '.join(cmd)}")
174
- print("-"*60)
175
-
176
- # Run tests
177
- result = run_tests(cmd, project_path)
178
-
179
- # Print output (truncated)
180
- if result["output"]:
181
- lines = result["output"].split("\n")
182
- for line in lines[:30]:
183
- print(line)
184
- if len(lines) > 30:
185
- print(f"... ({len(lines) - 30} more lines)")
186
-
187
- # Summary
188
- print("\n" + "="*60)
189
- print("SUMMARY")
190
- print("="*60)
191
-
192
- if result["passed"]:
193
- print("[PASS] All tests passed")
194
- else:
195
- print("[FAIL] Some tests failed")
196
- if result["error"]:
197
- print(f"Error: {result['error'][:200]}")
198
-
199
- if result["tests_run"] > 0:
200
- print(f"Tests: {result['tests_run']} total, {result['tests_passed']} passed, {result['tests_failed']} failed")
201
-
202
- output = {
203
- "script": "test_runner",
204
- "project": str(project_path),
205
- "type": test_info["type"],
206
- "framework": test_info["framework"],
207
- "tests_run": result["tests_run"],
208
- "tests_passed": result["tests_passed"],
209
- "tests_failed": result["tests_failed"],
210
- "passed": result["passed"]
211
- }
212
-
213
- print("\n" + json.dumps(output, indent=2))
214
-
215
- sys.exit(0 if result["passed"] else 1)
216
-
217
-
218
- if __name__ == "__main__":
219
- main()