@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.
- package/.github/copilot-instructions.md +520 -0
- package/biome.json +37 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +169 -0
- package/dist/scripts/consumer-postinstall.d.ts +15 -0
- package/dist/scripts/consumer-postinstall.js +785 -0
- package/dist/scripts/generate-docs.d.ts +16 -0
- package/dist/scripts/generate-docs.js +1363 -0
- package/dist/scripts/generate-index.d.ts +2 -0
- package/dist/scripts/generate-index.js +314 -0
- package/dist/scripts/init-api.d.ts +2 -0
- package/dist/scripts/init-api.js +525 -0
- package/dist/scripts/init-banco.d.ts +2 -0
- package/dist/scripts/init-banco.js +347 -0
- package/dist/scripts/init-frontend.d.ts +2 -0
- package/dist/scripts/init-frontend.js +627 -0
- package/dist/scripts/init-mobile.d.ts +2 -0
- package/dist/scripts/init-mobile.js +481 -0
- package/dist/scripts/init-scenarios.d.ts +2 -0
- package/dist/scripts/init-scenarios.js +846 -0
- package/dist/scripts/init-ssh.d.ts +2 -0
- package/dist/scripts/init-ssh.js +639 -0
- package/dist/scripts/package-versions.d.ts +57 -0
- package/dist/scripts/package-versions.js +768 -0
- package/dist/scripts/postinstall.d.ts +1 -0
- package/dist/scripts/postinstall.js +527 -0
- package/dist/scripts/robust-build.d.ts +7 -0
- package/dist/scripts/robust-build.js +88 -0
- package/dist/scripts/setup-local-packages.d.ts +31 -0
- package/dist/scripts/setup-local-packages.js +237 -0
- package/dist/scripts/smart-override.d.ts +2 -0
- package/dist/scripts/smart-override.js +1360 -0
- package/dist/scripts/sync-configs.d.ts +27 -0
- package/dist/scripts/sync-configs.js +248 -0
- package/dist/scripts/test-biome-parse.d.ts +5 -0
- package/dist/scripts/test-biome-parse.js +84 -0
- package/dist/scripts/ultracite-setup.d.ts +4 -0
- package/dist/scripts/ultracite-setup.js +310 -0
- package/dist/scripts/update-all-init-scripts.d.ts +2 -0
- package/dist/scripts/update-all-init-scripts.js +52 -0
- package/dist/scripts/update-biome-schema.d.ts +15 -0
- package/dist/scripts/update-biome-schema.js +124 -0
- package/dist/src/AutoCoreFacade.d.ts +145 -0
- package/dist/src/AutoCoreFacade.js +217 -0
- package/dist/src/api/ApiActions.d.ts +297 -0
- package/dist/src/api/ApiActions.js +1905 -0
- package/dist/src/api/Certificate.d.ts +60 -0
- package/dist/src/api/Certificate.js +79 -0
- package/dist/src/api/JsonResponse.d.ts +116 -0
- package/dist/src/api/JsonResponse.js +206 -0
- package/dist/src/appium/DeviceFarmViewer.d.ts +79 -0
- package/dist/src/appium/DeviceFarmViewer.js +1083 -0
- package/dist/src/appium/MobileActions.d.ts +347 -0
- package/dist/src/appium/MobileActions.js +1632 -0
- package/dist/src/appium/MobileConnection.d.ts +160 -0
- package/dist/src/appium/MobileConnection.js +772 -0
- package/dist/src/config/envLoader.d.ts +123 -0
- package/dist/src/config/envLoader.js +361 -0
- package/dist/src/config/jest-safe-setup.d.ts +19 -0
- package/dist/src/config/jest-safe-setup.js +369 -0
- package/dist/src/config/timeouts.d.ts +32 -0
- package/dist/src/config/timeouts.js +38 -0
- package/dist/src/desktop/DesktopActions.d.ts +46 -0
- package/dist/src/desktop/DesktopActions.js +398 -0
- package/dist/src/desktop/DesktopConnection.d.ts +32 -0
- package/dist/src/desktop/DesktopConnection.js +84 -0
- package/dist/src/domain/entities/TestExecution.d.ts +117 -0
- package/dist/src/domain/entities/TestExecution.js +150 -0
- package/dist/src/domain/entities/TestReport.d.ts +114 -0
- package/dist/src/domain/entities/TestReport.js +179 -0
- package/dist/src/domain/repositories/ITestRepository.d.ts +196 -0
- package/dist/src/domain/repositories/ITestRepository.js +14 -0
- package/dist/src/domain/schemas/ValidationSchemas.d.ts +159 -0
- package/dist/src/domain/schemas/ValidationSchemas.js +181 -0
- package/dist/src/functions/errors/BaseError.d.ts +78 -0
- package/dist/src/functions/errors/BaseError.js +245 -0
- package/dist/src/functions/errors/ConfigurationError.d.ts +16 -0
- package/dist/src/functions/errors/ConfigurationError.js +48 -0
- package/dist/src/functions/errors/ErrorCatalog.d.ts +148 -0
- package/dist/src/functions/errors/ErrorCatalog.js +157 -0
- package/dist/src/functions/errors/GlobalErrorHandler.d.ts +101 -0
- package/dist/src/functions/errors/GlobalErrorHandler.js +281 -0
- package/dist/src/functions/errors/IntegrationError.d.ts +17 -0
- package/dist/src/functions/errors/IntegrationError.js +51 -0
- package/dist/src/functions/errors/SecurityError.d.ts +14 -0
- package/dist/src/functions/errors/SecurityError.js +42 -0
- package/dist/src/functions/errors/SystemError.d.ts +12 -0
- package/dist/src/functions/errors/SystemError.js +36 -0
- package/dist/src/functions/errors/ValidationError.d.ts +14 -0
- package/dist/src/functions/errors/ValidationError.js +61 -0
- package/dist/src/functions/errors/index.d.ts +12 -0
- package/dist/src/functions/errors/index.js +13 -0
- package/dist/src/global-setup.d.ts +1 -0
- package/dist/src/global-setup.js +1037 -0
- package/dist/src/helpers/BancoActions.d.ts +188 -0
- package/dist/src/helpers/BancoActions.js +581 -0
- package/dist/src/helpers/EnviromentHelper.d.ts +17 -0
- package/dist/src/helpers/EnviromentHelper.js +66 -0
- package/dist/src/helpers/ParallelExecutionHelper.d.ts +183 -0
- package/dist/src/helpers/ParallelExecutionHelper.js +375 -0
- package/dist/src/helpers/SyncSignal.d.ts +15 -0
- package/dist/src/helpers/SyncSignal.js +44 -0
- package/dist/src/hubdocs/CategoryDetector.d.ts +83 -0
- package/dist/src/hubdocs/CategoryDetector.js +401 -0
- package/dist/src/hubdocs/DirectStatementInterceptor.d.ts +54 -0
- package/dist/src/hubdocs/DirectStatementInterceptor.js +243 -0
- package/dist/src/hubdocs/ExecutionTracker.d.ts +107 -0
- package/dist/src/hubdocs/ExecutionTracker.js +702 -0
- package/dist/src/hubdocs/HubDocs.d.ts +395 -0
- package/dist/src/hubdocs/HubDocs.js +3586 -0
- package/dist/src/hubdocs/StatementMethodFilter.d.ts +71 -0
- package/dist/src/hubdocs/StatementMethodFilter.js +618 -0
- package/dist/src/hubdocs/StatementTracker.d.ts +417 -0
- package/dist/src/hubdocs/StatementTracker.js +2419 -0
- package/dist/src/hubdocs/SwaggerGenerator.d.ts +59 -0
- package/dist/src/hubdocs/SwaggerGenerator.js +405 -0
- package/dist/src/hubdocs/index.d.ts +9 -0
- package/dist/src/hubdocs/index.js +9 -0
- package/dist/src/hubdocs/types.d.ts +114 -0
- package/dist/src/hubdocs/types.js +5 -0
- package/dist/src/infrastructure/DependencyContainer.d.ts +142 -0
- package/dist/src/infrastructure/DependencyContainer.js +250 -0
- package/dist/src/infrastructure/adapters/AppiumAdapter.d.ts +168 -0
- package/dist/src/infrastructure/adapters/AppiumAdapter.js +468 -0
- package/dist/src/infrastructure/adapters/OracleAdapter.d.ts +150 -0
- package/dist/src/infrastructure/adapters/OracleAdapter.js +388 -0
- package/dist/src/infrastructure/adapters/PlaywrightAdapter.d.ts +192 -0
- package/dist/src/infrastructure/adapters/PlaywrightAdapter.js +382 -0
- package/dist/src/infrastructure/adapters/SSHAdapter.d.ts +141 -0
- package/dist/src/infrastructure/adapters/SSHAdapter.js +428 -0
- package/dist/src/interfaces.d.ts +501 -0
- package/dist/src/interfaces.js +25 -0
- package/dist/src/internal/fakes/__fake-actions__.d.ts +17 -0
- package/dist/src/internal/fakes/__fake-actions__.js +21 -0
- package/dist/src/internal/fakes/__forbidden__.d.ts +10 -0
- package/dist/src/internal/fakes/__forbidden__.js +18 -0
- package/dist/src/internal/fakes/__honeypot__.d.ts +15 -0
- package/dist/src/internal/fakes/__honeypot__.js +24 -0
- package/dist/src/octane/OctaneReporter.d.ts +13 -0
- package/dist/src/octane/OctaneReporter.js +61 -0
- package/dist/src/playwright/CryptoActions.d.ts +20 -0
- package/dist/src/playwright/CryptoActions.js +75 -0
- package/dist/src/playwright/EnhancedWebActions.d.ts +7 -0
- package/dist/src/playwright/EnhancedWebActions.js +65 -0
- package/dist/src/playwright/WebActions.d.ts +1599 -0
- package/dist/src/playwright/WebActions.js +11788 -0
- package/dist/src/playwright/actions/ActionTimeline.d.ts +36 -0
- package/dist/src/playwright/actions/ActionTimeline.js +101 -0
- package/dist/src/playwright/actions/RecoveryQueue.d.ts +82 -0
- package/dist/src/playwright/actions/RecoveryQueue.js +130 -0
- package/dist/src/playwright/actions/SelectorCache.d.ts +53 -0
- package/dist/src/playwright/actions/SelectorCache.js +96 -0
- package/dist/src/playwright/actions/index.d.ts +13 -0
- package/dist/src/playwright/actions/index.js +14 -0
- package/dist/src/playwright/actions/types.d.ts +147 -0
- package/dist/src/playwright/actions/types.js +5 -0
- package/dist/src/playwright/fixtures.d.ts +112 -0
- package/dist/src/playwright/fixtures.js +718 -0
- package/dist/src/playwright/network-logs-reporter.d.ts +7 -0
- package/dist/src/playwright/network-logs-reporter.js +66 -0
- package/dist/src/playwright/registerRecoveryWrappers.d.ts +1 -0
- package/dist/src/playwright/registerRecoveryWrappers.js +54 -0
- package/dist/src/security/BuildSecurity.d.ts +12 -0
- package/dist/src/security/BuildSecurity.js +138 -0
- package/dist/src/security/EulaProtection.d.ts +70 -0
- package/dist/src/security/EulaProtection.js +155 -0
- package/dist/src/security/HoneypotManager.d.ts +46 -0
- package/dist/src/security/HoneypotManager.js +234 -0
- package/dist/src/security/KeysManager.d.ts +36 -0
- package/dist/src/security/KeysManager.js +158 -0
- package/dist/src/security/ProofOfWorkIntegration.d.ts +64 -0
- package/dist/src/security/ProofOfWorkIntegration.js +206 -0
- package/dist/src/security/SecurityValidation.d.ts +21 -0
- package/dist/src/security/SecurityValidation.js +163 -0
- package/dist/src/security/SourceMapProtection.d.ts +55 -0
- package/dist/src/security/SourceMapProtection.js +220 -0
- package/dist/src/security/protector.d.ts +1 -0
- package/dist/src/security/protector.js +97 -0
- package/dist/src/ssh/SSHActions.d.ts +262 -0
- package/dist/src/ssh/SSHActions.js +790 -0
- package/dist/src/ssh/SSHClient.d.ts +99 -0
- package/dist/src/ssh/SSHClient.js +409 -0
- package/dist/src/statements/BaseStatement.d.ts +38 -0
- package/dist/src/statements/BaseStatement.js +78 -0
- package/dist/src/testContext/AuthStateManager.d.ts +93 -0
- package/dist/src/testContext/AuthStateManager.js +256 -0
- package/dist/src/testContext/CoverageManager.d.ts +198 -0
- package/dist/src/testContext/CoverageManager.js +917 -0
- package/dist/src/testContext/TestAnnotations.d.ts +476 -0
- package/dist/src/testContext/TestAnnotations.js +2647 -0
- package/dist/src/testContext/TestContext.d.ts +138 -0
- package/dist/src/testContext/TestContext.js +369 -0
- package/dist/src/testContext/UnifiedHtmlGenerator.d.ts +7 -0
- package/dist/src/testContext/UnifiedHtmlGenerator.js +264 -0
- package/dist/src/testContext/UnifiedReportManager.d.ts +211 -0
- package/dist/src/testContext/UnifiedReportManager.js +1206 -0
- package/dist/src/testhub/DynamicConfigManager.d.ts +121 -0
- package/dist/src/testhub/DynamicConfigManager.js +320 -0
- package/dist/src/testhub/SystemsManager.d.ts +119 -0
- package/dist/src/testhub/SystemsManager.js +365 -0
- package/dist/src/testhub/TestHubClient.d.ts +335 -0
- package/dist/src/testhub/TestHubClient.js +1215 -0
- package/dist/src/testhub/TestHubReporter.d.ts +62 -0
- package/dist/src/testhub/TestHubReporter.js +576 -0
- package/dist/src/testhub/TestHubVars.d.ts +116 -0
- package/dist/src/testhub/TestHubVars.js +273 -0
- package/dist/src/utils/ActionInterceptor.d.ts +59 -0
- package/dist/src/utils/ActionInterceptor.js +741 -0
- package/dist/src/utils/ArtifactsCompressor.d.ts +43 -0
- package/dist/src/utils/ArtifactsCompressor.js +181 -0
- package/dist/src/utils/AutoLogsFinal.d.ts +47 -0
- package/dist/src/utils/AutoLogsFinal.js +148 -0
- package/dist/src/utils/CodeGenSession.d.ts +114 -0
- package/dist/src/utils/CodeGenSession.js +264 -0
- package/dist/src/utils/ConfigLogger.d.ts +133 -0
- package/dist/src/utils/ConfigLogger.js +611 -0
- package/dist/src/utils/CustomReporter.d.ts +22 -0
- package/dist/src/utils/CustomReporter.js +352 -0
- package/dist/src/utils/DataStore.d.ts +171 -0
- package/dist/src/utils/DataStore.js +484 -0
- package/dist/src/utils/DatabaseInterceptor.d.ts +19 -0
- package/dist/src/utils/DatabaseInterceptor.js +295 -0
- package/dist/src/utils/DateHelper.d.ts +16 -0
- package/dist/src/utils/DateHelper.js +120 -0
- package/dist/src/utils/DateValidator.d.ts +4 -0
- package/dist/src/utils/DateValidator.js +51 -0
- package/dist/src/utils/DocumentGenerator.d.ts +35 -0
- package/dist/src/utils/DocumentGenerator.js +129 -0
- package/dist/src/utils/EvidenceCapture.d.ts +90 -0
- package/dist/src/utils/EvidenceCapture.js +600 -0
- package/dist/src/utils/EvidenceReportGenerator.d.ts +70 -0
- package/dist/src/utils/EvidenceReportGenerator.js +799 -0
- package/dist/src/utils/FrameManagementUtil.d.ts +42 -0
- package/dist/src/utils/FrameManagementUtil.js +75 -0
- package/dist/src/utils/GlobalStatementsInterceptor.d.ts +1 -0
- package/dist/src/utils/GlobalStatementsInterceptor.js +1 -0
- package/dist/src/utils/HTMLTemplate.d.ts +1 -0
- package/dist/src/utils/HTMLTemplate.js +1034 -0
- package/dist/src/utils/InterceptacaoMagica.d.ts +23 -0
- package/dist/src/utils/InterceptacaoMagica.js +365 -0
- package/dist/src/utils/LogSanitizer.d.ts +35 -0
- package/dist/src/utils/LogSanitizer.js +110 -0
- package/dist/src/utils/Logger.d.ts +65 -0
- package/dist/src/utils/Logger.js +284 -0
- package/dist/src/utils/McpLocalClient.d.ts +141 -0
- package/dist/src/utils/McpLocalClient.js +871 -0
- package/dist/src/utils/PDFEvidenceGenerator.d.ts +20 -0
- package/dist/src/utils/PDFEvidenceGenerator.js +156 -0
- package/dist/src/utils/SpecFileAnalyzer.d.ts +35 -0
- package/dist/src/utils/SpecFileAnalyzer.js +209 -0
- package/dist/src/utils/StatementInterceptor.d.ts +18 -0
- package/dist/src/utils/StatementInterceptor.js +87 -0
- package/dist/src/utils/StatementLogger.d.ts +33 -0
- package/dist/src/utils/StatementLogger.js +113 -0
- package/dist/src/utils/StatementsInterceptor.d.ts +1 -0
- package/dist/src/utils/StatementsInterceptor.js +1 -0
- package/dist/src/utils/TeamsFlushHook.d.ts +17 -0
- package/dist/src/utils/TeamsFlushHook.js +168 -0
- package/dist/src/utils/TerminalLogCapture.d.ts +158 -0
- package/dist/src/utils/TerminalLogCapture.js +531 -0
- package/dist/src/utils/TestMethodLogger.d.ts +70 -0
- package/dist/src/utils/TestMethodLogger.js +95 -0
- package/dist/src/utils/UnifiedTeardown.d.ts +4 -0
- package/dist/src/utils/UnifiedTeardown.js +400 -0
- package/dist/src/utils/XPathCatalog.d.ts +152 -0
- package/dist/src/utils/XPathCatalog.js +350 -0
- package/dist/src/utils/generators.d.ts +90 -0
- package/dist/src/utils/generators.js +167 -0
- package/dist/src/utils/testRecovery/ResilientPlaywright.d.ts +152 -0
- package/dist/src/utils/testRecovery/ResilientPlaywright.js +715 -0
- package/dist/src/utils/testRecovery/TestRecoveryClient.d.ts +801 -0
- package/dist/src/utils/testRecovery/TestRecoveryClient.js +1415 -0
- package/dist/src/utils/testRecovery/autoFixCode.d.ts +65 -0
- package/dist/src/utils/testRecovery/autoFixCode.js +32 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +59 -0
- package/dist/wdio.conf.d.ts +1 -0
- package/dist/wdio.conf.js +420 -0
- package/package.json +137 -0
- package/protect-loader.mjs +643 -0
- package/scripts/consumer-postinstall.ts +975 -0
- package/scripts/generate-index.ts +343 -0
- package/scripts/init-api.ts +613 -0
- package/scripts/init-banco.ts +437 -0
- package/scripts/init-frontend.ts +727 -0
- package/scripts/init-mobile.ts +558 -0
- package/scripts/init-scenarios.ts +925 -0
- package/scripts/init-ssh.ts +734 -0
- package/scripts/package-versions.ts +978 -0
- package/scripts/postinstall.ts +605 -0
- package/scripts/smart-override.ts +1675 -0
- package/scripts/sync-configs.ts +302 -0
- package/scripts/ultracite-setup.ts +370 -0
- package/src/types/globals.d.ts +48 -0
- package/tsconfig.json +29 -0
- 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
|
+
})
|