@silasfmartins/testhub 1.0.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 (296) hide show
  1. package/.github/copilot-instructions.md +520 -0
  2. package/biome.json +37 -0
  3. package/dist/index.d.ts +45 -0
  4. package/dist/index.js +169 -0
  5. package/dist/scripts/consumer-postinstall.d.ts +15 -0
  6. package/dist/scripts/consumer-postinstall.js +785 -0
  7. package/dist/scripts/generate-docs.d.ts +16 -0
  8. package/dist/scripts/generate-docs.js +1363 -0
  9. package/dist/scripts/generate-index.d.ts +2 -0
  10. package/dist/scripts/generate-index.js +314 -0
  11. package/dist/scripts/init-api.d.ts +2 -0
  12. package/dist/scripts/init-api.js +525 -0
  13. package/dist/scripts/init-banco.d.ts +2 -0
  14. package/dist/scripts/init-banco.js +347 -0
  15. package/dist/scripts/init-frontend.d.ts +2 -0
  16. package/dist/scripts/init-frontend.js +627 -0
  17. package/dist/scripts/init-mobile.d.ts +2 -0
  18. package/dist/scripts/init-mobile.js +481 -0
  19. package/dist/scripts/init-scenarios.d.ts +2 -0
  20. package/dist/scripts/init-scenarios.js +846 -0
  21. package/dist/scripts/init-ssh.d.ts +2 -0
  22. package/dist/scripts/init-ssh.js +639 -0
  23. package/dist/scripts/package-versions.d.ts +57 -0
  24. package/dist/scripts/package-versions.js +768 -0
  25. package/dist/scripts/postinstall.d.ts +1 -0
  26. package/dist/scripts/postinstall.js +527 -0
  27. package/dist/scripts/robust-build.d.ts +7 -0
  28. package/dist/scripts/robust-build.js +88 -0
  29. package/dist/scripts/setup-local-packages.d.ts +31 -0
  30. package/dist/scripts/setup-local-packages.js +237 -0
  31. package/dist/scripts/smart-override.d.ts +2 -0
  32. package/dist/scripts/smart-override.js +1360 -0
  33. package/dist/scripts/sync-configs.d.ts +27 -0
  34. package/dist/scripts/sync-configs.js +248 -0
  35. package/dist/scripts/test-biome-parse.d.ts +5 -0
  36. package/dist/scripts/test-biome-parse.js +84 -0
  37. package/dist/scripts/ultracite-setup.d.ts +4 -0
  38. package/dist/scripts/ultracite-setup.js +310 -0
  39. package/dist/scripts/update-all-init-scripts.d.ts +2 -0
  40. package/dist/scripts/update-all-init-scripts.js +52 -0
  41. package/dist/scripts/update-biome-schema.d.ts +15 -0
  42. package/dist/scripts/update-biome-schema.js +124 -0
  43. package/dist/src/AutoCoreFacade.d.ts +145 -0
  44. package/dist/src/AutoCoreFacade.js +217 -0
  45. package/dist/src/api/ApiActions.d.ts +297 -0
  46. package/dist/src/api/ApiActions.js +1905 -0
  47. package/dist/src/api/Certificate.d.ts +60 -0
  48. package/dist/src/api/Certificate.js +79 -0
  49. package/dist/src/api/JsonResponse.d.ts +116 -0
  50. package/dist/src/api/JsonResponse.js +206 -0
  51. package/dist/src/appium/DeviceFarmViewer.d.ts +79 -0
  52. package/dist/src/appium/DeviceFarmViewer.js +1083 -0
  53. package/dist/src/appium/MobileActions.d.ts +347 -0
  54. package/dist/src/appium/MobileActions.js +1632 -0
  55. package/dist/src/appium/MobileConnection.d.ts +160 -0
  56. package/dist/src/appium/MobileConnection.js +772 -0
  57. package/dist/src/config/envLoader.d.ts +123 -0
  58. package/dist/src/config/envLoader.js +361 -0
  59. package/dist/src/config/jest-safe-setup.d.ts +19 -0
  60. package/dist/src/config/jest-safe-setup.js +369 -0
  61. package/dist/src/config/timeouts.d.ts +32 -0
  62. package/dist/src/config/timeouts.js +38 -0
  63. package/dist/src/desktop/DesktopActions.d.ts +46 -0
  64. package/dist/src/desktop/DesktopActions.js +398 -0
  65. package/dist/src/desktop/DesktopConnection.d.ts +32 -0
  66. package/dist/src/desktop/DesktopConnection.js +84 -0
  67. package/dist/src/domain/entities/TestExecution.d.ts +117 -0
  68. package/dist/src/domain/entities/TestExecution.js +150 -0
  69. package/dist/src/domain/entities/TestReport.d.ts +114 -0
  70. package/dist/src/domain/entities/TestReport.js +179 -0
  71. package/dist/src/domain/repositories/ITestRepository.d.ts +196 -0
  72. package/dist/src/domain/repositories/ITestRepository.js +14 -0
  73. package/dist/src/domain/schemas/ValidationSchemas.d.ts +159 -0
  74. package/dist/src/domain/schemas/ValidationSchemas.js +181 -0
  75. package/dist/src/functions/errors/BaseError.d.ts +78 -0
  76. package/dist/src/functions/errors/BaseError.js +245 -0
  77. package/dist/src/functions/errors/ConfigurationError.d.ts +16 -0
  78. package/dist/src/functions/errors/ConfigurationError.js +48 -0
  79. package/dist/src/functions/errors/ErrorCatalog.d.ts +148 -0
  80. package/dist/src/functions/errors/ErrorCatalog.js +157 -0
  81. package/dist/src/functions/errors/GlobalErrorHandler.d.ts +101 -0
  82. package/dist/src/functions/errors/GlobalErrorHandler.js +281 -0
  83. package/dist/src/functions/errors/IntegrationError.d.ts +17 -0
  84. package/dist/src/functions/errors/IntegrationError.js +51 -0
  85. package/dist/src/functions/errors/SecurityError.d.ts +14 -0
  86. package/dist/src/functions/errors/SecurityError.js +42 -0
  87. package/dist/src/functions/errors/SystemError.d.ts +12 -0
  88. package/dist/src/functions/errors/SystemError.js +36 -0
  89. package/dist/src/functions/errors/ValidationError.d.ts +14 -0
  90. package/dist/src/functions/errors/ValidationError.js +61 -0
  91. package/dist/src/functions/errors/index.d.ts +12 -0
  92. package/dist/src/functions/errors/index.js +13 -0
  93. package/dist/src/global-setup.d.ts +1 -0
  94. package/dist/src/global-setup.js +1037 -0
  95. package/dist/src/helpers/BancoActions.d.ts +188 -0
  96. package/dist/src/helpers/BancoActions.js +581 -0
  97. package/dist/src/helpers/EnviromentHelper.d.ts +17 -0
  98. package/dist/src/helpers/EnviromentHelper.js +66 -0
  99. package/dist/src/helpers/ParallelExecutionHelper.d.ts +183 -0
  100. package/dist/src/helpers/ParallelExecutionHelper.js +375 -0
  101. package/dist/src/helpers/SyncSignal.d.ts +15 -0
  102. package/dist/src/helpers/SyncSignal.js +44 -0
  103. package/dist/src/hubdocs/CategoryDetector.d.ts +83 -0
  104. package/dist/src/hubdocs/CategoryDetector.js +401 -0
  105. package/dist/src/hubdocs/DirectStatementInterceptor.d.ts +54 -0
  106. package/dist/src/hubdocs/DirectStatementInterceptor.js +243 -0
  107. package/dist/src/hubdocs/ExecutionTracker.d.ts +107 -0
  108. package/dist/src/hubdocs/ExecutionTracker.js +702 -0
  109. package/dist/src/hubdocs/HubDocs.d.ts +395 -0
  110. package/dist/src/hubdocs/HubDocs.js +3586 -0
  111. package/dist/src/hubdocs/StatementMethodFilter.d.ts +71 -0
  112. package/dist/src/hubdocs/StatementMethodFilter.js +618 -0
  113. package/dist/src/hubdocs/StatementTracker.d.ts +417 -0
  114. package/dist/src/hubdocs/StatementTracker.js +2419 -0
  115. package/dist/src/hubdocs/SwaggerGenerator.d.ts +59 -0
  116. package/dist/src/hubdocs/SwaggerGenerator.js +405 -0
  117. package/dist/src/hubdocs/index.d.ts +9 -0
  118. package/dist/src/hubdocs/index.js +9 -0
  119. package/dist/src/hubdocs/types.d.ts +114 -0
  120. package/dist/src/hubdocs/types.js +5 -0
  121. package/dist/src/infrastructure/DependencyContainer.d.ts +142 -0
  122. package/dist/src/infrastructure/DependencyContainer.js +250 -0
  123. package/dist/src/infrastructure/adapters/AppiumAdapter.d.ts +168 -0
  124. package/dist/src/infrastructure/adapters/AppiumAdapter.js +468 -0
  125. package/dist/src/infrastructure/adapters/OracleAdapter.d.ts +150 -0
  126. package/dist/src/infrastructure/adapters/OracleAdapter.js +388 -0
  127. package/dist/src/infrastructure/adapters/PlaywrightAdapter.d.ts +192 -0
  128. package/dist/src/infrastructure/adapters/PlaywrightAdapter.js +382 -0
  129. package/dist/src/infrastructure/adapters/SSHAdapter.d.ts +141 -0
  130. package/dist/src/infrastructure/adapters/SSHAdapter.js +428 -0
  131. package/dist/src/interfaces.d.ts +501 -0
  132. package/dist/src/interfaces.js +25 -0
  133. package/dist/src/internal/fakes/__fake-actions__.d.ts +17 -0
  134. package/dist/src/internal/fakes/__fake-actions__.js +21 -0
  135. package/dist/src/internal/fakes/__forbidden__.d.ts +10 -0
  136. package/dist/src/internal/fakes/__forbidden__.js +18 -0
  137. package/dist/src/internal/fakes/__honeypot__.d.ts +15 -0
  138. package/dist/src/internal/fakes/__honeypot__.js +24 -0
  139. package/dist/src/octane/OctaneReporter.d.ts +13 -0
  140. package/dist/src/octane/OctaneReporter.js +61 -0
  141. package/dist/src/playwright/CryptoActions.d.ts +20 -0
  142. package/dist/src/playwright/CryptoActions.js +75 -0
  143. package/dist/src/playwright/EnhancedWebActions.d.ts +7 -0
  144. package/dist/src/playwright/EnhancedWebActions.js +65 -0
  145. package/dist/src/playwright/WebActions.d.ts +1599 -0
  146. package/dist/src/playwright/WebActions.js +11788 -0
  147. package/dist/src/playwright/actions/ActionTimeline.d.ts +36 -0
  148. package/dist/src/playwright/actions/ActionTimeline.js +101 -0
  149. package/dist/src/playwright/actions/RecoveryQueue.d.ts +82 -0
  150. package/dist/src/playwright/actions/RecoveryQueue.js +130 -0
  151. package/dist/src/playwright/actions/SelectorCache.d.ts +53 -0
  152. package/dist/src/playwright/actions/SelectorCache.js +96 -0
  153. package/dist/src/playwright/actions/index.d.ts +13 -0
  154. package/dist/src/playwright/actions/index.js +14 -0
  155. package/dist/src/playwright/actions/types.d.ts +147 -0
  156. package/dist/src/playwright/actions/types.js +5 -0
  157. package/dist/src/playwright/fixtures.d.ts +112 -0
  158. package/dist/src/playwright/fixtures.js +718 -0
  159. package/dist/src/playwright/network-logs-reporter.d.ts +7 -0
  160. package/dist/src/playwright/network-logs-reporter.js +66 -0
  161. package/dist/src/playwright/registerRecoveryWrappers.d.ts +1 -0
  162. package/dist/src/playwright/registerRecoveryWrappers.js +54 -0
  163. package/dist/src/security/BuildSecurity.d.ts +12 -0
  164. package/dist/src/security/BuildSecurity.js +138 -0
  165. package/dist/src/security/EulaProtection.d.ts +70 -0
  166. package/dist/src/security/EulaProtection.js +155 -0
  167. package/dist/src/security/HoneypotManager.d.ts +46 -0
  168. package/dist/src/security/HoneypotManager.js +234 -0
  169. package/dist/src/security/KeysManager.d.ts +36 -0
  170. package/dist/src/security/KeysManager.js +158 -0
  171. package/dist/src/security/ProofOfWorkIntegration.d.ts +64 -0
  172. package/dist/src/security/ProofOfWorkIntegration.js +206 -0
  173. package/dist/src/security/SecurityValidation.d.ts +21 -0
  174. package/dist/src/security/SecurityValidation.js +163 -0
  175. package/dist/src/security/SourceMapProtection.d.ts +55 -0
  176. package/dist/src/security/SourceMapProtection.js +220 -0
  177. package/dist/src/security/protector.d.ts +1 -0
  178. package/dist/src/security/protector.js +97 -0
  179. package/dist/src/ssh/SSHActions.d.ts +262 -0
  180. package/dist/src/ssh/SSHActions.js +790 -0
  181. package/dist/src/ssh/SSHClient.d.ts +99 -0
  182. package/dist/src/ssh/SSHClient.js +409 -0
  183. package/dist/src/statements/BaseStatement.d.ts +38 -0
  184. package/dist/src/statements/BaseStatement.js +78 -0
  185. package/dist/src/testContext/AuthStateManager.d.ts +93 -0
  186. package/dist/src/testContext/AuthStateManager.js +256 -0
  187. package/dist/src/testContext/CoverageManager.d.ts +198 -0
  188. package/dist/src/testContext/CoverageManager.js +917 -0
  189. package/dist/src/testContext/TestAnnotations.d.ts +476 -0
  190. package/dist/src/testContext/TestAnnotations.js +2647 -0
  191. package/dist/src/testContext/TestContext.d.ts +138 -0
  192. package/dist/src/testContext/TestContext.js +369 -0
  193. package/dist/src/testContext/UnifiedHtmlGenerator.d.ts +7 -0
  194. package/dist/src/testContext/UnifiedHtmlGenerator.js +264 -0
  195. package/dist/src/testContext/UnifiedReportManager.d.ts +211 -0
  196. package/dist/src/testContext/UnifiedReportManager.js +1206 -0
  197. package/dist/src/testhub/DynamicConfigManager.d.ts +121 -0
  198. package/dist/src/testhub/DynamicConfigManager.js +320 -0
  199. package/dist/src/testhub/SystemsManager.d.ts +119 -0
  200. package/dist/src/testhub/SystemsManager.js +365 -0
  201. package/dist/src/testhub/TestHubClient.d.ts +335 -0
  202. package/dist/src/testhub/TestHubClient.js +1215 -0
  203. package/dist/src/testhub/TestHubReporter.d.ts +62 -0
  204. package/dist/src/testhub/TestHubReporter.js +576 -0
  205. package/dist/src/testhub/TestHubVars.d.ts +116 -0
  206. package/dist/src/testhub/TestHubVars.js +273 -0
  207. package/dist/src/utils/ActionInterceptor.d.ts +59 -0
  208. package/dist/src/utils/ActionInterceptor.js +741 -0
  209. package/dist/src/utils/ArtifactsCompressor.d.ts +43 -0
  210. package/dist/src/utils/ArtifactsCompressor.js +181 -0
  211. package/dist/src/utils/AutoLogsFinal.d.ts +47 -0
  212. package/dist/src/utils/AutoLogsFinal.js +148 -0
  213. package/dist/src/utils/CodeGenSession.d.ts +114 -0
  214. package/dist/src/utils/CodeGenSession.js +264 -0
  215. package/dist/src/utils/ConfigLogger.d.ts +133 -0
  216. package/dist/src/utils/ConfigLogger.js +611 -0
  217. package/dist/src/utils/CustomReporter.d.ts +22 -0
  218. package/dist/src/utils/CustomReporter.js +352 -0
  219. package/dist/src/utils/DataStore.d.ts +171 -0
  220. package/dist/src/utils/DataStore.js +484 -0
  221. package/dist/src/utils/DatabaseInterceptor.d.ts +19 -0
  222. package/dist/src/utils/DatabaseInterceptor.js +295 -0
  223. package/dist/src/utils/DateHelper.d.ts +16 -0
  224. package/dist/src/utils/DateHelper.js +120 -0
  225. package/dist/src/utils/DateValidator.d.ts +4 -0
  226. package/dist/src/utils/DateValidator.js +51 -0
  227. package/dist/src/utils/DocumentGenerator.d.ts +35 -0
  228. package/dist/src/utils/DocumentGenerator.js +129 -0
  229. package/dist/src/utils/EvidenceCapture.d.ts +90 -0
  230. package/dist/src/utils/EvidenceCapture.js +600 -0
  231. package/dist/src/utils/EvidenceReportGenerator.d.ts +70 -0
  232. package/dist/src/utils/EvidenceReportGenerator.js +799 -0
  233. package/dist/src/utils/FrameManagementUtil.d.ts +42 -0
  234. package/dist/src/utils/FrameManagementUtil.js +75 -0
  235. package/dist/src/utils/GlobalStatementsInterceptor.d.ts +1 -0
  236. package/dist/src/utils/GlobalStatementsInterceptor.js +1 -0
  237. package/dist/src/utils/HTMLTemplate.d.ts +1 -0
  238. package/dist/src/utils/HTMLTemplate.js +1034 -0
  239. package/dist/src/utils/InterceptacaoMagica.d.ts +23 -0
  240. package/dist/src/utils/InterceptacaoMagica.js +365 -0
  241. package/dist/src/utils/LogSanitizer.d.ts +35 -0
  242. package/dist/src/utils/LogSanitizer.js +110 -0
  243. package/dist/src/utils/Logger.d.ts +65 -0
  244. package/dist/src/utils/Logger.js +284 -0
  245. package/dist/src/utils/McpLocalClient.d.ts +141 -0
  246. package/dist/src/utils/McpLocalClient.js +871 -0
  247. package/dist/src/utils/PDFEvidenceGenerator.d.ts +20 -0
  248. package/dist/src/utils/PDFEvidenceGenerator.js +156 -0
  249. package/dist/src/utils/SpecFileAnalyzer.d.ts +35 -0
  250. package/dist/src/utils/SpecFileAnalyzer.js +209 -0
  251. package/dist/src/utils/StatementInterceptor.d.ts +18 -0
  252. package/dist/src/utils/StatementInterceptor.js +87 -0
  253. package/dist/src/utils/StatementLogger.d.ts +33 -0
  254. package/dist/src/utils/StatementLogger.js +113 -0
  255. package/dist/src/utils/StatementsInterceptor.d.ts +1 -0
  256. package/dist/src/utils/StatementsInterceptor.js +1 -0
  257. package/dist/src/utils/TeamsFlushHook.d.ts +17 -0
  258. package/dist/src/utils/TeamsFlushHook.js +168 -0
  259. package/dist/src/utils/TerminalLogCapture.d.ts +158 -0
  260. package/dist/src/utils/TerminalLogCapture.js +531 -0
  261. package/dist/src/utils/TestMethodLogger.d.ts +70 -0
  262. package/dist/src/utils/TestMethodLogger.js +95 -0
  263. package/dist/src/utils/UnifiedTeardown.d.ts +4 -0
  264. package/dist/src/utils/UnifiedTeardown.js +400 -0
  265. package/dist/src/utils/XPathCatalog.d.ts +152 -0
  266. package/dist/src/utils/XPathCatalog.js +350 -0
  267. package/dist/src/utils/generators.d.ts +90 -0
  268. package/dist/src/utils/generators.js +167 -0
  269. package/dist/src/utils/testRecovery/ResilientPlaywright.d.ts +152 -0
  270. package/dist/src/utils/testRecovery/ResilientPlaywright.js +715 -0
  271. package/dist/src/utils/testRecovery/TestRecoveryClient.d.ts +801 -0
  272. package/dist/src/utils/testRecovery/TestRecoveryClient.js +1415 -0
  273. package/dist/src/utils/testRecovery/autoFixCode.d.ts +65 -0
  274. package/dist/src/utils/testRecovery/autoFixCode.js +32 -0
  275. package/dist/vitest.config.d.ts +2 -0
  276. package/dist/vitest.config.js +59 -0
  277. package/dist/wdio.conf.d.ts +1 -0
  278. package/dist/wdio.conf.js +420 -0
  279. package/package.json +137 -0
  280. package/protect-loader.mjs +643 -0
  281. package/scripts/consumer-postinstall.ts +975 -0
  282. package/scripts/generate-index.ts +343 -0
  283. package/scripts/init-api.ts +613 -0
  284. package/scripts/init-banco.ts +437 -0
  285. package/scripts/init-frontend.ts +727 -0
  286. package/scripts/init-mobile.ts +558 -0
  287. package/scripts/init-scenarios.ts +925 -0
  288. package/scripts/init-ssh.ts +734 -0
  289. package/scripts/package-versions.ts +978 -0
  290. package/scripts/postinstall.ts +605 -0
  291. package/scripts/smart-override.ts +1675 -0
  292. package/scripts/sync-configs.ts +302 -0
  293. package/scripts/ultracite-setup.ts +370 -0
  294. package/src/types/globals.d.ts +48 -0
  295. package/tsconfig.json +29 -0
  296. package/types/autocore-sync-signal.d.ts +10 -0
@@ -0,0 +1,627 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+ import fs from 'node:fs';
4
+ import { execSync } from 'child_process';
5
+ import yaml from 'js-yaml';
6
+ import path from 'path';
7
+ import { generateBiomeConfigString, generateCoverageReadme, generatePackageJson, generateTsConfigForProject, generateVitestConfigString, getLatestVersions, } from './package-versions.js';
8
+ import { setupUltracite } from './ultracite-setup.js';
9
+ const root = process.cwd();
10
+ const catalogPath = path.join(root, 'catalog-info.yaml');
11
+ if (!fs.existsSync(catalogPath)) {
12
+ console.error('❌ Arquivo catalog-info.yaml não encontrado.');
13
+ process.exit(1);
14
+ }
15
+ const catalog = yaml.load(fs.readFileSync(catalogPath, 'utf-8'));
16
+ const projectName = catalog?.metadata?.name || 'meu-projeto';
17
+ const projectNameUnderscore = projectName.replace(/-/g, '_');
18
+ const write = (filePath, content) => {
19
+ const fullPath = path.join(root, filePath);
20
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
21
+ fs.writeFileSync(fullPath, content);
22
+ };
23
+ async function main() {
24
+ console.log('🚀 Inicializando projeto Frontend com versões atualizadas...');
25
+ console.log(`📦 Projeto: ${projectName}`);
26
+ console.log('');
27
+ // ✅ Buscar versões mais recentes
28
+ const versions = await getLatestVersions();
29
+ // ✅ Gerar package.json com versões atualizadas
30
+ const packageJsonContent = generatePackageJson(projectName, 'frontend', versions);
31
+ // ✅ Gerar tsconfig.json baseado no AutoCore
32
+ const tsconfigContent = generateTsConfigForProject('frontend');
33
+ // ✅ Gerar vitest.config.ts baseado no AutoCore (NOVO!)
34
+ const vitestConfigContent = generateVitestConfigString('frontend');
35
+ // ✅ Gerar biome.json sincronizado com AutoCore
36
+ const biomeConfigContent = generateBiomeConfigString();
37
+ console.log('📝 Criando arquivos do projeto...');
38
+ // package.json com versões dinâmicas
39
+ write('package.json', JSON.stringify(packageJsonContent, null, 2));
40
+ // ✅ tsconfig.json sempre sincronizado com o AutoCore
41
+ write('tsconfig.json', JSON.stringify(tsconfigContent, null, 2));
42
+ // ✅ vitest.config.ts sempre sincronizado com o AutoCore (NOVO!)
43
+ write('vitest.config.ts', vitestConfigContent);
44
+ // ✅ biome.json sincronizado automaticamente com o AutoCore
45
+ write('biome.json', biomeConfigContent);
46
+ // playwright.config.ts
47
+ write('playwright.config.ts', `
48
+ import { defineConfig } from '@playwright/test';
49
+
50
+ export default defineConfig({
51
+ globalSetup: '@silasfmartins/testhub/setup',
52
+ reporter: [['list'], ['html', { open: 'never' }], ['@silasfmartins/testhub/reporter']],
53
+ testDir: './tests',
54
+ testMatch: ['**/**/*.spec.ts', '**/**/*.test.ts'],
55
+ timeout: 1_800_000,
56
+ expect: {
57
+ timeout: 1_800_000,
58
+ },
59
+ fullyParallel: false,
60
+ workers: 1,
61
+ retries: 0,
62
+ use: {
63
+ baseURL: '',
64
+ screenshot: 'on',
65
+ trace: 'on',
66
+ video: 'on',
67
+ },
68
+ projects: [
69
+ // ✅ Projetos "headless" (sem browser) — para SSH, API, Banco, Mobile
70
+ {
71
+ name: 'ssh',
72
+ use: { browserName: undefined },
73
+ },
74
+ {
75
+ name: 'api',
76
+ use: { browserName: undefined },
77
+ },
78
+ {
79
+ name: 'banco',
80
+ use: { browserName: undefined },
81
+ },
82
+ {
83
+ name: 'mobile',
84
+ use: { browserName: undefined },
85
+ },
86
+
87
+ // ✅ Projetos de browser — só serão usados se você solicitar via --project
88
+ {
89
+ name: 'chromium',
90
+ use: {
91
+ browserName: 'chromium',
92
+ viewport: null,
93
+ headless: process.env.PLAYWRIGHT_HEADLESS === 'false' ? false : true,
94
+ launchOptions: {
95
+ args: ['--start-maximized'],
96
+ }
97
+ },
98
+ },
99
+ {
100
+ name: 'firefox',
101
+ use: {
102
+ browserName: 'firefox',
103
+ viewport: null,
104
+ headless: process.env.PLAYWRIGHT_HEADLESS === 'false' ? false : true,
105
+ launchOptions: {
106
+ args: ['--start-maximized'],
107
+ }
108
+ },
109
+ },
110
+ {
111
+ name: 'webkit',
112
+ use: {
113
+ browserName: 'webkit',
114
+ viewport: null,
115
+ headless: process.env.PLAYWRIGHT_HEADLESS === 'false' ? false : true,
116
+ launchOptions: {
117
+ args: ['--start-maximized'],
118
+ }
119
+ },
120
+ },
121
+ ],
122
+ });
123
+ `);
124
+ // .npmrc
125
+ write('.npmrc', `registry=https://pkgs.dev.azure.com/telefonica-vivo-brasil/_packaging/DevOps/npm/registry/`);
126
+ // .gitignore
127
+ write('.gitignore', `# Playwright
128
+ node_modules/
129
+ /test-results/
130
+ /playwright-report/
131
+ /blob-report/
132
+ /playwright/.cache/
133
+ playwright-videos
134
+ /playwright-videos/
135
+ /playwright-videos
136
+
137
+ # Tests e logs
138
+ /tests
139
+ /logs
140
+
141
+ # Environment files
142
+ .env
143
+ .env.preprod
144
+ .env.esteira1
145
+ .env.esteira2
146
+ .env.prodlike
147
+ .env.prod
148
+
149
+ .vscode
150
+ .vscode/
151
+ docs
152
+ docs/
153
+
154
+ # AutoCore específicos
155
+ .test-data-store.json
156
+ .env.lock
157
+ .configlogger.lock
158
+
159
+ # VS Code
160
+ .vscode/settings.json
161
+ .github/
162
+ .github
163
+
164
+ # Biome
165
+ .biome.log
166
+
167
+ # Coverage
168
+ coverage/
169
+ *.lcov
170
+
171
+ # Screenshots e videos
172
+ /test-results/
173
+ /playwright-report/`);
174
+ // Arquivo de environment padrão
175
+ write('.env', `# Arquivo que seleciona o ambiente a ser utilizado
176
+ ENV=preprod`);
177
+ // Arquivo de environment padrão
178
+ write('.env.preprod', `# Configurações de ambiente para preprod
179
+ BASE_URL=https://your-app.preprod.com
180
+ NAVIGATION_TIMEOUT=15000
181
+ SLOW_MO=0
182
+ WORKERS=undefined
183
+ RETRIES=0
184
+ # Adicione suas variáveis específicas aqui`);
185
+ // Arquivo de environment esteira1
186
+ write('.env.esteira1', `# Configurações de ambiente para esteira1
187
+ BASE_URL=https://your-app.esteira1.com
188
+ # Adicione suas variáveis específicas aqui`);
189
+ // Arquivo de environment esteira2
190
+ write('.env.esteira2', `# Configurações de ambiente para esteira2
191
+ BASE_URL=https://your-app.esteira2.com
192
+ # Adicione suas variáveis específicas aqui`);
193
+ // Arquivo de environment prodlike
194
+ write('.env.prodlike', `# Configurações de ambiente para prodlike
195
+ BASE_URL=https://your-app.prodlike.com
196
+ # Adicione suas variáveis específicas aqui`);
197
+ // Attributes exemplo
198
+ write('src/attributes/AttributesAcessarPagina.ts', `export class AttributesAcessarPagina {
199
+ protected readonly modal = '//h5[text()="Acesso Ferramentas"]'
200
+ }`);
201
+ //env.ts
202
+ write('src/env.ts', `import { config } from 'dotenv'
203
+
204
+ config()
205
+
206
+ const rawEnv = {
207
+ ENV: process.env.ENV,
208
+ }
209
+ export const env = rawEnv
210
+ `);
211
+ // Page Object para Dashboard
212
+ write('src/pages/AcessarPagina.ts', `import { WebActions } from '@silasfmartins/testhub'
213
+ import { AttributesAcessarPagina } from '../attributes/AttributesAcessarPagina.js'
214
+
215
+ export default class AcessarPagina extends AttributesAcessarPagina {
216
+ async navigateToLoginPage(): Promise<void> {
217
+ await WebActions.navigateTo('/', 'Página inicial')
218
+ }
219
+
220
+ async validarModal(): Promise<void> {
221
+ await WebActions.waitForVisible(
222
+ this.modal,
223
+ 5000,
224
+ 'Título Acesso Ferramentas'
225
+ )
226
+ }
227
+ }
228
+ `);
229
+ // Attributes para Dashboard
230
+ write('src/attributes/AttributesAcessarPagina.ts', `import { type ILocator, TestContext } from '@silasfmartins/testhub'
231
+
232
+ export class AttributesAcessarPagina {
233
+ protected get modal(): ILocator {
234
+ return TestContext.page.locator('//h5[text()="Acesso Ferramentas"]')
235
+ }
236
+ }
237
+ `);
238
+ // Exemplo de teste básico (padrão recomendado)
239
+ write('tests/login.spec.ts', `import { type TestInfo, test, TestAnnotations } from '@silasfmartins/testhub'
240
+ import AcessarPagina from '../src/pages/AcessarPagina.js'
241
+
242
+ test.describe('Página Inicial', () => {
243
+ test('Deve visitar a página inicial [octane-123456]', async ({}, testInfo: TestInfo) => {
244
+ TestAnnotations.Frontend.testInfo = testInfo
245
+ await TestAnnotations.setSystem('MEU_SISTEMA')
246
+ await new AcessarPagina().navigateToLoginPage()
247
+ })
248
+ })
249
+ `);
250
+ // Pipeline Azure DevOps
251
+ write('.azuredevops/azure-pipeline.yml', `trigger:
252
+ batch: true
253
+ branches:
254
+ include:
255
+ - 'master'
256
+ paths:
257
+ include:
258
+ - '*'
259
+ exclude:
260
+ - .azuredevops/*
261
+ - docs/*
262
+ - catalog-info.yaml
263
+ - mkdocs.yml
264
+ - scripts.py
265
+ - catalog/*
266
+
267
+ resources:
268
+ repositories:
269
+ - repository: CodePlay
270
+ name: DevOps/Vivo.CodePlay.Pipelines
271
+ type: git
272
+ ref: refs/heads/test-playwright
273
+ endpoint: CodePlay
274
+
275
+ pool:
276
+ name: GeneralPurposeLinuxAgentsCI
277
+
278
+ extends:
279
+ template: tech_products/qa/build/pipeline_node_npm.yml@CodePlay
280
+ parameters:
281
+ jobName: 'build_${projectNameUnderscore}_pkg'
282
+ commitSHA: '$(Build.SourceVersion)'
283
+ registryServiceConnection: 'ACR-DEVOPS'
284
+ govAppAcronym: ''
285
+ skipScan: false # Alterado para false para executar Fortify e SonarQube
286
+ `);
287
+ // SonarQube configuration
288
+ write('.azuredevops/sonar-project.properties', `################### NÃO ALTERAR!!! ###################
289
+ # Informações gerais sobre o projeto. #
290
+ # Todas as variáveis de ambiente são fornecidas pela #
291
+ # automação, não alterar! #
292
+ ######################################################
293
+
294
+ sonar.projectDescription=Projeto Frontend com AutoCore
295
+ sonar.analysis.orgName=\${env.AZ_ORG_NAME}
296
+ sonar.analysis.buildAuthor=\${env.AZ_BUILD_AUTHOR}
297
+ sonar.scm.exclusions.disabled=false
298
+ sonar.scm.forceReloadAll=true
299
+ sonar.log.level=DEBUG
300
+ sonar.verbose=true
301
+ sonar.sourceEncoding=UTF-8
302
+
303
+ # Diretórios e arquivos relevantes para Node.js/TypeScript
304
+ sonar.sources=src
305
+ sonar.inclusions=**/*.ts
306
+ sonar.test.inclusions=**/*.spec.ts,**/*.test.ts
307
+ sonar.typescript.lcov.reportPaths=coverage/lcov.info
308
+ sonar.javascript.lcov.reportPaths=coverage/lcov.info
309
+
310
+ # Exclusões de cobertura e análise
311
+ sonar.exclusions=node_modules/**,dist/**,coverage/**,**/*.config.js,**/*.config.ts
312
+ sonar.coverage.exclusions=**/*.d.ts,node_modules/**,dist/**,coverage/**,**/*.config.js,**/*.config.ts,**/*.spec.ts,**/*.test.ts
313
+ sonar.test.exclusions=node_modules/**,dist/**,coverage/**
314
+
315
+ # Configurações específicas para projetos Frontend
316
+ sonar.javascript.environments=browser,node
317
+ sonar.typescript.node=true
318
+ `);
319
+ // ✅ Estrutura de testes
320
+ console.log('📝 Criando estrutura de testes...');
321
+ // tests/example.spec.ts - Teste E2E com Playwright
322
+ write('tests/example.spec.ts', `import { type TestInfo, test, TestAnnotations } from '@silasfmartins/testhub'
323
+ import AcessarPagina from '../src/pages/AcessarPagina.js'
324
+
325
+ test.describe('Página Inicial', () => {
326
+ test('Deve visitar a página inicial [octane-123456]', async ({}, testInfo: TestInfo) => {
327
+ TestAnnotations.Frontend.testInfo = testInfo
328
+ await TestAnnotations.setSystem('MEU_SISTEMA')
329
+ await new AcessarPagina().navigateToLoginPage()
330
+ })
331
+ })
332
+ `);
333
+ // README.md
334
+ write('README.md', `# ${projectName}
335
+
336
+ Projeto de automação de testes Frontend baseado no TestHub (AutoCore).
337
+
338
+ ## 🚀 Como usar
339
+
340
+ ### Instalação de dependências
341
+ \`\`\`bash
342
+ npm install
343
+ \`\`\`
344
+
345
+ ### Executar testes
346
+ \`\`\`bash
347
+ # Ambiente preprod
348
+ npm run test:preprod
349
+
350
+ # Ambiente esteira1
351
+ npm run test:esteira1
352
+
353
+ # Ambiente esteira2
354
+ npm run test:esteira2
355
+
356
+ # Ambiente prodlike
357
+ npm run test:prodlike
358
+ \`\`\`
359
+
360
+ ### Gerar Artefato para Projetos de Cenários
361
+ npm run build
362
+
363
+ ### Configuração de ambiente
364
+
365
+ 1. Configure as variáveis de ambiente nos arquivos \`.env.*\`
366
+ 2. Defina BASE_URL para cada ambiente
367
+ 3. Configure viewport, timeouts conforme necessário
368
+
369
+ ## 📋 Estrutura do projeto
370
+
371
+ \`\`\`
372
+ ${projectName}/
373
+ ├── src/
374
+ │ ├── pages/ # Page Objects para interação com páginas
375
+ │ └── attributes/ # Seletores e elementos das páginas
376
+ │ └── setup/fixtures # Fixtures e setup customizado (opcional)
377
+ | └── env.ts # Configuração de environment
378
+ ├── tests/ # Arquivos de teste
379
+ ├── .env.* # Variáveis de ambiente por ambiente
380
+ ├── playwright.config.ts # Configuração do Playwright
381
+ ├── tsconfig.json # Configuração TypeScript (sincronizada)
382
+ ├── biome.json # Configuração Biome (sincronizada)
383
+ └── README.md # Esta documentação
384
+ \`\`\`
385
+
386
+ ## 🔧 Desenvolvimento
387
+
388
+ - **TypeScript**: Configurado e sincronizado com AutoCore
389
+ - **Playwright**: Framework de testes E2E
390
+ - **AutoCore**: Biblioteca de utilitários para automação
391
+ - **Page Object Model**: Padrão de design implementado
392
+ - **Suporte a múltiplos browsers**: Chrome, Firefox, Safari
393
+ - **Biome**: Linting e formatação (configuração sincronizada)
394
+ - **Ultracite**: Experiência de desenvolvimento aprimorada
395
+
396
+ ## 📊 Relatórios
397
+
398
+ Os relatórios são gerados automaticamente em:
399
+ - \`playwright-report/\` - Relatório HTML visual
400
+ - \`test-results/\` - Resultados detalhados e artifacts
401
+ - Logs estruturados no console
402
+ - Screenshots automáticos em falhas
403
+ - Vídeos de execução (quando habilitados)
404
+
405
+ ## 🧪 Exemplos de Uso
406
+
407
+ ### Teste básico de página
408
+ \`\`\`typescript
409
+ // ✅ Importe 'test' do @silasfmartins/testhub - a page é injetada automaticamente!
410
+ import { type TestInfo, test, TestAnnotations } from '@silasfmartins/testhub'
411
+ import PageLogin from '../src/pages/PageLogin.js';
412
+
413
+ test.describe('Login', () => {
414
+ test('Login test', async ({}, testInfo: TestInfo) => {
415
+ TestAnnotations.Frontend.testInfo = testInfo;
416
+ await TestAnnotations.setSystem('MEU_SISTEMA');
417
+
418
+ await new PageLogin().navigateToLogin();
419
+ });
420
+ });
421
+ \`\`\`
422
+
423
+ ### Page Object personalizado
424
+ \`\`\`typescript
425
+ import { WebActions, TestContext } from '@silasfmartins/testhub';
426
+ import { AttributesMyPage } from '../attributes/AttributesMyPage.js';
427
+
428
+ export class MyPage extends AttributesMyPage {
429
+ async clickButton(buttonName: string) {
430
+ // Exemplo seguro sem usar template-placeholder dentro do README template
431
+ // const button = TestContext.page.locator("button:has-text('" + buttonName + "')");
432
+ await WebActions.click(this.button, 'Clicando em ' + buttonName);
433
+ }
434
+ }
435
+ \`\`\`
436
+
437
+ ## 🔧 Comandos Úteis
438
+
439
+ \`\`\`bash
440
+ # Desenvolvimento
441
+ npm run test:preprod # Executar testes em preprod
442
+ npm run test:preprod:chromium # Executar apenas no Chrome
443
+ npm run ui:preprod # Interface visual dos testes
444
+ npm run debug:preprod # Modo debug
445
+
446
+ # Qualidade de código
447
+ npx biome check # Verificar código com Biome
448
+ npx biome format # Formatar código com Biome
449
+ npx biome check --apply # Aplicar correções automáticas
450
+
451
+ # Debug avançado
452
+ npm run test:preprod -- --debug # Executar em modo debug
453
+ npm run test:preprod -- --headed # Executar com interface visual
454
+ npm run test:preprod -- --ui # Executar com UI do Playwright
455
+ npm run test:preprod -- --trace=on # Executar com traces habilitados
456
+ \`\`\`
457
+
458
+ ## 🎯 Configuração de Ambiente
459
+
460
+ ### Para debug local:
461
+ \`\`\`bash
462
+ # Ativar modo lento
463
+ SLOW_MO=1000 npm run test:preprod
464
+ \`\`\`
465
+
466
+ ## 🔄 Sincronização com AutoCore
467
+
468
+ Este projeto mantém sincronização automática com o AutoCore para:
469
+
470
+ - **tsconfig.json**: Configuração de compilação TypeScript
471
+ - **biome.json**: Configuração de linting e formatação
472
+ - **Versões de dependências**: Sempre atualizadas
473
+
474
+ Para sincronizar manualmente:
475
+ \`\`\`bash
476
+ npm i
477
+ \`\`\`
478
+
479
+ ## 📈 Métricas e Monitoramento
480
+
481
+ - **Relatórios HTML**: Visualização rica dos resultados
482
+ - **Logs estruturados**: Para análise e debugging
483
+ - **Screenshots automáticos**: Em caso de falhas
484
+ - **Vídeos de execução**: Para análise detalhada
485
+ - **Traces do Playwright**: Para debug avançado
486
+ - **Métricas de performance**: Tempo de carregamento de páginas
487
+
488
+ ## 🎨 Boas Práticas
489
+
490
+ ### Page Object Model:
491
+ - **Separação clara**: Attributes (seletores) e Page Objects (ações)
492
+ - **Reutilização**: Métodos comuns entre páginas
493
+ - **Manutenibilidade**: Fácil atualização quando UI muda
494
+
495
+ ### Seletores:
496
+ - **Prioridade**: data-testid > id > class > text
497
+ - **Estabilidade**: Evitar seletores frágeis como CSS complexos
498
+ - **Consistência**: Padrão de nomenclatura uniforme
499
+
500
+ ### Testes:
501
+ - **Independência**: Cada teste deve ser independente
502
+ - **Limpeza**: Setup e teardown adequados
503
+ - **Assertivas**: Validações claras e específicas
504
+
505
+ ## 🆘 Resolução de Problemas
506
+
507
+ ### Erro de timeout
508
+ \`\`\`bash
509
+ # Aumentar timeout no playwright.config.ts
510
+ timeout: 120000 # 2 minutos
511
+
512
+ # Ou aumentar timeout específico
513
+ NAVIGATION_TIMEOUT=30000 npm run test:preprod
514
+ \`\`\`
515
+
516
+ ### Problemas de seletores
517
+ \`\`\`bash
518
+ # Usar modo debug para inspecionar elementos
519
+ npm run debug:preprod
520
+ \`\`\`
521
+
522
+ ### Performance lenta
523
+ \`\`\`bash
524
+ # Reduzir workers em CI
525
+ workers: process.env.WORKERS ? 1 : undefined
526
+
527
+ # Desabilitar recursos desnecessários
528
+ video: 'retain-on-failure' # Ao invés de 'on'
529
+ \`\`\`
530
+
531
+ ### Atualizar dependências
532
+ \`\`\`bash
533
+ npx npm-check-updates -u && npm install
534
+ npx playwright install # Atualizar browsers
535
+ \`\`\`
536
+
537
+ ## 📝 Contribuição
538
+
539
+ 1. Mantenha os padrões de código (Biome configurado)
540
+ 2. Adicione testes para novas funcionalidades
541
+ 3. Use o Page Object Model
542
+ 4. Documente seletores complexos
543
+ 5. Valide em múltiplos browsers quando relevante
544
+
545
+ ## 📚 Referências
546
+
547
+ - [AutoCore WebSite](http://brtlvlty0559pl:3002/)
548
+ - [Playwright Documentation](https://playwright.dev/)
549
+ - [Page Object Model](https://playwright.dev/docs/pom)
550
+ - [Best Practices](https://playwright.dev/docs/best-practices)
551
+
552
+ ---
553
+
554
+ **Gerado automaticamente pelo AutoCore v${versions?.dependencies?.['@silasfmartins/testhub'] || 'latest'}**
555
+ `);
556
+ // 📊 README específico para Coverage
557
+ const coverageReadmeTemplate = generateCoverageReadme(projectName);
558
+ write('docs/COVERAGE.md', coverageReadmeTemplate);
559
+ console.log('📊 Documentação de cobertura criada: docs/COVERAGE.md');
560
+ // 📦 Instalação de dependências NPM
561
+ console.log('📦 Instalando dependências NPM...');
562
+ try {
563
+ execSync('npm install', {
564
+ stdio: 'inherit',
565
+ cwd: root,
566
+ });
567
+ console.log('✅ Dependências NPM instaladas com sucesso');
568
+ }
569
+ catch (err) {
570
+ console.warn('⚠️ Erro ao instalar dependências automaticamente', err);
571
+ console.log('💡 Execute manualmente: npm install');
572
+ }
573
+ // 🎭 CRÍTICO: Sempre instalar browsers Playwright
574
+ console.log('🎭 Instalando browsers Playwright...');
575
+ try {
576
+ execSync('npx playwright install', {
577
+ stdio: 'inherit',
578
+ cwd: root,
579
+ });
580
+ console.log('✅ Browsers Playwright instalados com sucesso');
581
+ }
582
+ catch (err) {
583
+ console.warn('⚠️ Erro ao instalar browsers automaticamente', err);
584
+ console.log('💡 Execute manualmente: npx playwright install');
585
+ }
586
+ // ✅ Configurar Ultracite automaticamente
587
+ console.log('🤖 Configurando ambiente de desenvolvimento...');
588
+ await setupUltracite(root);
589
+ // ✅ Garantir sincronização final do biome.json
590
+ console.log('🔧 Sincronizando configuração do Biome...');
591
+ const finalBiomeConfig = generateBiomeConfigString();
592
+ write('biome.json', finalBiomeConfig);
593
+ // ✅ Instalação finalizada com sucesso
594
+ console.log('');
595
+ console.log('🎉 Projeto Frontend gerado com sucesso!');
596
+ console.log('');
597
+ console.log('📋 Próximos passos:');
598
+ console.log(' 1. Configure suas variáveis de ambiente nos arquivos .env.*');
599
+ console.log(' 2. Adicione sua BASE_URL nos ambientes');
600
+ console.log(' 3. Execute: npm run test:preprod');
601
+ console.log(' 4. O Ultracite está configurado para VS Code');
602
+ console.log('');
603
+ console.log('🛠️ Comandos úteis:');
604
+ console.log(' npm run test:preprod - Executar testes em preprod');
605
+ console.log(' npm run test:esteira1 - Executar testes em esteira1');
606
+ console.log(' npm run test:esteira2 - Executar testes em esteira2');
607
+ console.log(' npm run test:prodlike - Executar testes em prodlike');
608
+ console.log(' npm run ui:preprod - Interface visual dos testes');
609
+ console.log(' npm run debug:preprod - Modo debug');
610
+ console.log(' npx biome check - Verificar código com Biome');
611
+ console.log(' npx biome format - Formatar código com Biome');
612
+ console.log('');
613
+ console.log('✅ Configurações sincronizadas com AutoCore:');
614
+ console.log(' 📝 tsconfig.json - Compilação TypeScript');
615
+ console.log(' 🎨 biome.json - Linting e formatação (SINCRONIZADO)');
616
+ console.log(' 🤖 Ultracite - Experiência de desenvolvimento');
617
+ console.log(' 📦 Dependências - Versões mais recentes');
618
+ console.log(' 🎭 Playwright - Configuração otimizada para frontend');
619
+ console.log(' 🌐 Browsers - Chromium, Firefox e WebKit instalados');
620
+ console.log('');
621
+ console.log('🚀 Projeto pronto para desenvolvimento de testes frontend!');
622
+ }
623
+ // Executar função principal
624
+ main().catch((error) => {
625
+ console.error('❌ Erro durante inicialização:', error);
626
+ process.exit(1);
627
+ });
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};