@mytechtoday/augment-extensions 0.7.0 → 1.2.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 (483) hide show
  1. package/AGENTS.md +265 -232
  2. package/README.md +956 -771
  3. package/augment-extensions/coding-standards/bash/README.md +196 -196
  4. package/augment-extensions/coding-standards/bash/module.json +163 -163
  5. package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
  6. package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
  7. package/augment-extensions/coding-standards/css/README.md +40 -40
  8. package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
  9. package/augment-extensions/coding-standards/css/module.json +44 -44
  10. package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
  11. package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
  12. package/augment-extensions/coding-standards/html/README.md +40 -40
  13. package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
  14. package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
  15. package/augment-extensions/coding-standards/html/module.json +44 -44
  16. package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
  17. package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
  18. package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
  19. package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
  20. package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
  21. package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
  22. package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
  23. package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
  24. package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
  25. package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
  26. package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
  27. package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
  28. package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
  29. package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
  30. package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
  31. package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
  32. package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
  33. package/augment-extensions/coding-standards/js/README.md +46 -46
  34. package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
  35. package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
  36. package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
  37. package/augment-extensions/coding-standards/js/module.json +49 -49
  38. package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
  39. package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
  40. package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
  41. package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
  42. package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
  43. package/augment-extensions/coding-standards/php/README.md +248 -248
  44. package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
  45. package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
  46. package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
  47. package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
  48. package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
  49. package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
  50. package/augment-extensions/coding-standards/php/module.json +166 -166
  51. package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
  52. package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
  53. package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
  54. package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
  55. package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
  56. package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
  57. package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
  58. package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
  59. package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
  60. package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
  61. package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
  62. package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
  63. package/augment-extensions/coding-standards/php/rules/security.md +358 -358
  64. package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
  65. package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
  66. package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
  67. package/augment-extensions/coding-standards/powershell/README.md +154 -154
  68. package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
  69. package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
  70. package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
  71. package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
  72. package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
  73. package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
  74. package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
  75. package/augment-extensions/coding-standards/powershell/module.json +165 -165
  76. package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
  77. package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
  78. package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
  79. package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
  80. package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
  81. package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
  82. package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
  83. package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
  84. package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
  85. package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
  86. package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
  87. package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
  88. package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
  89. package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
  90. package/augment-extensions/coding-standards/python/README.md +48 -48
  91. package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
  92. package/augment-extensions/coding-standards/python/module.json +30 -30
  93. package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
  94. package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
  95. package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
  96. package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
  97. package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
  98. package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
  99. package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
  100. package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
  101. package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
  102. package/augment-extensions/coding-standards/react/README.md +45 -45
  103. package/augment-extensions/coding-standards/react/module.json +27 -27
  104. package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
  105. package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
  106. package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
  107. package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
  108. package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
  109. package/augment-extensions/coding-standards/typescript/README.md +45 -45
  110. package/augment-extensions/coding-standards/typescript/module.json +27 -27
  111. package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
  112. package/augment-extensions/collections/html-css-js/README.md +82 -82
  113. package/augment-extensions/collections/html-css-js/collection.json +41 -41
  114. package/augment-extensions/domain-rules/api-design/README.md +41 -41
  115. package/augment-extensions/domain-rules/api-design/module.json +27 -27
  116. package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
  117. package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
  118. package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
  119. package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
  120. package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
  121. package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
  122. package/augment-extensions/domain-rules/database/README.md +161 -161
  123. package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
  124. package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
  125. package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
  126. package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
  127. package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
  128. package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
  129. package/augment-extensions/domain-rules/database/module.json +28 -28
  130. package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
  131. package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
  132. package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
  133. package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
  134. package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
  135. package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
  136. package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
  137. package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
  138. package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
  139. package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
  140. package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
  141. package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
  142. package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
  143. package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
  144. package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
  145. package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
  146. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
  147. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
  148. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
  149. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
  150. package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
  151. package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
  152. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
  153. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
  154. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
  155. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
  156. package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
  157. package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
  158. package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
  159. package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
  160. package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
  161. package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
  162. package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
  163. package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
  164. package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
  165. package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
  166. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
  167. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
  168. package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
  169. package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
  170. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
  171. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
  172. package/augment-extensions/domain-rules/mcp/README.md +150 -150
  173. package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
  174. package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
  175. package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
  176. package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
  177. package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
  178. package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
  179. package/augment-extensions/domain-rules/mcp/module.json +49 -49
  180. package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
  181. package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
  182. package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
  183. package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
  184. package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
  185. package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
  186. package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
  187. package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
  188. package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
  189. package/augment-extensions/domain-rules/security/README.md +41 -41
  190. package/augment-extensions/domain-rules/security/module.json +28 -28
  191. package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
  192. package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
  193. package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
  194. package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
  195. package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
  196. package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
  197. package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
  198. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
  199. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
  200. package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
  201. package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
  202. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
  203. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
  204. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
  205. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
  206. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
  207. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
  208. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
  209. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
  210. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
  211. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
  212. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
  213. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
  214. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
  215. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
  216. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
  217. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
  218. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
  219. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
  220. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
  221. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
  222. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
  223. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
  224. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
  225. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
  226. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
  227. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
  228. package/augment-extensions/domain-rules/wordpress/README.md +163 -163
  229. package/augment-extensions/domain-rules/wordpress/module.json +32 -32
  230. package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
  231. package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
  232. package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
  233. package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
  234. package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
  235. package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
  236. package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
  237. package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
  238. package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
  239. package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
  240. package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
  241. package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
  242. package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
  243. package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
  244. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
  245. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
  246. package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
  247. package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
  248. package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
  249. package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
  250. package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
  251. package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
  252. package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
  253. package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
  254. package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
  255. package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
  256. package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
  257. package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
  258. package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
  259. package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
  260. package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
  261. package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
  262. package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
  263. package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
  264. package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
  265. package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
  266. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
  267. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
  268. package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
  269. package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
  270. package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
  271. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
  272. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
  273. package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
  274. package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
  275. package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
  276. package/augment-extensions/examples/design-patterns/README.md +37 -37
  277. package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
  278. package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
  279. package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
  280. package/augment-extensions/examples/design-patterns/module.json +27 -27
  281. package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
  282. package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
  283. package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
  284. package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
  285. package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
  286. package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
  287. package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
  288. package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
  289. package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
  290. package/augment-extensions/workflows/beads/README.md +135 -135
  291. package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
  292. package/augment-extensions/workflows/beads/module.json +55 -55
  293. package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
  294. package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
  295. package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
  296. package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
  297. package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
  298. package/augment-extensions/workflows/beads-integration/README.md +143 -143
  299. package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
  300. package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
  301. package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
  302. package/augment-extensions/workflows/beads-integration/module.json +75 -75
  303. package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
  304. package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
  305. package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
  306. package/augment-extensions/workflows/database/README.md +195 -195
  307. package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
  308. package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
  309. package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
  310. package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
  311. package/augment-extensions/workflows/database/module.json +42 -42
  312. package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
  313. package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
  314. package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
  315. package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
  316. package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
  317. package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
  318. package/augment-extensions/workflows/database/rules/workflow.md +458 -458
  319. package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
  320. package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
  321. package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
  322. package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
  323. package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
  324. package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
  325. package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
  326. package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
  327. package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
  328. package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
  329. package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
  330. package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
  331. package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
  332. package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
  333. package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
  334. package/augment-extensions/writing-standards/screenplay/README.md +339 -300
  335. package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
  336. package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
  337. package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
  338. package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
  339. package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
  340. package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
  341. package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
  342. package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
  343. package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
  344. package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
  345. package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
  346. package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
  347. package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
  348. package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
  349. package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
  350. package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
  351. package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
  352. package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
  353. package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
  354. package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
  355. package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
  356. package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
  357. package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
  358. package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
  359. package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
  360. package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
  361. package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
  362. package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
  363. package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
  364. package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
  365. package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
  366. package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
  367. package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
  368. package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
  369. package/augment-extensions/writing-standards/screenplay/module.json +124 -124
  370. package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
  371. package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
  372. package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
  373. package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
  374. package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
  375. package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
  376. package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
  377. package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
  378. package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
  379. package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
  380. package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
  381. package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
  382. package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
  383. package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
  384. package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
  385. package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
  386. package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
  387. package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
  388. package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
  389. package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
  390. package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
  391. package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
  392. package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
  393. package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
  394. package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
  395. package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
  396. package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
  397. package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
  398. package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
  399. package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
  400. package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
  401. package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
  402. package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
  403. package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
  404. package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
  405. package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
  406. package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
  407. package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
  408. package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
  409. package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
  410. package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
  411. package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
  412. package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
  413. package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
  414. package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
  415. package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
  416. package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
  417. package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
  418. package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
  419. package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
  420. package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
  421. package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
  422. package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
  423. package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
  424. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
  425. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
  426. package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
  427. package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
  428. package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
  429. package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
  430. package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
  431. package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
  432. package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
  433. package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
  434. package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
  435. package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
  436. package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
  437. package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
  438. package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
  439. package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
  440. package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
  441. package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
  442. package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
  443. package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
  444. package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
  445. package/cli/MODULES.md +302 -302
  446. package/cli/dist/cli.js +109 -22
  447. package/cli/dist/cli.js.map +1 -1
  448. package/cli/dist/commands/gui.d.ts.map +1 -1
  449. package/cli/dist/commands/gui.js +54 -6
  450. package/cli/dist/commands/gui.js.map +1 -1
  451. package/cli/dist/commands/init.d.ts.map +1 -1
  452. package/cli/dist/commands/init.js +76 -23
  453. package/cli/dist/commands/init.js.map +1 -1
  454. package/cli/dist/commands/self-remove.d.ts.map +1 -1
  455. package/cli/dist/commands/self-remove.js +48 -74
  456. package/cli/dist/commands/self-remove.js.map +1 -1
  457. package/cli/dist/commands/show.d.ts +11 -0
  458. package/cli/dist/commands/show.d.ts.map +1 -1
  459. package/cli/dist/commands/show.js +120 -0
  460. package/cli/dist/commands/show.js.map +1 -1
  461. package/cli/dist/commands/showCompleted.d.ts +21 -0
  462. package/cli/dist/commands/showCompleted.d.ts.map +1 -0
  463. package/cli/dist/commands/showCompleted.js +225 -0
  464. package/cli/dist/commands/showCompleted.js.map +1 -0
  465. package/cli/dist/commands/skill.js +88 -88
  466. package/cli/dist/commands/update.d.ts +2 -0
  467. package/cli/dist/commands/update.d.ts.map +1 -1
  468. package/cli/dist/commands/update.js +67 -1
  469. package/cli/dist/commands/update.js.map +1 -1
  470. package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
  471. package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
  472. package/cli/dist/utils/beadsCompletedChecker.js +198 -0
  473. package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
  474. package/cli/dist/utils/catalog-sync.js +13 -13
  475. package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
  476. package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
  477. package/cli/dist/utils/extractCommandHelp.js +250 -0
  478. package/cli/dist/utils/extractCommandHelp.js.map +1 -0
  479. package/cli/dist/utils/install-rules.js +55 -55
  480. package/cli/dist/utils/mcp-integration.js +44 -44
  481. package/cli/dist/utils/rule-install-hooks.js +8 -8
  482. package/modules.md +667 -630
  483. package/package.json +85 -85
@@ -1,775 +1,775 @@
1
- # WordPress Plugin Testing Workflow
2
-
3
- ## Overview
4
-
5
- This workflow guides you through setting up and running comprehensive tests for WordPress plugins using PHPUnit, WordPress Test Suite, and CI/CD integration.
6
-
7
- ## Prerequisites
8
-
9
- - WordPress plugin with code to test
10
- - Composer installed
11
- - Local WordPress development environment
12
- - Basic understanding of PHPUnit
13
- - Domain rules: `domain-rules/wordpress-plugin/testing-patterns.md`
14
-
15
- ## Workflow Steps
16
-
17
- ### 1. Initial Test Environment Setup
18
-
19
- **Step 1.1: Install PHPUnit via Composer**
20
-
21
- ```bash
22
- # Navigate to plugin directory
23
- cd wp-content/plugins/your-plugin
24
-
25
- # Initialize composer if not already done
26
- composer init
27
-
28
- # Install PHPUnit
29
- composer require --dev phpunit/phpunit ^9.0
30
-
31
- # Install WordPress test library
32
- composer require --dev yoast/phpunit-polyfills
33
- ```
34
-
35
- **Step 1.2: Install WordPress Test Suite**
36
-
37
- ```bash
38
- # Install WordPress test suite
39
- bash bin/install-wp-tests.sh wordpress_test root '' localhost latest
40
-
41
- # Or for specific WordPress version
42
- bash bin/install-wp-tests.sh wordpress_test root '' localhost 6.4
43
- ```
44
-
45
- **Step 1.3: Create Test Bootstrap File**
46
-
47
- ```php
48
- // tests/bootstrap.php
49
- <?php
50
- /**
51
- * PHPUnit bootstrap file
52
- */
53
-
54
- // Composer autoloader
55
- require_once dirname( dirname( __FILE__ ) ) . '/vendor/autoload.php';
56
-
57
- // WordPress tests directory
58
- $_tests_dir = getenv( 'WP_TESTS_DIR' );
59
-
60
- if ( ! $_tests_dir ) {
61
- $_tests_dir = rtrim( sys_get_temp_dir(), '/\\' ) . '/wordpress-tests-lib';
62
- }
63
-
64
- if ( ! file_exists( $_tests_dir . '/includes/functions.php' ) ) {
65
- echo "Could not find $_tests_dir/includes/functions.php\n";
66
- exit( 1 );
67
- }
68
-
69
- // Give access to tests_add_filter() function
70
- require_once $_tests_dir . '/includes/functions.php';
71
-
72
- /**
73
- * Manually load the plugin being tested
74
- */
75
- function _manually_load_plugin() {
76
- require dirname( dirname( __FILE__ ) ) . '/your-plugin.php';
77
- }
78
- tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
79
-
80
- // Start up the WP testing environment
81
- require $_tests_dir . '/includes/bootstrap.php';
82
- ```
83
-
84
- **Step 1.4: Create PHPUnit Configuration**
85
-
86
- ```xml
87
- <!-- phpunit.xml.dist -->
88
- <?xml version="1.0"?>
89
- <phpunit
90
- bootstrap="tests/bootstrap.php"
91
- backupGlobals="false"
92
- colors="true"
93
- convertErrorsToExceptions="true"
94
- convertNoticesToExceptions="true"
95
- convertWarningsToExceptions="true"
96
- >
97
- <testsuites>
98
- <testsuite name="unit">
99
- <directory prefix="test-" suffix=".php">./tests/unit/</directory>
100
- </testsuite>
101
- <testsuite name="integration">
102
- <directory prefix="test-" suffix=".php">./tests/integration/</directory>
103
- </testsuite>
104
- </testsuites>
105
- <coverage processUncoveredFiles="true">
106
- <include>
107
- <directory suffix=".php">./includes</directory>
108
- <directory suffix=".php">./admin</directory>
109
- <directory suffix=".php">./public</directory>
110
- </include>
111
- <exclude>
112
- <directory>./vendor</directory>
113
- <directory>./tests</directory>
114
- </exclude>
115
- </coverage>
116
- <php>
117
- <env name="WP_TESTS_DIR" value="/tmp/wordpress-tests-lib" />
118
- </php>
119
- </phpunit>
120
- ```
121
-
122
- **Step 1.5: Create Test Directory Structure**
123
-
124
- ```bash
125
- mkdir -p tests/unit
126
- mkdir -p tests/integration
127
- mkdir -p tests/fixtures
128
- mkdir -p tests/mocks
129
- ```
130
-
131
- ### 2. Test-Driven Development Workflow
132
-
133
- **Step 2.1: Write Test First (Red)**
134
-
135
- ```php
136
- // tests/unit/test-feature.php
137
- class Test_Feature extends WP_UnitTestCase {
138
-
139
- public function test_feature_processes_data_correctly() {
140
- $feature = new Plugin_Feature();
141
- $input = array( 'key' => 'value' );
142
- $expected = array( 'key' => 'processed_value' );
143
-
144
- $result = $feature->process_data( $input );
145
-
146
- $this->assertEquals( $expected, $result );
147
- }
148
- }
149
- ```
150
-
151
- Run test (should fail):
152
- ```bash
153
- vendor/bin/phpunit tests/unit/test-feature.php
154
- ```
155
-
156
- **Step 2.2: Implement Feature (Green)**
157
-
158
- ```php
159
- // includes/feature.php
160
- class Plugin_Feature {
161
- public function process_data( $data ) {
162
- return array( 'key' => 'processed_value' );
163
- }
164
- }
165
- ```
166
-
167
- Run test (should pass):
168
- ```bash
169
- vendor/bin/phpunit tests/unit/test-feature.php
170
- ```
171
-
172
- **Step 2.3: Refactor (Refactor)**
173
-
174
- Improve code quality while keeping tests passing.
175
-
176
- ### 3. Running Tests During Development
177
-
178
- **Run All Tests**:
179
-
180
- ```bash
181
- # Run all tests
182
- vendor/bin/phpunit
183
-
184
- # Run with verbose output
185
- vendor/bin/phpunit --verbose
186
-
187
- # Run with debug output
188
- vendor/bin/phpunit --debug
189
- ```
190
-
191
- **Run Specific Test Suites**:
192
-
193
- ```bash
194
- # Run only unit tests
195
- vendor/bin/phpunit --testsuite unit
196
-
197
- # Run only integration tests
198
- vendor/bin/phpunit --testsuite integration
199
- ```
200
-
201
- **Run Specific Test Files**:
202
-
203
- ```bash
204
- # Run specific test file
205
- vendor/bin/phpunit tests/unit/test-feature.php
206
-
207
- # Run specific test class
208
- vendor/bin/phpunit --filter Test_Feature
209
-
210
- # Run specific test method
211
- vendor/bin/phpunit --filter test_feature_processes_data_correctly
212
- ```
213
-
214
- **Run Tests with Coverage**:
215
-
216
- ```bash
217
- # Generate HTML coverage report
218
- vendor/bin/phpunit --coverage-html coverage/
219
-
220
- # Generate text coverage report
221
- vendor/bin/phpunit --coverage-text
222
-
223
- # Generate coverage with minimum threshold
224
- vendor/bin/phpunit --coverage-text --coverage-filter includes/ --coverage-clover coverage.xml
225
- ```
226
-
227
- ### 4. Writing Different Types of Tests
228
-
229
- **Unit Tests** (test in isolation):
230
-
231
- ```php
232
- class Test_Data_Processor extends WP_UnitTestCase {
233
-
234
- private $processor;
235
-
236
- public function setUp(): void {
237
- parent::setUp();
238
- $this->processor = new Data_Processor();
239
- }
240
-
241
- public function test_sanitizes_input() {
242
- $input = '<script>alert("xss")</script>Test';
243
- $expected = 'alert("xss")Test';
244
-
245
- $result = $this->processor->sanitize( $input );
246
-
247
- $this->assertEquals( $expected, $result );
248
- }
249
- }
250
- ```
251
-
252
- **Integration Tests** (test with WordPress):
253
-
254
- ```php
255
- class Test_Post_Handler_Integration extends WP_UnitTestCase {
256
-
257
- public function test_creates_post_with_meta() {
258
- $handler = new Post_Handler();
259
-
260
- $post_id = $handler->create_post( array(
261
- 'title' => 'Test Post',
262
- 'meta' => array( 'key' => 'value' ),
263
- ) );
264
-
265
- $this->assertGreaterThan( 0, $post_id );
266
- $this->assertEquals( 'value', get_post_meta( $post_id, 'key', true ) );
267
- }
268
- }
269
- ```
270
-
271
- **AJAX Tests**:
272
-
273
- ```php
274
- class Test_AJAX_Handler extends WP_Ajax_UnitTestCase {
275
-
276
- public function test_ajax_action_success() {
277
- // Set up request
278
- $_POST['action'] = 'my_ajax_action';
279
- $_POST['nonce'] = wp_create_nonce( 'my_nonce' );
280
- $_POST['data'] = 'test_data';
281
-
282
- // Set current user
283
- wp_set_current_user( $this->factory->user->create( array( 'role' => 'administrator' ) ) );
284
-
285
- // Make AJAX request
286
- try {
287
- $this->_handleAjax( 'my_ajax_action' );
288
- } catch ( WPAjaxDieContinueException $e ) {
289
- // Expected exception
290
- }
291
-
292
- // Assert response
293
- $response = json_decode( $this->_last_response );
294
- $this->assertTrue( $response->success );
295
- }
296
- }
297
- ```
298
-
299
- **Database Tests**:
300
-
301
- ```php
302
- class Test_Database_Operations extends WP_UnitTestCase {
303
-
304
- private $table_name;
305
-
306
- public function setUp(): void {
307
- parent::setUp();
308
- global $wpdb;
309
- $this->table_name = $wpdb->prefix . 'custom_table';
310
- }
311
-
312
- public function test_inserts_data() {
313
- global $wpdb;
314
-
315
- $data = array(
316
- 'column1' => 'value1',
317
- 'column2' => 'value2',
318
- );
319
-
320
- $result = $wpdb->insert( $this->table_name, $data );
321
-
322
- $this->assertNotFalse( $result );
323
- $this->assertEquals( 1, $wpdb->insert_id );
324
- }
325
- }
326
- ```
327
-
328
- ### 5. Using Test Factories
329
-
330
- **Create Test Data**:
331
-
332
- ```php
333
- class Test_With_Factories extends WP_UnitTestCase {
334
-
335
- public function test_with_posts() {
336
- // Create posts
337
- $post_ids = $this->factory->post->create_many( 5 );
338
-
339
- $this->assertCount( 5, $post_ids );
340
- }
341
-
342
- public function test_with_users() {
343
- // Create user
344
- $user_id = $this->factory->user->create( array(
345
- 'role' => 'editor',
346
- 'user_email' => 'test@example.com',
347
- ) );
348
-
349
- $user = get_user_by( 'id', $user_id );
350
- $this->assertEquals( 'editor', $user->roles[0] );
351
- }
352
-
353
- public function test_with_terms() {
354
- // Create taxonomy terms
355
- $term_ids = $this->factory->term->create_many( 3, array(
356
- 'taxonomy' => 'category',
357
- ) );
358
-
359
- $this->assertCount( 3, $term_ids );
360
- }
361
- }
362
- ```
363
-
364
- ### 6. Mocking and Stubbing
365
-
366
- **Mock WordPress Functions**:
367
-
368
- ```php
369
- class Test_With_Mocks extends WP_UnitTestCase {
370
-
371
- public function test_with_filter_mock() {
372
- // Add filter
373
- add_filter( 'my_filter', function( $value ) {
374
- return 'mocked_value';
375
- } );
376
-
377
- $result = apply_filters( 'my_filter', 'original_value' );
378
-
379
- $this->assertEquals( 'mocked_value', $result );
380
- }
381
-
382
- public function test_with_action_mock() {
383
- $called = false;
384
-
385
- add_action( 'my_action', function() use ( &$called ) {
386
- $called = true;
387
- } );
388
-
389
- do_action( 'my_action' );
390
-
391
- $this->assertTrue( $called );
392
- }
393
- }
394
- ```
395
-
396
- **Mock External APIs**:
397
-
398
- ```php
399
- class Test_API_Client extends WP_UnitTestCase {
400
-
401
- public function test_api_request() {
402
- // Mock wp_remote_get
403
- add_filter( 'pre_http_request', function( $preempt, $args, $url ) {
404
- if ( strpos( $url, 'api.example.com' ) !== false ) {
405
- return array(
406
- 'response' => array( 'code' => 200 ),
407
- 'body' => json_encode( array( 'data' => 'mocked' ) ),
408
- );
409
- }
410
- return $preempt;
411
- }, 10, 3 );
412
-
413
- $client = new API_Client();
414
- $result = $client->fetch_data();
415
-
416
- $this->assertEquals( 'mocked', $result['data'] );
417
- }
418
- }
419
- ```
420
-
421
- ### 7. CI/CD Integration Workflow
422
-
423
- **Step 7.1: Create GitHub Actions Workflow**
424
-
425
- ```yaml
426
- # .github/workflows/tests.yml
427
- name: Tests
428
-
429
- on:
430
- push:
431
- branches: [ main, develop ]
432
- pull_request:
433
- branches: [ main, develop ]
434
-
435
- jobs:
436
- test:
437
- runs-on: ubuntu-latest
438
-
439
- strategy:
440
- matrix:
441
- php: ['7.4', '8.0', '8.1', '8.2']
442
- wordpress: ['6.0', '6.4', 'latest']
443
-
444
- steps:
445
- - uses: actions/checkout@v3
446
-
447
- - name: Setup PHP
448
- uses: shivammathur/setup-php@v2
449
- with:
450
- php-version: ${{ matrix.php }}
451
- extensions: mysqli
452
- coverage: xdebug
453
-
454
- - name: Install dependencies
455
- run: composer install --prefer-dist --no-progress
456
-
457
- - name: Install WordPress Test Suite
458
- run: bash bin/install-wp-tests.sh wordpress_test root root localhost ${{ matrix.wordpress }}
459
-
460
- - name: Run tests
461
- run: vendor/bin/phpunit --coverage-clover coverage.xml
462
-
463
- - name: Upload coverage to Codecov
464
- uses: codecov/codecov-action@v3
465
- with:
466
- files: ./coverage.xml
467
- ```
468
-
469
- **Step 7.2: Create GitLab CI Configuration**
470
-
471
- ```yaml
472
- # .gitlab-ci.yml
473
- image: php:8.1
474
-
475
- stages:
476
- - test
477
-
478
- variables:
479
- MYSQL_ROOT_PASSWORD: root
480
- MYSQL_DATABASE: wordpress_test
481
-
482
- services:
483
- - mysql:5.7
484
-
485
- before_script:
486
- - apt-get update -qq && apt-get install -y -qq git subversion mysql-client
487
- - docker-php-ext-install mysqli
488
- - curl -sS https://getcomposer.org/installer | php
489
- - php composer.phar install
490
-
491
- test:
492
- stage: test
493
- script:
494
- - bash bin/install-wp-tests.sh wordpress_test root root mysql latest
495
- - vendor/bin/phpunit --coverage-text --colors=never
496
- ```
497
-
498
- ### 8. Pre-Release Testing Checklist
499
-
500
- **Code Quality**:
501
- - [ ] All tests pass locally
502
- - [ ] Code coverage > 80%
503
- - [ ] No PHP errors or warnings
504
- - [ ] Follows WordPress Coding Standards (WPCS)
505
- - [ ] PHPStan/Psalm static analysis passes
506
-
507
- **Functional Testing**:
508
- - [ ] All features work as expected
509
- - [ ] Admin interface functions correctly
510
- - [ ] Frontend display works correctly
511
- - [ ] AJAX requests work correctly
512
- - [ ] Forms submit successfully
513
-
514
- **Security Testing**:
515
- - [ ] Nonce verification tests pass
516
- - [ ] Capability check tests pass
517
- - [ ] Input sanitization tests pass
518
- - [ ] Output escaping tests pass
519
- - [ ] SQL injection tests pass
520
- - [ ] XSS tests pass
521
-
522
- **Performance Testing**:
523
- - [ ] Database queries are optimized
524
- - [ ] No N+1 query problems
525
- - [ ] Caching works correctly
526
- - [ ] Page load time is acceptable
527
-
528
- **Compatibility Testing**:
529
- - [ ] Works with latest WordPress version
530
- - [ ] Works with minimum supported WordPress version
531
- - [ ] Works with PHP 7.4+
532
- - [ ] Works with common themes
533
- - [ ] Works with common plugins
534
-
535
- **Accessibility Testing**:
536
- - [ ] Keyboard navigation works
537
- - [ ] Screen reader compatible
538
- - [ ] Color contrast meets WCAG standards
539
- - [ ] Forms have proper labels
540
-
541
- ### 9. Debugging Failed Tests
542
-
543
- **Enable Debug Mode**:
544
-
545
- ```php
546
- // tests/bootstrap.php
547
- define( 'WP_DEBUG', true );
548
- define( 'WP_DEBUG_LOG', true );
549
- define( 'WP_DEBUG_DISPLAY', false );
550
- ```
551
-
552
- **Use var_dump in Tests**:
553
-
554
- ```php
555
- public function test_debug_output() {
556
- $result = $this->feature->process_data( $input );
557
- var_dump( $result ); // Will show in test output
558
- $this->assertTrue( true );
559
- }
560
- ```
561
-
562
- **Use PHPUnit Debugging**:
563
-
564
- ```bash
565
- # Run with debug output
566
- vendor/bin/phpunit --debug
567
-
568
- # Run with verbose output
569
- vendor/bin/phpunit --verbose
570
-
571
- # Stop on first failure
572
- vendor/bin/phpunit --stop-on-failure
573
-
574
- # Stop on first error
575
- vendor/bin/phpunit --stop-on-error
576
- ```
577
-
578
- **Check WordPress Debug Log**:
579
-
580
- ```bash
581
- # View debug log
582
- tail -f wp-content/debug.log
583
- ```
584
-
585
- ### 10. Continuous Testing Workflow
586
-
587
- **Watch Mode** (using entr or similar):
588
-
589
- ```bash
590
- # Install entr (macOS)
591
- brew install entr
592
-
593
- # Watch for changes and run tests
594
- find . -name "*.php" | entr vendor/bin/phpunit
595
- ```
596
-
597
- **Pre-Commit Hook**:
598
-
599
- ```bash
600
- # .git/hooks/pre-commit
601
- #!/bin/bash
602
-
603
- echo "Running tests..."
604
- vendor/bin/phpunit
605
-
606
- if [ $? -ne 0 ]; then
607
- echo "Tests failed. Commit aborted."
608
- exit 1
609
- fi
610
-
611
- echo "Tests passed. Proceeding with commit."
612
- ```
613
-
614
- ## AI Prompt Templates
615
-
616
- ### Test Setup Prompt
617
-
618
- ```
619
- Set up PHPUnit testing for [plugin name].
620
-
621
- Requirements:
622
- - Install PHPUnit via Composer
623
- - Install WordPress Test Suite
624
- - Create test bootstrap file
625
- - Create PHPUnit configuration
626
- - Create test directory structure (unit, integration, fixtures, mocks)
627
-
628
- Test coverage needed:
629
- - Unit tests for core logic
630
- - Integration tests for WordPress integration
631
- - AJAX tests for AJAX handlers
632
- - Database tests for custom tables
633
-
634
- Use WordPress test suite and mock WordPress functions where appropriate.
635
- ```
636
-
637
- ### Test Writing Prompt
638
-
639
- ```
640
- Write comprehensive tests for [feature name] in [plugin name].
641
-
642
- Test coverage:
643
- - Unit tests for [list functions]
644
- - Integration tests for [list WordPress integration points]
645
- - Security tests for nonce verification, capability checks, sanitization, escaping
646
- - Database tests for [list database operations]
647
-
648
- Use test factories for creating test data.
649
- Mock external APIs and WordPress functions where appropriate.
650
- Achieve > 80% code coverage.
651
- ```
652
-
653
- ### CI/CD Setup Prompt
654
-
655
- ```
656
- Set up CI/CD for [plugin name] using [GitHub Actions/GitLab CI].
657
-
658
- Requirements:
659
- - Test on PHP versions: 7.4, 8.0, 8.1, 8.2
660
- - Test on WordPress versions: 6.0, 6.4, latest
661
- - Run PHPUnit tests
662
- - Generate code coverage report
663
- - Upload coverage to Codecov
664
-
665
- Create workflow file with proper matrix configuration.
666
- ```
667
-
668
- ## Best Practices
669
-
670
- ### DO
671
-
672
- ✅ Write tests before implementing features (TDD)
673
- ✅ Test one thing per test method
674
- ✅ Use descriptive test method names
675
- ✅ Use test factories for creating test data
676
- ✅ Mock external dependencies
677
- ✅ Test edge cases and error conditions
678
- ✅ Aim for > 80% code coverage
679
- ✅ Run tests before committing
680
- ✅ Use CI/CD for automated testing
681
- ✅ Keep tests fast and isolated
682
-
683
- ### DON'T
684
-
685
- ❌ Skip writing tests
686
- ❌ Test multiple things in one test
687
- ❌ Use production data in tests
688
- ❌ Depend on test execution order
689
- ❌ Leave failing tests in codebase
690
- ❌ Skip testing edge cases
691
- ❌ Commit without running tests
692
- ❌ Ignore code coverage metrics
693
- ❌ Write slow tests
694
- ❌ Test implementation details
695
-
696
- ## Common Testing Patterns
697
-
698
- ### Pattern 1: Test Setup and Teardown
699
-
700
- ```php
701
- class Test_Feature extends WP_UnitTestCase {
702
-
703
- private $feature;
704
- private $test_post_id;
705
-
706
- public function setUp(): void {
707
- parent::setUp();
708
- $this->feature = new Feature();
709
- $this->test_post_id = $this->factory->post->create();
710
- }
711
-
712
- public function tearDown(): void {
713
- wp_delete_post( $this->test_post_id, true );
714
- parent::tearDown();
715
- }
716
- }
717
- ```
718
-
719
- ### Pattern 2: Data Providers
720
-
721
- ```php
722
- class Test_Validation extends WP_UnitTestCase {
723
-
724
- /**
725
- * @dataProvider email_provider
726
- */
727
- public function test_email_validation( $email, $expected ) {
728
- $result = $this->validator->is_valid_email( $email );
729
- $this->assertEquals( $expected, $result );
730
- }
731
-
732
- public function email_provider() {
733
- return array(
734
- array( 'valid@example.com', true ),
735
- array( 'invalid@', false ),
736
- array( 'no-at-sign.com', false ),
737
- array( '', false ),
738
- );
739
- }
740
- }
741
- ```
742
-
743
- ### Pattern 3: Exception Testing
744
-
745
- ```php
746
- class Test_Error_Handling extends WP_UnitTestCase {
747
-
748
- public function test_throws_exception_on_invalid_input() {
749
- $this->expectException( InvalidArgumentException::class );
750
- $this->expectExceptionMessage( 'Invalid input' );
751
-
752
- $this->feature->process( null );
753
- }
754
- }
755
- ```
756
-
757
- ## Resources
758
-
759
- - [WordPress PHPUnit Documentation](https://make.wordpress.org/core/handbook/testing/automated-testing/phpunit/)
760
- - [PHPUnit Documentation](https://phpunit.de/documentation.html)
761
- - [WordPress Test Suite](https://develop.svn.wordpress.org/trunk/tests/phpunit/)
762
- - [WP_UnitTestCase Reference](https://developer.wordpress.org/reference/classes/wp_unittestcase/)
763
- - [Codecov](https://codecov.io/)
764
-
765
- ## Related Workflows
766
-
767
- - `development-workflow.md` - Feature development cycle
768
- - `scaffolding-workflow.md` - Creating new plugins
769
- - `submission-workflow.md` - WordPress.org submission
770
-
771
- ## Related Domain Rules
772
-
773
- - `domain-rules/wordpress-plugin/testing-patterns.md` - Detailed testing patterns
774
- - `domain-rules/wordpress-plugin/security-best-practices.md` - Security testing
775
-
1
+ # WordPress Plugin Testing Workflow
2
+
3
+ ## Overview
4
+
5
+ This workflow guides you through setting up and running comprehensive tests for WordPress plugins using PHPUnit, WordPress Test Suite, and CI/CD integration.
6
+
7
+ ## Prerequisites
8
+
9
+ - WordPress plugin with code to test
10
+ - Composer installed
11
+ - Local WordPress development environment
12
+ - Basic understanding of PHPUnit
13
+ - Domain rules: `domain-rules/wordpress-plugin/testing-patterns.md`
14
+
15
+ ## Workflow Steps
16
+
17
+ ### 1. Initial Test Environment Setup
18
+
19
+ **Step 1.1: Install PHPUnit via Composer**
20
+
21
+ ```bash
22
+ # Navigate to plugin directory
23
+ cd wp-content/plugins/your-plugin
24
+
25
+ # Initialize composer if not already done
26
+ composer init
27
+
28
+ # Install PHPUnit
29
+ composer require --dev phpunit/phpunit ^9.0
30
+
31
+ # Install WordPress test library
32
+ composer require --dev yoast/phpunit-polyfills
33
+ ```
34
+
35
+ **Step 1.2: Install WordPress Test Suite**
36
+
37
+ ```bash
38
+ # Install WordPress test suite
39
+ bash bin/install-wp-tests.sh wordpress_test root '' localhost latest
40
+
41
+ # Or for specific WordPress version
42
+ bash bin/install-wp-tests.sh wordpress_test root '' localhost 6.4
43
+ ```
44
+
45
+ **Step 1.3: Create Test Bootstrap File**
46
+
47
+ ```php
48
+ // tests/bootstrap.php
49
+ <?php
50
+ /**
51
+ * PHPUnit bootstrap file
52
+ */
53
+
54
+ // Composer autoloader
55
+ require_once dirname( dirname( __FILE__ ) ) . '/vendor/autoload.php';
56
+
57
+ // WordPress tests directory
58
+ $_tests_dir = getenv( 'WP_TESTS_DIR' );
59
+
60
+ if ( ! $_tests_dir ) {
61
+ $_tests_dir = rtrim( sys_get_temp_dir(), '/\\' ) . '/wordpress-tests-lib';
62
+ }
63
+
64
+ if ( ! file_exists( $_tests_dir . '/includes/functions.php' ) ) {
65
+ echo "Could not find $_tests_dir/includes/functions.php\n";
66
+ exit( 1 );
67
+ }
68
+
69
+ // Give access to tests_add_filter() function
70
+ require_once $_tests_dir . '/includes/functions.php';
71
+
72
+ /**
73
+ * Manually load the plugin being tested
74
+ */
75
+ function _manually_load_plugin() {
76
+ require dirname( dirname( __FILE__ ) ) . '/your-plugin.php';
77
+ }
78
+ tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
79
+
80
+ // Start up the WP testing environment
81
+ require $_tests_dir . '/includes/bootstrap.php';
82
+ ```
83
+
84
+ **Step 1.4: Create PHPUnit Configuration**
85
+
86
+ ```xml
87
+ <!-- phpunit.xml.dist -->
88
+ <?xml version="1.0"?>
89
+ <phpunit
90
+ bootstrap="tests/bootstrap.php"
91
+ backupGlobals="false"
92
+ colors="true"
93
+ convertErrorsToExceptions="true"
94
+ convertNoticesToExceptions="true"
95
+ convertWarningsToExceptions="true"
96
+ >
97
+ <testsuites>
98
+ <testsuite name="unit">
99
+ <directory prefix="test-" suffix=".php">./tests/unit/</directory>
100
+ </testsuite>
101
+ <testsuite name="integration">
102
+ <directory prefix="test-" suffix=".php">./tests/integration/</directory>
103
+ </testsuite>
104
+ </testsuites>
105
+ <coverage processUncoveredFiles="true">
106
+ <include>
107
+ <directory suffix=".php">./includes</directory>
108
+ <directory suffix=".php">./admin</directory>
109
+ <directory suffix=".php">./public</directory>
110
+ </include>
111
+ <exclude>
112
+ <directory>./vendor</directory>
113
+ <directory>./tests</directory>
114
+ </exclude>
115
+ </coverage>
116
+ <php>
117
+ <env name="WP_TESTS_DIR" value="/tmp/wordpress-tests-lib" />
118
+ </php>
119
+ </phpunit>
120
+ ```
121
+
122
+ **Step 1.5: Create Test Directory Structure**
123
+
124
+ ```bash
125
+ mkdir -p tests/unit
126
+ mkdir -p tests/integration
127
+ mkdir -p tests/fixtures
128
+ mkdir -p tests/mocks
129
+ ```
130
+
131
+ ### 2. Test-Driven Development Workflow
132
+
133
+ **Step 2.1: Write Test First (Red)**
134
+
135
+ ```php
136
+ // tests/unit/test-feature.php
137
+ class Test_Feature extends WP_UnitTestCase {
138
+
139
+ public function test_feature_processes_data_correctly() {
140
+ $feature = new Plugin_Feature();
141
+ $input = array( 'key' => 'value' );
142
+ $expected = array( 'key' => 'processed_value' );
143
+
144
+ $result = $feature->process_data( $input );
145
+
146
+ $this->assertEquals( $expected, $result );
147
+ }
148
+ }
149
+ ```
150
+
151
+ Run test (should fail):
152
+ ```bash
153
+ vendor/bin/phpunit tests/unit/test-feature.php
154
+ ```
155
+
156
+ **Step 2.2: Implement Feature (Green)**
157
+
158
+ ```php
159
+ // includes/feature.php
160
+ class Plugin_Feature {
161
+ public function process_data( $data ) {
162
+ return array( 'key' => 'processed_value' );
163
+ }
164
+ }
165
+ ```
166
+
167
+ Run test (should pass):
168
+ ```bash
169
+ vendor/bin/phpunit tests/unit/test-feature.php
170
+ ```
171
+
172
+ **Step 2.3: Refactor (Refactor)**
173
+
174
+ Improve code quality while keeping tests passing.
175
+
176
+ ### 3. Running Tests During Development
177
+
178
+ **Run All Tests**:
179
+
180
+ ```bash
181
+ # Run all tests
182
+ vendor/bin/phpunit
183
+
184
+ # Run with verbose output
185
+ vendor/bin/phpunit --verbose
186
+
187
+ # Run with debug output
188
+ vendor/bin/phpunit --debug
189
+ ```
190
+
191
+ **Run Specific Test Suites**:
192
+
193
+ ```bash
194
+ # Run only unit tests
195
+ vendor/bin/phpunit --testsuite unit
196
+
197
+ # Run only integration tests
198
+ vendor/bin/phpunit --testsuite integration
199
+ ```
200
+
201
+ **Run Specific Test Files**:
202
+
203
+ ```bash
204
+ # Run specific test file
205
+ vendor/bin/phpunit tests/unit/test-feature.php
206
+
207
+ # Run specific test class
208
+ vendor/bin/phpunit --filter Test_Feature
209
+
210
+ # Run specific test method
211
+ vendor/bin/phpunit --filter test_feature_processes_data_correctly
212
+ ```
213
+
214
+ **Run Tests with Coverage**:
215
+
216
+ ```bash
217
+ # Generate HTML coverage report
218
+ vendor/bin/phpunit --coverage-html coverage/
219
+
220
+ # Generate text coverage report
221
+ vendor/bin/phpunit --coverage-text
222
+
223
+ # Generate coverage with minimum threshold
224
+ vendor/bin/phpunit --coverage-text --coverage-filter includes/ --coverage-clover coverage.xml
225
+ ```
226
+
227
+ ### 4. Writing Different Types of Tests
228
+
229
+ **Unit Tests** (test in isolation):
230
+
231
+ ```php
232
+ class Test_Data_Processor extends WP_UnitTestCase {
233
+
234
+ private $processor;
235
+
236
+ public function setUp(): void {
237
+ parent::setUp();
238
+ $this->processor = new Data_Processor();
239
+ }
240
+
241
+ public function test_sanitizes_input() {
242
+ $input = '<script>alert("xss")</script>Test';
243
+ $expected = 'alert("xss")Test';
244
+
245
+ $result = $this->processor->sanitize( $input );
246
+
247
+ $this->assertEquals( $expected, $result );
248
+ }
249
+ }
250
+ ```
251
+
252
+ **Integration Tests** (test with WordPress):
253
+
254
+ ```php
255
+ class Test_Post_Handler_Integration extends WP_UnitTestCase {
256
+
257
+ public function test_creates_post_with_meta() {
258
+ $handler = new Post_Handler();
259
+
260
+ $post_id = $handler->create_post( array(
261
+ 'title' => 'Test Post',
262
+ 'meta' => array( 'key' => 'value' ),
263
+ ) );
264
+
265
+ $this->assertGreaterThan( 0, $post_id );
266
+ $this->assertEquals( 'value', get_post_meta( $post_id, 'key', true ) );
267
+ }
268
+ }
269
+ ```
270
+
271
+ **AJAX Tests**:
272
+
273
+ ```php
274
+ class Test_AJAX_Handler extends WP_Ajax_UnitTestCase {
275
+
276
+ public function test_ajax_action_success() {
277
+ // Set up request
278
+ $_POST['action'] = 'my_ajax_action';
279
+ $_POST['nonce'] = wp_create_nonce( 'my_nonce' );
280
+ $_POST['data'] = 'test_data';
281
+
282
+ // Set current user
283
+ wp_set_current_user( $this->factory->user->create( array( 'role' => 'administrator' ) ) );
284
+
285
+ // Make AJAX request
286
+ try {
287
+ $this->_handleAjax( 'my_ajax_action' );
288
+ } catch ( WPAjaxDieContinueException $e ) {
289
+ // Expected exception
290
+ }
291
+
292
+ // Assert response
293
+ $response = json_decode( $this->_last_response );
294
+ $this->assertTrue( $response->success );
295
+ }
296
+ }
297
+ ```
298
+
299
+ **Database Tests**:
300
+
301
+ ```php
302
+ class Test_Database_Operations extends WP_UnitTestCase {
303
+
304
+ private $table_name;
305
+
306
+ public function setUp(): void {
307
+ parent::setUp();
308
+ global $wpdb;
309
+ $this->table_name = $wpdb->prefix . 'custom_table';
310
+ }
311
+
312
+ public function test_inserts_data() {
313
+ global $wpdb;
314
+
315
+ $data = array(
316
+ 'column1' => 'value1',
317
+ 'column2' => 'value2',
318
+ );
319
+
320
+ $result = $wpdb->insert( $this->table_name, $data );
321
+
322
+ $this->assertNotFalse( $result );
323
+ $this->assertEquals( 1, $wpdb->insert_id );
324
+ }
325
+ }
326
+ ```
327
+
328
+ ### 5. Using Test Factories
329
+
330
+ **Create Test Data**:
331
+
332
+ ```php
333
+ class Test_With_Factories extends WP_UnitTestCase {
334
+
335
+ public function test_with_posts() {
336
+ // Create posts
337
+ $post_ids = $this->factory->post->create_many( 5 );
338
+
339
+ $this->assertCount( 5, $post_ids );
340
+ }
341
+
342
+ public function test_with_users() {
343
+ // Create user
344
+ $user_id = $this->factory->user->create( array(
345
+ 'role' => 'editor',
346
+ 'user_email' => 'test@example.com',
347
+ ) );
348
+
349
+ $user = get_user_by( 'id', $user_id );
350
+ $this->assertEquals( 'editor', $user->roles[0] );
351
+ }
352
+
353
+ public function test_with_terms() {
354
+ // Create taxonomy terms
355
+ $term_ids = $this->factory->term->create_many( 3, array(
356
+ 'taxonomy' => 'category',
357
+ ) );
358
+
359
+ $this->assertCount( 3, $term_ids );
360
+ }
361
+ }
362
+ ```
363
+
364
+ ### 6. Mocking and Stubbing
365
+
366
+ **Mock WordPress Functions**:
367
+
368
+ ```php
369
+ class Test_With_Mocks extends WP_UnitTestCase {
370
+
371
+ public function test_with_filter_mock() {
372
+ // Add filter
373
+ add_filter( 'my_filter', function( $value ) {
374
+ return 'mocked_value';
375
+ } );
376
+
377
+ $result = apply_filters( 'my_filter', 'original_value' );
378
+
379
+ $this->assertEquals( 'mocked_value', $result );
380
+ }
381
+
382
+ public function test_with_action_mock() {
383
+ $called = false;
384
+
385
+ add_action( 'my_action', function() use ( &$called ) {
386
+ $called = true;
387
+ } );
388
+
389
+ do_action( 'my_action' );
390
+
391
+ $this->assertTrue( $called );
392
+ }
393
+ }
394
+ ```
395
+
396
+ **Mock External APIs**:
397
+
398
+ ```php
399
+ class Test_API_Client extends WP_UnitTestCase {
400
+
401
+ public function test_api_request() {
402
+ // Mock wp_remote_get
403
+ add_filter( 'pre_http_request', function( $preempt, $args, $url ) {
404
+ if ( strpos( $url, 'api.example.com' ) !== false ) {
405
+ return array(
406
+ 'response' => array( 'code' => 200 ),
407
+ 'body' => json_encode( array( 'data' => 'mocked' ) ),
408
+ );
409
+ }
410
+ return $preempt;
411
+ }, 10, 3 );
412
+
413
+ $client = new API_Client();
414
+ $result = $client->fetch_data();
415
+
416
+ $this->assertEquals( 'mocked', $result['data'] );
417
+ }
418
+ }
419
+ ```
420
+
421
+ ### 7. CI/CD Integration Workflow
422
+
423
+ **Step 7.1: Create GitHub Actions Workflow**
424
+
425
+ ```yaml
426
+ # .github/workflows/tests.yml
427
+ name: Tests
428
+
429
+ on:
430
+ push:
431
+ branches: [ main, develop ]
432
+ pull_request:
433
+ branches: [ main, develop ]
434
+
435
+ jobs:
436
+ test:
437
+ runs-on: ubuntu-latest
438
+
439
+ strategy:
440
+ matrix:
441
+ php: ['7.4', '8.0', '8.1', '8.2']
442
+ wordpress: ['6.0', '6.4', 'latest']
443
+
444
+ steps:
445
+ - uses: actions/checkout@v3
446
+
447
+ - name: Setup PHP
448
+ uses: shivammathur/setup-php@v2
449
+ with:
450
+ php-version: ${{ matrix.php }}
451
+ extensions: mysqli
452
+ coverage: xdebug
453
+
454
+ - name: Install dependencies
455
+ run: composer install --prefer-dist --no-progress
456
+
457
+ - name: Install WordPress Test Suite
458
+ run: bash bin/install-wp-tests.sh wordpress_test root root localhost ${{ matrix.wordpress }}
459
+
460
+ - name: Run tests
461
+ run: vendor/bin/phpunit --coverage-clover coverage.xml
462
+
463
+ - name: Upload coverage to Codecov
464
+ uses: codecov/codecov-action@v3
465
+ with:
466
+ files: ./coverage.xml
467
+ ```
468
+
469
+ **Step 7.2: Create GitLab CI Configuration**
470
+
471
+ ```yaml
472
+ # .gitlab-ci.yml
473
+ image: php:8.1
474
+
475
+ stages:
476
+ - test
477
+
478
+ variables:
479
+ MYSQL_ROOT_PASSWORD: root
480
+ MYSQL_DATABASE: wordpress_test
481
+
482
+ services:
483
+ - mysql:5.7
484
+
485
+ before_script:
486
+ - apt-get update -qq && apt-get install -y -qq git subversion mysql-client
487
+ - docker-php-ext-install mysqli
488
+ - curl -sS https://getcomposer.org/installer | php
489
+ - php composer.phar install
490
+
491
+ test:
492
+ stage: test
493
+ script:
494
+ - bash bin/install-wp-tests.sh wordpress_test root root mysql latest
495
+ - vendor/bin/phpunit --coverage-text --colors=never
496
+ ```
497
+
498
+ ### 8. Pre-Release Testing Checklist
499
+
500
+ **Code Quality**:
501
+ - [ ] All tests pass locally
502
+ - [ ] Code coverage > 80%
503
+ - [ ] No PHP errors or warnings
504
+ - [ ] Follows WordPress Coding Standards (WPCS)
505
+ - [ ] PHPStan/Psalm static analysis passes
506
+
507
+ **Functional Testing**:
508
+ - [ ] All features work as expected
509
+ - [ ] Admin interface functions correctly
510
+ - [ ] Frontend display works correctly
511
+ - [ ] AJAX requests work correctly
512
+ - [ ] Forms submit successfully
513
+
514
+ **Security Testing**:
515
+ - [ ] Nonce verification tests pass
516
+ - [ ] Capability check tests pass
517
+ - [ ] Input sanitization tests pass
518
+ - [ ] Output escaping tests pass
519
+ - [ ] SQL injection tests pass
520
+ - [ ] XSS tests pass
521
+
522
+ **Performance Testing**:
523
+ - [ ] Database queries are optimized
524
+ - [ ] No N+1 query problems
525
+ - [ ] Caching works correctly
526
+ - [ ] Page load time is acceptable
527
+
528
+ **Compatibility Testing**:
529
+ - [ ] Works with latest WordPress version
530
+ - [ ] Works with minimum supported WordPress version
531
+ - [ ] Works with PHP 7.4+
532
+ - [ ] Works with common themes
533
+ - [ ] Works with common plugins
534
+
535
+ **Accessibility Testing**:
536
+ - [ ] Keyboard navigation works
537
+ - [ ] Screen reader compatible
538
+ - [ ] Color contrast meets WCAG standards
539
+ - [ ] Forms have proper labels
540
+
541
+ ### 9. Debugging Failed Tests
542
+
543
+ **Enable Debug Mode**:
544
+
545
+ ```php
546
+ // tests/bootstrap.php
547
+ define( 'WP_DEBUG', true );
548
+ define( 'WP_DEBUG_LOG', true );
549
+ define( 'WP_DEBUG_DISPLAY', false );
550
+ ```
551
+
552
+ **Use var_dump in Tests**:
553
+
554
+ ```php
555
+ public function test_debug_output() {
556
+ $result = $this->feature->process_data( $input );
557
+ var_dump( $result ); // Will show in test output
558
+ $this->assertTrue( true );
559
+ }
560
+ ```
561
+
562
+ **Use PHPUnit Debugging**:
563
+
564
+ ```bash
565
+ # Run with debug output
566
+ vendor/bin/phpunit --debug
567
+
568
+ # Run with verbose output
569
+ vendor/bin/phpunit --verbose
570
+
571
+ # Stop on first failure
572
+ vendor/bin/phpunit --stop-on-failure
573
+
574
+ # Stop on first error
575
+ vendor/bin/phpunit --stop-on-error
576
+ ```
577
+
578
+ **Check WordPress Debug Log**:
579
+
580
+ ```bash
581
+ # View debug log
582
+ tail -f wp-content/debug.log
583
+ ```
584
+
585
+ ### 10. Continuous Testing Workflow
586
+
587
+ **Watch Mode** (using entr or similar):
588
+
589
+ ```bash
590
+ # Install entr (macOS)
591
+ brew install entr
592
+
593
+ # Watch for changes and run tests
594
+ find . -name "*.php" | entr vendor/bin/phpunit
595
+ ```
596
+
597
+ **Pre-Commit Hook**:
598
+
599
+ ```bash
600
+ # .git/hooks/pre-commit
601
+ #!/bin/bash
602
+
603
+ echo "Running tests..."
604
+ vendor/bin/phpunit
605
+
606
+ if [ $? -ne 0 ]; then
607
+ echo "Tests failed. Commit aborted."
608
+ exit 1
609
+ fi
610
+
611
+ echo "Tests passed. Proceeding with commit."
612
+ ```
613
+
614
+ ## AI Prompt Templates
615
+
616
+ ### Test Setup Prompt
617
+
618
+ ```
619
+ Set up PHPUnit testing for [plugin name].
620
+
621
+ Requirements:
622
+ - Install PHPUnit via Composer
623
+ - Install WordPress Test Suite
624
+ - Create test bootstrap file
625
+ - Create PHPUnit configuration
626
+ - Create test directory structure (unit, integration, fixtures, mocks)
627
+
628
+ Test coverage needed:
629
+ - Unit tests for core logic
630
+ - Integration tests for WordPress integration
631
+ - AJAX tests for AJAX handlers
632
+ - Database tests for custom tables
633
+
634
+ Use WordPress test suite and mock WordPress functions where appropriate.
635
+ ```
636
+
637
+ ### Test Writing Prompt
638
+
639
+ ```
640
+ Write comprehensive tests for [feature name] in [plugin name].
641
+
642
+ Test coverage:
643
+ - Unit tests for [list functions]
644
+ - Integration tests for [list WordPress integration points]
645
+ - Security tests for nonce verification, capability checks, sanitization, escaping
646
+ - Database tests for [list database operations]
647
+
648
+ Use test factories for creating test data.
649
+ Mock external APIs and WordPress functions where appropriate.
650
+ Achieve > 80% code coverage.
651
+ ```
652
+
653
+ ### CI/CD Setup Prompt
654
+
655
+ ```
656
+ Set up CI/CD for [plugin name] using [GitHub Actions/GitLab CI].
657
+
658
+ Requirements:
659
+ - Test on PHP versions: 7.4, 8.0, 8.1, 8.2
660
+ - Test on WordPress versions: 6.0, 6.4, latest
661
+ - Run PHPUnit tests
662
+ - Generate code coverage report
663
+ - Upload coverage to Codecov
664
+
665
+ Create workflow file with proper matrix configuration.
666
+ ```
667
+
668
+ ## Best Practices
669
+
670
+ ### DO
671
+
672
+ ✅ Write tests before implementing features (TDD)
673
+ ✅ Test one thing per test method
674
+ ✅ Use descriptive test method names
675
+ ✅ Use test factories for creating test data
676
+ ✅ Mock external dependencies
677
+ ✅ Test edge cases and error conditions
678
+ ✅ Aim for > 80% code coverage
679
+ ✅ Run tests before committing
680
+ ✅ Use CI/CD for automated testing
681
+ ✅ Keep tests fast and isolated
682
+
683
+ ### DON'T
684
+
685
+ ❌ Skip writing tests
686
+ ❌ Test multiple things in one test
687
+ ❌ Use production data in tests
688
+ ❌ Depend on test execution order
689
+ ❌ Leave failing tests in codebase
690
+ ❌ Skip testing edge cases
691
+ ❌ Commit without running tests
692
+ ❌ Ignore code coverage metrics
693
+ ❌ Write slow tests
694
+ ❌ Test implementation details
695
+
696
+ ## Common Testing Patterns
697
+
698
+ ### Pattern 1: Test Setup and Teardown
699
+
700
+ ```php
701
+ class Test_Feature extends WP_UnitTestCase {
702
+
703
+ private $feature;
704
+ private $test_post_id;
705
+
706
+ public function setUp(): void {
707
+ parent::setUp();
708
+ $this->feature = new Feature();
709
+ $this->test_post_id = $this->factory->post->create();
710
+ }
711
+
712
+ public function tearDown(): void {
713
+ wp_delete_post( $this->test_post_id, true );
714
+ parent::tearDown();
715
+ }
716
+ }
717
+ ```
718
+
719
+ ### Pattern 2: Data Providers
720
+
721
+ ```php
722
+ class Test_Validation extends WP_UnitTestCase {
723
+
724
+ /**
725
+ * @dataProvider email_provider
726
+ */
727
+ public function test_email_validation( $email, $expected ) {
728
+ $result = $this->validator->is_valid_email( $email );
729
+ $this->assertEquals( $expected, $result );
730
+ }
731
+
732
+ public function email_provider() {
733
+ return array(
734
+ array( 'valid@example.com', true ),
735
+ array( 'invalid@', false ),
736
+ array( 'no-at-sign.com', false ),
737
+ array( '', false ),
738
+ );
739
+ }
740
+ }
741
+ ```
742
+
743
+ ### Pattern 3: Exception Testing
744
+
745
+ ```php
746
+ class Test_Error_Handling extends WP_UnitTestCase {
747
+
748
+ public function test_throws_exception_on_invalid_input() {
749
+ $this->expectException( InvalidArgumentException::class );
750
+ $this->expectExceptionMessage( 'Invalid input' );
751
+
752
+ $this->feature->process( null );
753
+ }
754
+ }
755
+ ```
756
+
757
+ ## Resources
758
+
759
+ - [WordPress PHPUnit Documentation](https://make.wordpress.org/core/handbook/testing/automated-testing/phpunit/)
760
+ - [PHPUnit Documentation](https://phpunit.de/documentation.html)
761
+ - [WordPress Test Suite](https://develop.svn.wordpress.org/trunk/tests/phpunit/)
762
+ - [WP_UnitTestCase Reference](https://developer.wordpress.org/reference/classes/wp_unittestcase/)
763
+ - [Codecov](https://codecov.io/)
764
+
765
+ ## Related Workflows
766
+
767
+ - `development-workflow.md` - Feature development cycle
768
+ - `scaffolding-workflow.md` - Creating new plugins
769
+ - `submission-workflow.md` - WordPress.org submission
770
+
771
+ ## Related Domain Rules
772
+
773
+ - `domain-rules/wordpress-plugin/testing-patterns.md` - Detailed testing patterns
774
+ - `domain-rules/wordpress-plugin/security-best-practices.md` - Security testing
775
+