@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,558 @@
1
+ #!/usr/bin/env node
2
+ // @ts-nocheck
3
+
4
+ import fs from 'node:fs'
5
+ import { execSync } from 'child_process'
6
+ import yaml from 'js-yaml'
7
+ import path from 'path'
8
+ import {
9
+ generateBiomeConfigString,
10
+ generatePackageJson,
11
+ generateTsConfigForProject,
12
+ generateVitestConfigString,
13
+ getLatestVersions,
14
+ } from './package-versions.js'
15
+ import { setupUltracite } from './ultracite-setup.js'
16
+
17
+ const root = process.cwd()
18
+ const catalogPath = path.join(root, 'catalog-info.yaml')
19
+
20
+ if (!fs.existsSync(catalogPath)) {
21
+ console.error('❌ Arquivo catalog-info.yaml não encontrado.')
22
+ process.exit(1)
23
+ }
24
+
25
+ const catalog = yaml.load(fs.readFileSync(catalogPath, 'utf-8')) as any
26
+ const projectName = catalog?.metadata?.name || 'meu-projeto'
27
+ const projectNameUnderscore = projectName.replace(/-/g, '_')
28
+
29
+ const write = (filePath: string, content: string) => {
30
+ const fullPath = path.join(root, filePath)
31
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true })
32
+ fs.writeFileSync(fullPath, content)
33
+ }
34
+
35
+ async function main() {
36
+ console.log('🚀 Inicializando projeto Mobile com versões atualizadas...')
37
+ console.log(`📦 Projeto: ${projectName}`)
38
+ console.log('')
39
+
40
+ // ✅ Buscar versões mais recentes
41
+ const versions = await getLatestVersions()
42
+
43
+ // ✅ Gerar package.json com versões atualizadas
44
+ const packageJsonContent = generatePackageJson(
45
+ projectName,
46
+ 'mobile',
47
+ versions,
48
+ )
49
+
50
+ // ✅ Gerar tsconfig.json baseado no AutoCore
51
+ const tsconfigContent = generateTsConfigForProject('mobile')
52
+
53
+ // ✅ Gerar vitest.config.ts baseado no AutoCore (NOVO!)
54
+ const vitestConfigContent = generateVitestConfigString('mobile')
55
+
56
+ // ✅ Gerar biome.json sincronizado com AutoCore
57
+ const biomeConfigContent = generateBiomeConfigString()
58
+
59
+ console.log('📝 Criando arquivos do projeto...')
60
+
61
+ // package.json com versões dinâmicas
62
+ write('package.json', JSON.stringify(packageJsonContent, null, 2))
63
+
64
+ // ✅ tsconfig.json sempre sincronizado com o AutoCore
65
+ write('tsconfig.json', JSON.stringify(tsconfigContent, null, 2))
66
+
67
+ // ✅ vitest.config.ts sempre sincronizado com o AutoCore (NOVO!)
68
+ write('vitest.config.ts', vitestConfigContent)
69
+
70
+ // ✅ biome.json sincronizado automaticamente com o AutoCore
71
+ write('biome.json', biomeConfigContent)
72
+
73
+ // playwright.config.ts
74
+ write(
75
+ 'playwright.config.ts',
76
+ `import { defineConfig } from '@playwright/test';
77
+ export default defineConfig({
78
+ globalSetup: '@silasfmartins/testhub/setup',
79
+ reporter: [
80
+ ['list'],
81
+ ['html', { open: 'never' }],
82
+ ['@silasfmartins/testhub/reporter'],
83
+ ],
84
+ testDir: './tests',
85
+ testMatch: ['**/*.spec.ts', '**/*.test.ts'],
86
+ timeout: 120_000, // 2 minutos para cada teste/hook
87
+ use: {
88
+ trace: 'on',
89
+ },
90
+ });
91
+ `,
92
+ )
93
+
94
+ // .npmrc
95
+ write(
96
+ '.npmrc',
97
+ `registry=https://pkgs.dev.azure.com/telefonica-vivo-brasil/_packaging/DevOps/npm/registry/`,
98
+ )
99
+
100
+ // .gitignore otimizado para mobile
101
+ write(
102
+ '.gitignore',
103
+ `# Mobile específicos
104
+ node_modules/
105
+ /logs/
106
+ apps/*.app
107
+ apps/*.apk
108
+ apps/*.ipa
109
+
110
+ # Appium logs
111
+ appium.log
112
+ appium-*.log
113
+
114
+ # Environment files
115
+ .env
116
+ .env.preprod
117
+ .env.esteira1
118
+ .env.esteira2
119
+ .env.prodlike
120
+
121
+ .vscode
122
+ .vscode/
123
+ docs
124
+ docs/
125
+
126
+ # AutoCore específicos
127
+ .test-data-store.json
128
+ .env.lock
129
+ .configlogger.lock
130
+ .rbqa
131
+ .rbqa/
132
+
133
+ # VS Code
134
+ .vscode/settings.json
135
+
136
+ # Build
137
+ /dist
138
+
139
+ # Biome
140
+ .biome.log
141
+
142
+ # Test results
143
+ /test-results/
144
+ /wdio-logs/
145
+ screenshots/
146
+ videos/
147
+
148
+ # iOS específicos
149
+ *.xcarchive
150
+ DerivedData/
151
+
152
+ # Android específicos
153
+ *.keystore
154
+ local.properties`,
155
+ )
156
+
157
+ // Configurações de environment
158
+ write(
159
+ '.env',
160
+ `# Configurações de ambiente para preprod - Mobile
161
+ ENV=preprod`,
162
+ )
163
+
164
+ write('.env.preprod', '# Configurações de ambiente para preprod - Mobile')
165
+
166
+ write('.env.esteira1', '# Configurações de ambiente para esteira1 - Mobile')
167
+
168
+ // ✅ Estrutura de testes
169
+ console.log('📝 Criando estrutura de testes...')
170
+
171
+ //env.ts
172
+ write('src/env.ts', `import { config } from 'dotenv'
173
+
174
+ config()
175
+
176
+ const rawEnv = {
177
+ ENV: process.env.ENV,
178
+ }
179
+ export const env = rawEnv
180
+ `)
181
+
182
+ write('.env.esteira2', '# Configurações de ambiente para esteira2 - Mobile')
183
+
184
+ write('.env.prodlike', '# Configurações de ambiente para prodlike - Mobile')
185
+
186
+ // Page Object simples para Login
187
+ write(
188
+ 'src/pages/MobileLoginPage.ts',
189
+ `import { Logger, MobileActions } from '@silasfmartins/testhub'
190
+ import { AttributesMobile } from '../attributes/MobileLoginAttributes.js'
191
+
192
+ export default class PageMobile extends AttributesMobile {
193
+ async searchScreenBlocked() {
194
+ Logger.info('Executando o método: searchScreenBlocked')
195
+ await MobileActions.click(
196
+ this.searchSettings,
197
+ 'Click no ícone de Pesquisar',
198
+ true
199
+ )
200
+ }
201
+ }
202
+ `,
203
+ )
204
+
205
+ // Attributes simples para mobile
206
+ write(
207
+ 'src/attributes/MobileLoginAttributes.ts',
208
+ `export class AttributesMobile {
209
+ protected searchSettings = 'android=new UiSelector().className("android.widget.Button")';
210
+ protected searchSettingsField = 'android=com.android.settings.intelligence:id/search_src_text';
211
+
212
+ protected labelBlockScreen() {
213
+ return '//android.widget.TextView[@resource-id="android:id/title" and @text="Tipo de bloqueio de tela"]';
214
+ }
215
+ }
216
+ `,
217
+ )
218
+
219
+ // Exemplo de teste mobile simples
220
+ write(
221
+ 'tests/mobile-login.spec.ts',
222
+ `
223
+ import { type TestInfo, test, TestAnnotations } from '@silasfmartins/testhub';
224
+ import PageMobile from '../src/pages/MobileLoginPage.js';
225
+
226
+ test.describe('CN001 Cadastro de Cliente - Mobile', () => {
227
+ TestAnnotations.stopOnFailure(); // opcional: para o runner ao falhar um CT
228
+
229
+ test('CT001 - Teste Mobile [octane-123456]', async ({}, testInfo: TestInfo) => {
230
+ TestAnnotations.Mobile.testInfo = testInfo;
231
+ await TestAnnotations.setSystem('MEU_SISTEMA');
232
+
233
+ await TestAnnotations.setupMobileCapabilities({
234
+ deviceId: '65e899f0b22fda8447c89146',
235
+ platformName: 'Android',
236
+ appPackage: 'com.android.settings',
237
+ appActivity: '.Settings'
238
+ });
239
+
240
+ await new PageMobile().searchScreenBlocked();
241
+ });
242
+ });
243
+ `,
244
+ )
245
+
246
+ // Azure DevOps pipeline
247
+ write(
248
+ '.azuredevops/azure-pipeline.yml',
249
+ `trigger:
250
+ batch: true
251
+ branches:
252
+ include:
253
+ - 'master'
254
+ paths:
255
+ include:
256
+ - '*'
257
+ exclude:
258
+ - .azuredevops/*
259
+ - docs/*
260
+ - catalog-info.yaml
261
+ - mkdocs.yml
262
+ - scripts.py
263
+ - catalog/*
264
+
265
+ resources:
266
+ repositories:
267
+ - repository: CodePlay
268
+ name: DevOps/Vivo.CodePlay.Pipelines
269
+ type: git
270
+ ref: refs/heads/test-playwright
271
+ endpoint: CodePlay
272
+
273
+ pool:
274
+ name: GeneralPurposeLinuxAgentsCI
275
+
276
+ extends:
277
+ template: tech_products/qa/build/pipeline_node_npm.yml@CodePlay
278
+ parameters:
279
+ jobName: 'build_${projectNameUnderscore}_pkg'
280
+ commitSHA: '$(Build.SourceVersion)'
281
+ registryServiceConnection: 'ACR-DEVOPS'
282
+ govAppAcronym: ''
283
+ skipScan: false
284
+ `,
285
+ )
286
+
287
+ // SonarQube configuration
288
+ write(
289
+ '.azuredevops/sonar-project.properties',
290
+ `################### NÃO ALTERAR!!! ###################
291
+ # Informações gerais sobre o projeto. #
292
+ # Todas as variáveis de ambiente são fornecidas pela #
293
+ # automação, não alterar! #
294
+ ######################################################
295
+
296
+ sonar.projectDescription=Projeto de API com AutoCore
297
+ sonar.analysis.orgName=\${env.AZ_ORG_NAME}
298
+ sonar.analysis.buildAuthor=\${env.AZ_BUILD_AUTHOR}
299
+ sonar.scm.exclusions.disabled=false
300
+ sonar.scm.forceReloadAll=true
301
+ sonar.log.level=DEBUG
302
+ sonar.verbose=true
303
+ sonar.sourceEncoding=UTF-8
304
+
305
+ # Diretórios e arquivos relevantes para Node.js/TypeScript
306
+ sonar.sources=src
307
+ sonar.inclusions=**/*.ts
308
+ sonar.test.inclusions=**/*.spec.ts,**/*.test.ts
309
+ sonar.typescript.lcov.reportPaths=coverage/lcov.info
310
+ sonar.javascript.lcov.reportPaths=coverage/lcov.info
311
+
312
+ # Exclusões de cobertura e análise
313
+ sonar.exclusions=node_modules/**,dist/**,coverage/**,**/*.config.js,**/*.config.ts
314
+ sonar.coverage.exclusions=**/*.d.ts,node_modules/**,dist/**,coverage/**,**/*.config.js,**/*.config.ts,**/*.spec.ts,**/*.test.ts
315
+ sonar.test.exclusions=node_modules/**,dist/**,coverage/**
316
+
317
+ # Configurações específicas para projetos API
318
+ sonar.javascript.environments=node
319
+ sonar.typescript.node=true
320
+ `,
321
+ )
322
+
323
+ // README.md
324
+ write(
325
+ 'README.md',
326
+ `# ${projectName}
327
+
328
+ Projeto de automação Mobile baseado no AutoCore.
329
+
330
+ ## 🚀 Como usar
331
+
332
+ ### Pré-requisitos
333
+ 1. **Node.js**: Versão 24+ instalada
334
+ 2. **Android Studio**: Para testes Android (com SDK configurado)
335
+ 3. **Xcode**: Para testes iOS (apenas macOS)
336
+ 4. **Appium Inspector**: Faça Download aqui (https://github.com/appium/appium-inspector/releases)
337
+
338
+ ### Instalação de dependências
339
+ \`\`\`bash
340
+ npm install
341
+ \`\`\`
342
+
343
+ ### Gerar Artefato para Projetos de Cenários
344
+ npm run build
345
+
346
+ ### Configurar apps
347
+ 1. Coloque os arquivos APK (Android) e APP (iOS) na pasta \`apps/\`
348
+ 2. Configure os package names corretos nos arquivos \`.env.*\`
349
+
350
+ ### Executar testes
351
+
352
+ #### Android
353
+ \`\`\`bash
354
+ npm run test:preprod:android
355
+ npm run test:esteira1:android
356
+ npm run test:esteira2:android
357
+ npm run test:prodlike:android
358
+ \`\`\`
359
+
360
+ #### iOS
361
+ \`\`\`bash
362
+ npm run test:preprod:ios
363
+ npm run test:esteira1:ios
364
+ npm run test:esteira2:ios
365
+ npm run test:prodlike:ios
366
+ \`\`\`
367
+
368
+ ## 📋 Estrutura do projeto
369
+
370
+ \`\`\`
371
+ ${projectName}/
372
+ ├── src/
373
+ │ ├── pages/ # Page Objects para mobile
374
+ │ └── attributes/ # Seletores e elementos
375
+ | └── env.ts # Configuração de environment
376
+ ├── tests/ # Testes mobile
377
+ ├── apps/ # Arquivos APK e APP
378
+ ├── .env.* # Variáveis de ambiente por ambiente
379
+ ├── tsconfig.json # Configuração TypeScript (sincronizada)
380
+ ├── biome.json # Configuração Biome (sincronizada)
381
+ └── README.md # Esta documentação
382
+ \`\`\`
383
+
384
+ ## 🔧 Desenvolvimento
385
+
386
+ - **TypeScript**: Configurado e sincronizado com AutoCore
387
+ - **AutoCore**: Biblioteca de utilitários para automação
388
+ - **Biome**: Linting e formatação (configuração sincronizada)
389
+ - **Ultracite**: Experiência de desenvolvimento aprimorada
390
+
391
+ ## 📊 Relatórios
392
+
393
+ Os relatórios são gerados automaticamente em:
394
+ - \`test-results/\` - Resultados detalhados e artifacts
395
+ - Screenshots automáticos em falhas
396
+ - Logs estruturados no console
397
+
398
+ ## 🧪 Exemplos de Uso
399
+
400
+ ### Teste básico de login
401
+ \`\`\`typescript
402
+ import { type TestInfo, test, TestAnnotations } from '@silasfmartins/testhub';
403
+ import PageMobile from '../src/pages/PageMobile.js';
404
+
405
+ test.describe('CN001 Cadastro de Cliente - Mobile', () => {
406
+ TestAnnotations.stopOnFailure(); // opcional: para o runner ao falhar um CT
407
+
408
+ test('CT001 - Teste Mobile [octane-123456]', async ({}, testInfo: TestInfo) => {
409
+ TestAnnotations.Mobile.testInfo = testInfo;
410
+ await TestAnnotations.setSystem('MEU_SISTEMA');
411
+
412
+ await TestAnnotations.setupMobileCapabilities({
413
+ deviceId: '65e899f0b22fda8447c89146',
414
+ platformName: 'Android',
415
+ appPackage: 'com.android.settings',
416
+ appActivity: '.Settings'
417
+ });
418
+
419
+ await new PageMobile().searchScreenBlocked();
420
+ });
421
+ });
422
+ \`\`\`
423
+
424
+ ## 🔧 Comandos Úteis
425
+
426
+ \`\`\`bash
427
+ # Desenvolvimento
428
+ npm run test:preprod:android # Executar testes Android em preprod
429
+ npm run test:preprod:ios # Executar testes iOS em preprod
430
+ npm run appium:start # Iniciar servidor Appium
431
+ npm run appium:doctor # Verificar configuração Appium
432
+
433
+ # Qualidade de código
434
+ npx biome check # Verificar código com Biome
435
+ npx biome format # Formatar código com Biome
436
+ npx biome check --apply # Aplicar correções automáticas
437
+ \`\`\`
438
+
439
+ ## 🔄 Sincronização com AutoCore
440
+
441
+ Este projeto mantém sincronização automática com o AutoCore para:
442
+
443
+ - **tsconfig.json**: Configuração de compilação TypeScript
444
+ - **biome.json**: Configuração de linting e formatação
445
+ - **Versões de dependências**: Sempre atualizadas
446
+
447
+ ## 📈 Métricas e Monitoramento
448
+
449
+ - **Relatórios**: Visualização rica dos resultados
450
+ - **Logs estruturados**: Para análise e debugging
451
+ - **Screenshots automáticos**: Em caso de falhas
452
+ - **Traces**: Para análise detalhada de execução
453
+
454
+ ## 🆘 Resolução de Problemas
455
+
456
+ ### Verificar ambiente
457
+ \`\`\`bash
458
+ # Verificar Node.js
459
+ node --version
460
+
461
+ # Verificar Appium
462
+ npm run appium:check
463
+ npm run appium:doctor
464
+
465
+ # Verificar Android
466
+ adb devices
467
+
468
+ # Verificar iOS (macOS)
469
+ xcrun simctl list
470
+ \`\`\`
471
+
472
+ ### Problemas comuns
473
+ - **App não instala**: Verifique assinatura e permissões
474
+ - **App não abre**: Verifique package name/bundle ID
475
+ - **Appium não conecta**: Verifique se servidor está rodando
476
+ - **Elementos não encontrados**: Verifique accessibility IDs no app
477
+
478
+ ---
479
+
480
+ **Gerado automaticamente pelo AutoCore v${versions?.dependencies?.['@silasfmartins/testhub'] || 'latest'}**
481
+
482
+ ## 📚 Referências
483
+
484
+ - [AutoCore WebSite](http://brtlvlty0559pl:3002/pt/login)
485
+ - [Appium Documentation](https://appium.io/)
486
+ `,
487
+ )
488
+
489
+ console.log('📦 Instalando dependências...')
490
+
491
+ const installLockPath = path.join(root, '.install.lock')
492
+ if (fs.existsSync(installLockPath)) {
493
+ // Pula npm install se o lock já existe
494
+ console.log('🔄 Dependências já instaladas, pulando npm install')
495
+ } else {
496
+ // Executa npm install e cria o lock
497
+ console.log('📦 Instalando dependências...')
498
+ try {
499
+ execSync('npm install', {
500
+ stdio: 'inherit',
501
+ cwd: root,
502
+ })
503
+ fs.writeFileSync(installLockPath, 'ok')
504
+ console.log('✅ Dependências instaladas com sucesso')
505
+ } catch (error) {
506
+ console.warn('⚠️ Erro ao instalar dependências automaticamente')
507
+ console.log('💡 Execute manualmente: npm install')
508
+ }
509
+ }
510
+
511
+ // ✅ Configurar Ultracite automaticamente
512
+ console.log('🤖 Configurando ambiente de desenvolvimento...')
513
+ await setupUltracite(root)
514
+
515
+ // ✅ Garantir sincronização final do biome.json
516
+ console.log('🔧 Sincronizando configuração do Biome...')
517
+ const finalBiomeConfig = generateBiomeConfigString()
518
+ write('biome.json', finalBiomeConfig)
519
+
520
+ // Remover o lock após tudo finalizar
521
+ if (fs.existsSync(installLockPath)) {
522
+ fs.unlinkSync(installLockPath)
523
+ console.log('🗑️ Lock de instalação removido')
524
+ }
525
+
526
+ console.log('')
527
+ console.log('🎉 Projeto Mobile gerado com sucesso!')
528
+ console.log('')
529
+ console.log('📋 Próximos passos:')
530
+ console.log(' 1. Configure os package names nos arquivos .env.*')
531
+ console.log(' 2. Coloque os arquivos APK/APP na pasta apps/')
532
+ console.log(' 3. Execute: npm run appium:start')
533
+ console.log(' 4. Execute: npm run test:preprod:android')
534
+ console.log(' 5. O Ultracite está configurado para VS Code')
535
+ console.log('')
536
+ console.log('🛠️ Comandos úteis:')
537
+ console.log(' npm run test:preprod:android - Executar testes Android')
538
+ console.log(' npm run test:preprod:ios - Executar testes iOS')
539
+ console.log(' npm run appium:start - Iniciar servidor Appium')
540
+ console.log(' npm run appium:doctor - Verificar configuração')
541
+ console.log(' npx biome check - Verificar código')
542
+ console.log(' npx biome format - Formatar código')
543
+ console.log('')
544
+ console.log('✅ Configurações sincronizadas com AutoCore:')
545
+ console.log(' 📝 tsconfig.json - Compilação TypeScript')
546
+ console.log(' 🎨 biome.json - Linting e formatação (SINCRONIZADO)')
547
+ console.log(' 🤖 Ultracite - Experiência de desenvolvimento')
548
+ console.log(' 📦 Dependências - Versões mais recentes')
549
+ console.log(' 📱 WebdriverIO - Configuração otimizada para mobile')
550
+ console.log('')
551
+ console.log('🚀 Projeto pronto para desenvolvimento mobile!')
552
+ }
553
+
554
+ // Executar função principal
555
+ main().catch((error) => {
556
+ console.error('❌ Erro durante inicialização:', error)
557
+ process.exit(1)
558
+ })