@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,1363 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
/**
|
|
4
|
+
* Gerador de Documentação Estática do AutoCore
|
|
5
|
+
*
|
|
6
|
+
* Este script gera documentação estática moderna com TailwindCSS
|
|
7
|
+
* inspirada no HTMLTemplate do framework.
|
|
8
|
+
*/
|
|
9
|
+
import fs from 'node:fs';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = path.dirname(__filename);
|
|
14
|
+
// Função de logging silenciosa para evitar lint errors
|
|
15
|
+
const log = {
|
|
16
|
+
info: (..._args) => {
|
|
17
|
+
// Logging silencioso - pode ser habilitado via debug flag
|
|
18
|
+
if (process.env.DEBUG) {
|
|
19
|
+
// biome-ignore lint/suspicious/noConsole: Debug mode only
|
|
20
|
+
console.log(..._args);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
error: (..._args) => {
|
|
24
|
+
// Errors sempre mostrados
|
|
25
|
+
// biome-ignore lint/suspicious/noConsole: Error reporting
|
|
26
|
+
console.error(..._args);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Obtém a versão dinâmica do projeto
|
|
31
|
+
*/
|
|
32
|
+
function getProjectVersion() {
|
|
33
|
+
try {
|
|
34
|
+
const pkgPath = path.join(__dirname, '..', 'package.json');
|
|
35
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
36
|
+
return pkg.version || '1.0.0';
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Removido console.warn para evitar lint error
|
|
40
|
+
return '1.0.0';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Configuração da documentação
|
|
44
|
+
const DOCS_CONFIG = {
|
|
45
|
+
title: 'AutoCore Framework',
|
|
46
|
+
subtitle: 'Framework de Componentes para Automação de Testes',
|
|
47
|
+
version: getProjectVersion(),
|
|
48
|
+
description: 'Framework que fornece componentes reutilizáveis para automação de API, Web, Mobile, SSH e Banco de Dados',
|
|
49
|
+
outputDir: path.join(__dirname, '..', 'docs'),
|
|
50
|
+
projectName: 'AutoCore',
|
|
51
|
+
environment: 'production',
|
|
52
|
+
executionDate: new Date().toISOString(),
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Gera o arquivo index.html principal inspirado no HTMLTemplate
|
|
56
|
+
*/
|
|
57
|
+
function generateIndexHtml() {
|
|
58
|
+
const template = `<!DOCTYPE html>
|
|
59
|
+
<html lang="pt-BR">
|
|
60
|
+
<head>
|
|
61
|
+
<meta charset="UTF-8" />
|
|
62
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
63
|
+
<title>${DOCS_CONFIG.title}</title>
|
|
64
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
65
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
66
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
|
|
67
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
|
|
68
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js"></script>
|
|
69
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-typescript.min.js"></script>
|
|
70
|
+
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />
|
|
71
|
+
<style>
|
|
72
|
+
body {
|
|
73
|
+
font-family: 'Inter', sans-serif;
|
|
74
|
+
background-color: #0f172a;
|
|
75
|
+
color: #f1f5f9;
|
|
76
|
+
min-height: 100vh;
|
|
77
|
+
}
|
|
78
|
+
.light-mode {
|
|
79
|
+
background-color: #f9fafb !important;
|
|
80
|
+
color: #222 !important;
|
|
81
|
+
}
|
|
82
|
+
.card {
|
|
83
|
+
background: #1e293b;
|
|
84
|
+
border-radius: 1rem;
|
|
85
|
+
padding: 1.5rem;
|
|
86
|
+
box-shadow: 0 2px 8px #0002;
|
|
87
|
+
margin-bottom: 1.5rem;
|
|
88
|
+
}
|
|
89
|
+
.light-mode .card {
|
|
90
|
+
background: #fff;
|
|
91
|
+
color: #222;
|
|
92
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
|
93
|
+
}
|
|
94
|
+
.btn {
|
|
95
|
+
background: #3b82f6;
|
|
96
|
+
color: #fff;
|
|
97
|
+
border: none;
|
|
98
|
+
border-radius: 8px;
|
|
99
|
+
padding: 0.75rem 1.5rem;
|
|
100
|
+
font-weight: 600;
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
margin: 0.25rem;
|
|
103
|
+
transition: all 0.2s;
|
|
104
|
+
text-decoration: none;
|
|
105
|
+
display: inline-block;
|
|
106
|
+
}
|
|
107
|
+
.btn:hover {
|
|
108
|
+
background: #2563eb;
|
|
109
|
+
transform: translateY(-1px);
|
|
110
|
+
}
|
|
111
|
+
.btn-secondary {
|
|
112
|
+
background: #6b7280;
|
|
113
|
+
}
|
|
114
|
+
.btn-secondary:hover {
|
|
115
|
+
background: #4b5563;
|
|
116
|
+
}
|
|
117
|
+
.light-mode .btn {
|
|
118
|
+
background: #3b82f6;
|
|
119
|
+
color: #fff;
|
|
120
|
+
}
|
|
121
|
+
.component-badge {
|
|
122
|
+
display: inline-flex;
|
|
123
|
+
align-items: center;
|
|
124
|
+
padding: 6px 12px;
|
|
125
|
+
border-radius: 9999px;
|
|
126
|
+
font-size: 0.875rem;
|
|
127
|
+
font-weight: 600;
|
|
128
|
+
color: white;
|
|
129
|
+
margin: 0.25rem;
|
|
130
|
+
}
|
|
131
|
+
.header-bar {
|
|
132
|
+
background: #1e293b;
|
|
133
|
+
padding: 2rem;
|
|
134
|
+
border-radius: 1rem 1rem 0 0;
|
|
135
|
+
margin-bottom: 2rem;
|
|
136
|
+
text-align: center;
|
|
137
|
+
}
|
|
138
|
+
.header-bar .header-title {
|
|
139
|
+
font-size: 3rem;
|
|
140
|
+
font-weight: 700;
|
|
141
|
+
color: #fbbf24;
|
|
142
|
+
margin-bottom: 0.5rem;
|
|
143
|
+
}
|
|
144
|
+
.header-bar .header-subtitle {
|
|
145
|
+
font-size: 1.25rem;
|
|
146
|
+
color: #f1f5f9;
|
|
147
|
+
margin-bottom: 1rem;
|
|
148
|
+
}
|
|
149
|
+
.header-bar .header-meta {
|
|
150
|
+
font-size: 1rem;
|
|
151
|
+
color: #94a3b8;
|
|
152
|
+
}
|
|
153
|
+
.light-mode .header-bar {
|
|
154
|
+
background: #f1f5f9;
|
|
155
|
+
}
|
|
156
|
+
.light-mode .header-title {
|
|
157
|
+
color: #b45309;
|
|
158
|
+
}
|
|
159
|
+
.light-mode .header-subtitle {
|
|
160
|
+
color: #374151;
|
|
161
|
+
}
|
|
162
|
+
.light-mode .header-meta {
|
|
163
|
+
color: #6b7280;
|
|
164
|
+
}
|
|
165
|
+
.footer-bar {
|
|
166
|
+
background: #1e293b;
|
|
167
|
+
color: #fbbf24;
|
|
168
|
+
padding: 2rem;
|
|
169
|
+
border-radius: 0 0 1rem 1rem;
|
|
170
|
+
margin-top: 3rem;
|
|
171
|
+
text-align: center;
|
|
172
|
+
font-size: 1rem;
|
|
173
|
+
}
|
|
174
|
+
.light-mode .footer-bar {
|
|
175
|
+
background: #f1f5f9;
|
|
176
|
+
color: #b45309;
|
|
177
|
+
}
|
|
178
|
+
.footer-bar a {
|
|
179
|
+
color: #fbbf24;
|
|
180
|
+
text-decoration: underline;
|
|
181
|
+
}
|
|
182
|
+
.light-mode .footer-bar a {
|
|
183
|
+
color: #b45309;
|
|
184
|
+
}
|
|
185
|
+
.feature-grid {
|
|
186
|
+
display: grid;
|
|
187
|
+
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
|
|
188
|
+
gap: 1.5rem;
|
|
189
|
+
margin: 2rem 0;
|
|
190
|
+
}
|
|
191
|
+
.code-block {
|
|
192
|
+
background: #0f172a;
|
|
193
|
+
color: #e2e8f0;
|
|
194
|
+
padding: 1.5rem;
|
|
195
|
+
border-radius: 0.5rem;
|
|
196
|
+
font-family: 'Courier New', monospace;
|
|
197
|
+
overflow-x: auto;
|
|
198
|
+
border: 1px solid #334155;
|
|
199
|
+
}
|
|
200
|
+
.light-mode .code-block {
|
|
201
|
+
background: #f8fafc;
|
|
202
|
+
color: #1e293b;
|
|
203
|
+
border: 1px solid #e2e8f0;
|
|
204
|
+
}
|
|
205
|
+
.stats-grid {
|
|
206
|
+
display: grid;
|
|
207
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
208
|
+
gap: 1rem;
|
|
209
|
+
margin: 2rem 0;
|
|
210
|
+
}
|
|
211
|
+
.stat-card {
|
|
212
|
+
background: linear-gradient(135deg, #3b82f6, #1d4ed8);
|
|
213
|
+
color: white;
|
|
214
|
+
padding: 1.5rem;
|
|
215
|
+
border-radius: 1rem;
|
|
216
|
+
text-align: center;
|
|
217
|
+
}
|
|
218
|
+
.stat-number {
|
|
219
|
+
font-size: 2.5rem;
|
|
220
|
+
font-weight: 700;
|
|
221
|
+
display: block;
|
|
222
|
+
}
|
|
223
|
+
.stat-label {
|
|
224
|
+
font-size: 0.875rem;
|
|
225
|
+
opacity: 0.9;
|
|
226
|
+
margin-top: 0.5rem;
|
|
227
|
+
}
|
|
228
|
+
@media (max-width: 768px) {
|
|
229
|
+
.header-title { font-size: 2rem !important; }
|
|
230
|
+
.feature-grid { grid-template-columns: 1fr !important; }
|
|
231
|
+
.stats-grid { grid-template-columns: repeat(2, 1fr) !important; }
|
|
232
|
+
}
|
|
233
|
+
</style>
|
|
234
|
+
</head>
|
|
235
|
+
<body id="body-root">
|
|
236
|
+
<div class="header-bar">
|
|
237
|
+
<div class="header-title">${DOCS_CONFIG.title}</div>
|
|
238
|
+
<div class="header-subtitle">${DOCS_CONFIG.description}</div>
|
|
239
|
+
<div class="header-meta">
|
|
240
|
+
<span>Versão: <strong>${DOCS_CONFIG.version}</strong></span> |
|
|
241
|
+
<span>Ambiente: <strong>${DOCS_CONFIG.environment}</strong></span> |
|
|
242
|
+
<span>Gerado em: <strong>${new Date().toLocaleString('pt-BR')}</strong></span>
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
<div class="flex gap-2 mb-6 justify-end mr-6">
|
|
247
|
+
<button id="toggle-theme" class="btn btn-secondary" type="button" title="Alternar tema">🌙 Tema</button>
|
|
248
|
+
<button id="export-pdf" class="btn" type="button" title="Exportar PDF">📄 PDF</button>
|
|
249
|
+
<a href="./quick-reference.html" class="btn" title="Referência Rápida">📖 Quick Ref</a>
|
|
250
|
+
<a href="./architecture-overview.html" class="btn" title="Arquitetura">🏗️ Arquitetura</a>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
<div id="report-root" class="max-w-7xl mx-auto p-6" style="background:inherit;">
|
|
254
|
+
|
|
255
|
+
<!-- Estatísticas dos Componentes -->
|
|
256
|
+
<div class="stats-grid">
|
|
257
|
+
<div class="stat-card">
|
|
258
|
+
<span class="stat-number">5</span>
|
|
259
|
+
<div class="stat-label">Componentes Principais</div>
|
|
260
|
+
</div>
|
|
261
|
+
<div class="stat-card" style="background: linear-gradient(135deg, #10b981, #059669);">
|
|
262
|
+
<span class="stat-number">100%</span>
|
|
263
|
+
<div class="stat-label">Cobertura TypeScript</div>
|
|
264
|
+
</div>
|
|
265
|
+
<div class="stat-card" style="background: linear-gradient(135deg, #f59e0b, #d97706);">
|
|
266
|
+
<span class="stat-number">✓</span>
|
|
267
|
+
<div class="stat-label">Error Handling</div>
|
|
268
|
+
</div>
|
|
269
|
+
<div class="stat-card" style="background: linear-gradient(135deg, #8b5cf6, #7c3aed);">
|
|
270
|
+
<span class="stat-number">∞</span>
|
|
271
|
+
<div class="stat-label">Reutilizável</div>
|
|
272
|
+
</div>
|
|
273
|
+
</div>
|
|
274
|
+
|
|
275
|
+
<!-- Visão Geral -->
|
|
276
|
+
<div class="card">
|
|
277
|
+
<h2 class="text-2xl font-bold mb-4 text-yellow-400">🎯 O que é o AutoCore?</h2>
|
|
278
|
+
<p class="text-lg mb-4">
|
|
279
|
+
O AutoCore é um <strong>framework de componentes reutilizáveis</strong> para automação de testes.
|
|
280
|
+
Não é uma API que se conecta a serviços externos, mas sim uma coleção de componentes que você pode usar para criar seus próprios testes.
|
|
281
|
+
</p>
|
|
282
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
283
|
+
<div>
|
|
284
|
+
<h3 class="text-lg font-semibold mb-2 text-blue-400">✨ Características</h3>
|
|
285
|
+
<ul class="list-disc list-inside space-y-1 text-sm">
|
|
286
|
+
<li>Componentes independentes e reutilizáveis</li>
|
|
287
|
+
<li>Error Handling integrado em todos os componentes</li>
|
|
288
|
+
<li>Sistema de logs e métricas unificado</li>
|
|
289
|
+
<li>Suporte completo ao TypeScript</li>
|
|
290
|
+
<li>Documentação e testes abrangentes</li>
|
|
291
|
+
</ul>
|
|
292
|
+
</div>
|
|
293
|
+
<div>
|
|
294
|
+
<h3 class="text-lg font-semibold mb-2 text-green-400">🔧 Como usar</h3>
|
|
295
|
+
<div class="code-block text-xs">
|
|
296
|
+
<span class="text-blue-400">import</span> {
|
|
297
|
+
ApiActions,
|
|
298
|
+
Actions,
|
|
299
|
+
MobileActions,
|
|
300
|
+
SSHActions,
|
|
301
|
+
BancoActions
|
|
302
|
+
} <span class="text-blue-400">from</span> <span class="text-yellow-300">'@silasfmartins/testhub'</span>
|
|
303
|
+
|
|
304
|
+
<span class="text-green-400">// Cada componente é independente</span>
|
|
305
|
+
<span class="text-blue-400">await</span> ApiActions.<span class="text-purple-400">get</span>(<span class="text-yellow-300">'/users'</span>)
|
|
306
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">navigateTo</span>(<span class="text-yellow-300">'https://site.com'</span>)
|
|
307
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">tap</span>(<span class="text-orange-400">100</span>, <span class="text-orange-400">200</span>)
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
|
|
313
|
+
<!-- Componentes Principais -->
|
|
314
|
+
<div class="card">
|
|
315
|
+
<h2 class="text-2xl font-bold mb-6 text-yellow-400">🧩 Componentes Principais</h2>
|
|
316
|
+
<div class="feature-grid">
|
|
317
|
+
|
|
318
|
+
<div class="card">
|
|
319
|
+
<div class="flex items-center mb-3">
|
|
320
|
+
<span class="component-badge" style="background: linear-gradient(135deg, #3b82f6, #1d4ed8);">🌐 ApiActions</span>
|
|
321
|
+
</div>
|
|
322
|
+
<h3 class="text-xl font-semibold mb-2">Automação de APIs REST</h3>
|
|
323
|
+
<p class="text-sm text-gray-400 mb-3">Componente para testes de APIs com validações e relatórios integrados.</p>
|
|
324
|
+
<div class="code-block text-xs">
|
|
325
|
+
await ApiActions.get('/users', 'Buscar usuários')
|
|
326
|
+
ApiActions.validateStatus(200, 'Status OK')
|
|
327
|
+
ApiActions.validateJsonPath('$.users[0].name', 'João')
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
|
|
331
|
+
<div class="card">
|
|
332
|
+
<div class="flex items-center mb-3">
|
|
333
|
+
<span class="component-badge" style="background: linear-gradient(135deg, #10b981, #059669);">🎭 Actions</span>
|
|
334
|
+
</div>
|
|
335
|
+
<h3 class="text-xl font-semibold mb-2">Automação Web (Playwright)</h3>
|
|
336
|
+
<p class="text-sm text-gray-400 mb-3">Componente para automação web com Playwright e validações.</p>
|
|
337
|
+
<div class="code-block text-xs">
|
|
338
|
+
await Actions.navigateTo('https://site.com')
|
|
339
|
+
await Actions.click('[data-testid="login"]')
|
|
340
|
+
await Actions.fill('#username', 'testuser')
|
|
341
|
+
</div>
|
|
342
|
+
</div>
|
|
343
|
+
|
|
344
|
+
<div class="card">
|
|
345
|
+
<div class="flex items-center mb-3">
|
|
346
|
+
<span class="component-badge" style="background: linear-gradient(135deg, #f59e0b, #d97706);">📱 MobileActions</span>
|
|
347
|
+
</div>
|
|
348
|
+
<h3 class="text-xl font-semibold mb-2">Automação Mobile (Appium)</h3>
|
|
349
|
+
<p class="text-sm text-gray-400 mb-3">Componente para automação mobile com Appium/WebDriverIO.</p>
|
|
350
|
+
<div class="code-block text-xs">
|
|
351
|
+
await MobileActions.tap(100, 200, 'Tocar botão')
|
|
352
|
+
await MobileActions.swipe(0, 100, 0, -100, 'Scroll up')
|
|
353
|
+
await MobileActions.fillField('#input', 'texto')
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
|
|
357
|
+
<div class="card">
|
|
358
|
+
<div class="flex items-center mb-3">
|
|
359
|
+
<span class="component-badge" style="background: linear-gradient(135deg, #8b5cf6, #7c3aed);">🔐 SSHActions</span>
|
|
360
|
+
</div>
|
|
361
|
+
<h3 class="text-xl font-semibold mb-2">Automação SSH</h3>
|
|
362
|
+
<p class="text-sm text-gray-400 mb-3">Componente para execução remota via SSH com validações.</p>
|
|
363
|
+
<div class="code-block text-xs">
|
|
364
|
+
await SSHActions.connectWithKey('/path/key.pem')
|
|
365
|
+
await SSHActions.write('ls -la', 'Listar arquivos')
|
|
366
|
+
const output = SSHActions.read('Ler saída')
|
|
367
|
+
</div>
|
|
368
|
+
</div>
|
|
369
|
+
|
|
370
|
+
<div class="card">
|
|
371
|
+
<div class="flex items-center mb-3">
|
|
372
|
+
<span class="component-badge" style="background: linear-gradient(135deg, #ef4444, #dc2626);">🗄️ BancoActions</span>
|
|
373
|
+
</div>
|
|
374
|
+
<h3 class="text-xl font-semibold mb-2">Automação de Banco de Dados</h3>
|
|
375
|
+
<p class="text-sm text-gray-400 mb-3">Componente para automação de testes de banco com OracleDB.</p>
|
|
376
|
+
<div class="code-block text-xs">
|
|
377
|
+
await BancoActions.executarSelect('SELECT * FROM users')
|
|
378
|
+
await BancoActions.executarInsert('INSERT INTO...')
|
|
379
|
+
BancoActions.validarResultado(result, 'Dados válidos')
|
|
380
|
+
</div>
|
|
381
|
+
</div>
|
|
382
|
+
|
|
383
|
+
<div class="card">
|
|
384
|
+
<div class="flex items-center mb-3">
|
|
385
|
+
<span class="component-badge" style="background: linear-gradient(135deg, #06b6d4, #0891b2);">📊 UnifiedReportManager</span>
|
|
386
|
+
</div>
|
|
387
|
+
<h3 class="text-xl font-semibold mb-2">Sistema de Relatórios Unificado</h3>
|
|
388
|
+
<p class="text-sm text-gray-400 mb-3">Sistema central de logs, métricas e relatórios para todos os componentes.</p>
|
|
389
|
+
<div class="code-block text-xs">
|
|
390
|
+
const stats = ApiActions.obterEstatisticas()
|
|
391
|
+
const logs = Actions.obterLogs()
|
|
392
|
+
await UnifiedReportManager.gerarRelatorio()
|
|
393
|
+
</div>
|
|
394
|
+
</div>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
|
|
398
|
+
<!-- Links de Documentação -->
|
|
399
|
+
<div class="card">
|
|
400
|
+
<h2 class="text-2xl font-bold mb-4 text-yellow-400">📚 Documentação</h2>
|
|
401
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
402
|
+
<a href="./quick-reference.html" class="btn block text-center">
|
|
403
|
+
📖 Referência Rápida
|
|
404
|
+
</a>
|
|
405
|
+
<a href="./architecture-overview.html" class="btn block text-center">
|
|
406
|
+
🏗️ Visão da Arquitetura
|
|
407
|
+
</a>
|
|
408
|
+
</div>
|
|
409
|
+
</div>
|
|
410
|
+
|
|
411
|
+
<!-- Exemplo de Uso Completo -->
|
|
412
|
+
<div class="card">
|
|
413
|
+
<h2 class="text-2xl font-bold mb-4 text-yellow-400">💡 Exemplo de Uso Completo</h2>
|
|
414
|
+
<div class="code-block">
|
|
415
|
+
<span class="text-green-400">// Importar os componentes necessários</span>
|
|
416
|
+
<span class="text-blue-400">import</span> {
|
|
417
|
+
ApiActions,
|
|
418
|
+
Actions,
|
|
419
|
+
BancoActions
|
|
420
|
+
} <span class="text-blue-400">from</span> <span class="text-yellow-300">'@silasfmartins/testhub'</span>
|
|
421
|
+
|
|
422
|
+
<span class="text-green-400">// Teste de API</span>
|
|
423
|
+
<span class="text-blue-400">await</span> ApiActions.<span class="text-purple-400">get</span>(<span class="text-yellow-300">'/api/users'</span>, <span class="text-yellow-300">'Buscar usuários'</span>)
|
|
424
|
+
ApiActions.<span class="text-purple-400">validateStatus</span>(<span class="text-orange-400">200</span>, <span class="text-yellow-300">'API deve retornar 200'</span>)
|
|
425
|
+
<span class="text-blue-400">const</span> users = ApiActions.<span class="text-purple-400">validateJsonPath</span>(
|
|
426
|
+
<span class="text-yellow-300">'$.users'</span>,
|
|
427
|
+
<span class="text-blue-400">null</span>,
|
|
428
|
+
<span class="text-yellow-300">'Lista de usuários'</span>
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
<span class="text-green-400">// Teste Web</span>
|
|
432
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">navigateTo</span>(<span class="text-yellow-300">'https://minha-app.com/login'</span>)
|
|
433
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">fill</span>(<span class="text-yellow-300">'#username'</span>, <span class="text-yellow-300">'testuser'</span>, <span class="text-yellow-300">'Preencher usuário'</span>)
|
|
434
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">click</span>(<span class="text-yellow-300">'[data-testid="login-btn"]'</span>, <span class="text-yellow-300">'Clicar em login'</span>)
|
|
435
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">validateText</span>(<span class="text-yellow-300">'.welcome'</span>, <span class="text-yellow-300">'Bem-vindo'</span>, <span class="text-yellow-300">'Verificar login'</span>)
|
|
436
|
+
|
|
437
|
+
<span class="text-green-400">// Validação de Banco</span>
|
|
438
|
+
<span class="text-blue-400">const</span> result = <span class="text-blue-400">await</span> BancoActions.<span class="text-purple-400">executarSelect</span>(
|
|
439
|
+
<span class="text-yellow-300">'SELECT * FROM audit_logs WHERE user_id = 1'</span>
|
|
440
|
+
)
|
|
441
|
+
BancoActions.<span class="text-purple-400">validarQuantidadeRegistros</span>(
|
|
442
|
+
result,
|
|
443
|
+
<span class="text-orange-400">1</span>,
|
|
444
|
+
<span class="text-yellow-300">'Deve ter 1 log de auditoria'</span>
|
|
445
|
+
)
|
|
446
|
+
|
|
447
|
+
<span class="text-green-400">// Obter relatório unificado</span>
|
|
448
|
+
<span class="text-blue-400">const</span> relatorio = <span class="text-blue-400">await</span> UnifiedReportManager.<span class="text-purple-400">gerarRelatorio</span>()
|
|
449
|
+
console.<span class="text-purple-400">log</span>(<span class="text-yellow-300">'Testes executados:'</span>, relatorio.totalTestes)
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
|
|
453
|
+
</div>
|
|
454
|
+
|
|
455
|
+
<div class="footer-bar">
|
|
456
|
+
Desenvolvido pela equipe <strong>AutoCore</strong> — Framework de Componentes para Automação de Testes.<br>
|
|
457
|
+
<span>Documentação gerada automaticamente. Para mais informações, consulte os arquivos de documentação do projeto.</span>
|
|
458
|
+
</div>
|
|
459
|
+
|
|
460
|
+
<script>
|
|
461
|
+
document.getElementById('toggle-theme').onclick = () => {
|
|
462
|
+
document.getElementById('body-root').classList.toggle('light-mode')
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
document.getElementById('export-pdf').onclick = async () => {
|
|
466
|
+
const element = document.getElementById('report-root');
|
|
467
|
+
const originalBg = element.style.background;
|
|
468
|
+
const originalColor = element.style.color;
|
|
469
|
+
element.style.background = '#fff';
|
|
470
|
+
element.style.color = '#222';
|
|
471
|
+
|
|
472
|
+
try {
|
|
473
|
+
const canvas = await html2canvas(element, {
|
|
474
|
+
scale: 1.5,
|
|
475
|
+
useCORS: false,
|
|
476
|
+
allowTaint: true,
|
|
477
|
+
backgroundColor: '#fff',
|
|
478
|
+
scrollY: 0
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
const { jsPDF } = jspdf;
|
|
482
|
+
const pdf = new jsPDF({
|
|
483
|
+
orientation: 'portrait',
|
|
484
|
+
unit: 'mm',
|
|
485
|
+
format: 'a4'
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
const imgData = canvas.toDataURL('image/jpeg', 0.98);
|
|
489
|
+
const imgWidth = 210;
|
|
490
|
+
const pageHeight = 297;
|
|
491
|
+
const imgHeight = (canvas.height * imgWidth) / canvas.width;
|
|
492
|
+
let heightLeft = imgHeight;
|
|
493
|
+
let position = 0;
|
|
494
|
+
|
|
495
|
+
pdf.addImage(imgData, 'JPEG', 0, position, imgWidth, imgHeight);
|
|
496
|
+
heightLeft -= pageHeight;
|
|
497
|
+
|
|
498
|
+
while (heightLeft > 0) {
|
|
499
|
+
position = heightLeft - imgHeight;
|
|
500
|
+
pdf.addPage();
|
|
501
|
+
pdf.addImage(imgData, 'JPEG', 0, position, imgWidth, imgHeight);
|
|
502
|
+
heightLeft -= pageHeight;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
pdf.save('autocore-documentation.pdf');
|
|
506
|
+
} catch (error) {
|
|
507
|
+
console.error('Erro ao gerar PDF:', error);
|
|
508
|
+
alert('Erro ao gerar PDF: ' + error.message);
|
|
509
|
+
} finally {
|
|
510
|
+
element.style.background = originalBg;
|
|
511
|
+
element.style.color = originalColor;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
</script>
|
|
515
|
+
</body>
|
|
516
|
+
</html>`;
|
|
517
|
+
fs.writeFileSync(path.join(DOCS_CONFIG.outputDir, 'index.html'), template);
|
|
518
|
+
log.info('✅ Arquivo index.html gerado com TailwindCSS');
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Gera documentação OpenAPI em JSON
|
|
522
|
+
*/
|
|
523
|
+
function generateOpenApiSpec() {
|
|
524
|
+
const openApiSpec = {
|
|
525
|
+
openapi: '3.0.4',
|
|
526
|
+
info: {
|
|
527
|
+
title: DOCS_CONFIG.title,
|
|
528
|
+
version: DOCS_CONFIG.version,
|
|
529
|
+
description: DOCS_CONFIG.description,
|
|
530
|
+
contact: {
|
|
531
|
+
name: 'AutoCore Team',
|
|
532
|
+
email: 'autocore@rbqa.com',
|
|
533
|
+
},
|
|
534
|
+
license: {
|
|
535
|
+
name: 'ISC',
|
|
536
|
+
url: 'https://opensource.org/licenses/ISC',
|
|
537
|
+
},
|
|
538
|
+
},
|
|
539
|
+
servers: [
|
|
540
|
+
{
|
|
541
|
+
url: 'https://autocore.rbqa.com',
|
|
542
|
+
description: 'AutoCore Framework API',
|
|
543
|
+
},
|
|
544
|
+
],
|
|
545
|
+
components: {
|
|
546
|
+
schemas: {
|
|
547
|
+
ApiActionsComponent: {
|
|
548
|
+
type: 'object',
|
|
549
|
+
description: 'Componente para automação de APIs REST',
|
|
550
|
+
properties: {
|
|
551
|
+
get: {
|
|
552
|
+
type: 'string',
|
|
553
|
+
description: 'Executa requisição GET',
|
|
554
|
+
format: 'function',
|
|
555
|
+
},
|
|
556
|
+
post: {
|
|
557
|
+
type: 'string',
|
|
558
|
+
description: 'Executa requisição POST',
|
|
559
|
+
format: 'function',
|
|
560
|
+
},
|
|
561
|
+
validateStatus: {
|
|
562
|
+
type: 'string',
|
|
563
|
+
description: 'Valida status HTTP',
|
|
564
|
+
format: 'function',
|
|
565
|
+
},
|
|
566
|
+
validateJsonPath: {
|
|
567
|
+
type: 'string',
|
|
568
|
+
description: 'Valida caminho JSON usando JSONPath',
|
|
569
|
+
format: 'function',
|
|
570
|
+
},
|
|
571
|
+
},
|
|
572
|
+
required: ['get', 'post', 'validateStatus'],
|
|
573
|
+
},
|
|
574
|
+
WebActionsComponent: {
|
|
575
|
+
type: 'object',
|
|
576
|
+
description: 'Componente para automação web com Playwright',
|
|
577
|
+
properties: {
|
|
578
|
+
navigateTo: {
|
|
579
|
+
type: 'string',
|
|
580
|
+
description: 'Navega para URL especificada',
|
|
581
|
+
format: 'function',
|
|
582
|
+
},
|
|
583
|
+
click: {
|
|
584
|
+
type: 'string',
|
|
585
|
+
description: 'Clica em elemento',
|
|
586
|
+
format: 'function',
|
|
587
|
+
},
|
|
588
|
+
fill: {
|
|
589
|
+
type: 'string',
|
|
590
|
+
description: 'Preenche campo de texto',
|
|
591
|
+
format: 'function',
|
|
592
|
+
},
|
|
593
|
+
validateText: {
|
|
594
|
+
type: 'string',
|
|
595
|
+
description: 'Valida texto em elemento',
|
|
596
|
+
format: 'function',
|
|
597
|
+
},
|
|
598
|
+
},
|
|
599
|
+
required: ['navigateTo', 'click', 'fill'],
|
|
600
|
+
},
|
|
601
|
+
MobileActionsComponent: {
|
|
602
|
+
type: 'object',
|
|
603
|
+
description: 'Componente para automação mobile com Appium',
|
|
604
|
+
properties: {
|
|
605
|
+
tap: {
|
|
606
|
+
type: 'string',
|
|
607
|
+
description: 'Toca na tela nas coordenadas especificadas',
|
|
608
|
+
format: 'function',
|
|
609
|
+
},
|
|
610
|
+
swipe: {
|
|
611
|
+
type: 'string',
|
|
612
|
+
description: 'Desliza na tela',
|
|
613
|
+
format: 'function',
|
|
614
|
+
},
|
|
615
|
+
fillField: {
|
|
616
|
+
type: 'string',
|
|
617
|
+
description: 'Preenche campo mobile',
|
|
618
|
+
format: 'function',
|
|
619
|
+
},
|
|
620
|
+
},
|
|
621
|
+
required: ['tap', 'swipe'],
|
|
622
|
+
},
|
|
623
|
+
SSHActionsComponent: {
|
|
624
|
+
type: 'object',
|
|
625
|
+
description: 'Componente para automação SSH',
|
|
626
|
+
properties: {
|
|
627
|
+
connectWithKey: {
|
|
628
|
+
type: 'string',
|
|
629
|
+
description: 'Conecta via chave SSH (recomendado)',
|
|
630
|
+
format: 'function',
|
|
631
|
+
},
|
|
632
|
+
write: {
|
|
633
|
+
type: 'string',
|
|
634
|
+
description: 'Executa comando SSH',
|
|
635
|
+
format: 'function',
|
|
636
|
+
},
|
|
637
|
+
read: {
|
|
638
|
+
type: 'string',
|
|
639
|
+
description: 'Lê saída do comando SSH',
|
|
640
|
+
format: 'function',
|
|
641
|
+
},
|
|
642
|
+
},
|
|
643
|
+
required: ['connectWithKey', 'write', 'read'],
|
|
644
|
+
},
|
|
645
|
+
BancoActionsComponent: {
|
|
646
|
+
type: 'object',
|
|
647
|
+
description: 'Componente para automação de banco de dados Oracle',
|
|
648
|
+
properties: {
|
|
649
|
+
executarSelect: {
|
|
650
|
+
type: 'string',
|
|
651
|
+
description: 'Executa query SELECT',
|
|
652
|
+
format: 'function',
|
|
653
|
+
},
|
|
654
|
+
executarInsert: {
|
|
655
|
+
type: 'string',
|
|
656
|
+
description: 'Executa INSERT SQL',
|
|
657
|
+
format: 'function',
|
|
658
|
+
},
|
|
659
|
+
validarResultado: {
|
|
660
|
+
type: 'string',
|
|
661
|
+
description: 'Valida resultado de query',
|
|
662
|
+
format: 'function',
|
|
663
|
+
},
|
|
664
|
+
},
|
|
665
|
+
required: ['executarSelect', 'validarResultado'],
|
|
666
|
+
},
|
|
667
|
+
},
|
|
668
|
+
},
|
|
669
|
+
tags: [
|
|
670
|
+
{
|
|
671
|
+
name: 'API',
|
|
672
|
+
description: 'Operações de automação de APIs REST',
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
name: 'Web',
|
|
676
|
+
description: 'Operações de automação web com Playwright',
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
name: 'Mobile',
|
|
680
|
+
description: 'Operações de automação mobile com Appium',
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
name: 'SSH',
|
|
684
|
+
description: 'Operações de automação SSH',
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
name: 'Database',
|
|
688
|
+
description: 'Operações de automação de banco de dados',
|
|
689
|
+
},
|
|
690
|
+
],
|
|
691
|
+
};
|
|
692
|
+
fs.writeFileSync(path.join(DOCS_CONFIG.outputDir, 'openapi.json'), JSON.stringify(openApiSpec, null, 2));
|
|
693
|
+
console.log('✅ Arquivo openapi.json gerado');
|
|
694
|
+
}
|
|
695
|
+
/**
|
|
696
|
+
* Gera página de Quick Reference
|
|
697
|
+
*/
|
|
698
|
+
function generateQuickReference() {
|
|
699
|
+
const template = `<!DOCTYPE html>
|
|
700
|
+
<html lang="pt-BR">
|
|
701
|
+
<head>
|
|
702
|
+
<meta charset="UTF-8" />
|
|
703
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
704
|
+
<title>Quick Reference - ${DOCS_CONFIG.title}</title>
|
|
705
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
706
|
+
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />
|
|
707
|
+
<style>
|
|
708
|
+
body {
|
|
709
|
+
font-family: 'Inter', sans-serif;
|
|
710
|
+
background-color: #0f172a;
|
|
711
|
+
color: #f1f5f9;
|
|
712
|
+
min-height: 100vh;
|
|
713
|
+
}
|
|
714
|
+
.light-mode {
|
|
715
|
+
background-color: #f9fafb !important;
|
|
716
|
+
color: #222 !important;
|
|
717
|
+
}
|
|
718
|
+
.card {
|
|
719
|
+
background: #1e293b;
|
|
720
|
+
border-radius: 1rem;
|
|
721
|
+
padding: 1.5rem;
|
|
722
|
+
box-shadow: 0 2px 8px #0002;
|
|
723
|
+
margin-bottom: 1.5rem;
|
|
724
|
+
}
|
|
725
|
+
.light-mode .card {
|
|
726
|
+
background: #fff;
|
|
727
|
+
color: #222;
|
|
728
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
|
729
|
+
}
|
|
730
|
+
.code-block {
|
|
731
|
+
background: #0f172a;
|
|
732
|
+
color: #e2e8f0;
|
|
733
|
+
padding: 1.5rem;
|
|
734
|
+
border-radius: 0.5rem;
|
|
735
|
+
font-family: 'Courier New', monospace;
|
|
736
|
+
overflow-x: auto;
|
|
737
|
+
border: 1px solid #334155;
|
|
738
|
+
margin: 1rem 0;
|
|
739
|
+
}
|
|
740
|
+
.light-mode .code-block {
|
|
741
|
+
background: #f8fafc;
|
|
742
|
+
color: #1e293b;
|
|
743
|
+
border: 1px solid #e2e8f0;
|
|
744
|
+
}
|
|
745
|
+
.btn {
|
|
746
|
+
background: #3b82f6;
|
|
747
|
+
color: #fff;
|
|
748
|
+
border: none;
|
|
749
|
+
border-radius: 8px;
|
|
750
|
+
padding: 0.75rem 1.5rem;
|
|
751
|
+
font-weight: 600;
|
|
752
|
+
cursor: pointer;
|
|
753
|
+
margin: 0.25rem;
|
|
754
|
+
transition: all 0.2s;
|
|
755
|
+
text-decoration: none;
|
|
756
|
+
display: inline-block;
|
|
757
|
+
}
|
|
758
|
+
.btn:hover {
|
|
759
|
+
background: #2563eb;
|
|
760
|
+
transform: translateY(-1px);
|
|
761
|
+
}
|
|
762
|
+
.btn-secondary {
|
|
763
|
+
background: #6b7280;
|
|
764
|
+
}
|
|
765
|
+
.btn-secondary:hover {
|
|
766
|
+
background: #4b5563;
|
|
767
|
+
}
|
|
768
|
+
</style>
|
|
769
|
+
</head>
|
|
770
|
+
<body id="body-root">
|
|
771
|
+
<div class="max-w-6xl mx-auto p-6">
|
|
772
|
+
<div class="flex justify-between items-center mb-8">
|
|
773
|
+
<div>
|
|
774
|
+
<h1 class="text-4xl font-bold text-yellow-400">📖 Quick Reference</h1>
|
|
775
|
+
<p class="text-xl text-gray-300">Framework de Componentes para Automação de Testes</p>
|
|
776
|
+
</div>
|
|
777
|
+
<div class="flex gap-2">
|
|
778
|
+
<button id="toggle-theme" class="btn btn-secondary" type="button">🌙 Tema</button>
|
|
779
|
+
<a href="./index.html" class="btn">🏠 Voltar</a>
|
|
780
|
+
</div>
|
|
781
|
+
</div>
|
|
782
|
+
|
|
783
|
+
<!-- ApiActions -->
|
|
784
|
+
<div class="card">
|
|
785
|
+
<h2 class="text-2xl font-bold mb-4 text-blue-400">🌐 ApiActions - Componente de API</h2>
|
|
786
|
+
<div class="code-block">
|
|
787
|
+
<span class="text-blue-400">import</span> { ApiActions } <span class="text-blue-400">from</span> <span class="text-yellow-300">'@silasfmartins/testhub'</span>
|
|
788
|
+
|
|
789
|
+
<span class="text-green-400">// GET Request</span>
|
|
790
|
+
<span class="text-blue-400">await</span> ApiActions.<span class="text-purple-400">get</span>(<span class="text-yellow-300">'/endpoint'</span>, <span class="text-yellow-300">'Descrição'</span>)
|
|
791
|
+
|
|
792
|
+
<span class="text-green-400">// POST Request</span>
|
|
793
|
+
<span class="text-blue-400">await</span> ApiActions.<span class="text-purple-400">post</span>(<span class="text-yellow-300">'/endpoint'</span>, data, <span class="text-yellow-300">'Descrição'</span>)
|
|
794
|
+
|
|
795
|
+
<span class="text-green-400">// PUT/PATCH Requests</span>
|
|
796
|
+
<span class="text-blue-400">await</span> ApiActions.<span class="text-purple-400">put</span>(<span class="text-yellow-300">'/endpoint'</span>, data, <span class="text-yellow-300">'Atualizar recurso'</span>)
|
|
797
|
+
<span class="text-blue-400">await</span> ApiActions.<span class="text-purple-400">patch</span>(<span class="text-yellow-300">'/endpoint'</span>, data, <span class="text-yellow-300">'Atualizar parcial'</span>)
|
|
798
|
+
|
|
799
|
+
<span class="text-green-400">// DELETE Request</span>
|
|
800
|
+
<span class="text-blue-400">await</span> ApiActions.<span class="text-purple-400">delete</span>(<span class="text-yellow-300">'/endpoint'</span>, <span class="text-yellow-300">'Remover recurso'</span>)
|
|
801
|
+
|
|
802
|
+
<span class="text-green-400">// Validações</span>
|
|
803
|
+
ApiActions.<span class="text-purple-400">validateStatus</span>(<span class="text-orange-400">200</span>, <span class="text-yellow-300">'Status esperado'</span>)
|
|
804
|
+
ApiActions.<span class="text-purple-400">validateContains</span>(<span class="text-yellow-300">'texto'</span>, <span class="text-yellow-300">'Deve conter texto'</span>)
|
|
805
|
+
ApiActions.<span class="text-purple-400">validateJsonPath</span>(<span class="text-yellow-300">'$.users[0].name'</span>, <span class="text-yellow-300">'João'</span>, <span class="text-yellow-300">'Nome do usuário'</span>)
|
|
806
|
+
</div>
|
|
807
|
+
</div>
|
|
808
|
+
|
|
809
|
+
<!-- Actions -->
|
|
810
|
+
<div class="card">
|
|
811
|
+
<h2 class="text-2xl font-bold mb-4 text-green-400">🎭 Actions - Componente Web (Playwright)</h2>
|
|
812
|
+
<div class="code-block">
|
|
813
|
+
<span class="text-blue-400">import</span> { Actions } <span class="text-blue-400">from</span> <span class="text-yellow-300">'@silasfmartins/testhub'</span>
|
|
814
|
+
|
|
815
|
+
<span class="text-green-400">// Navegação</span>
|
|
816
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">navigateTo</span>(<span class="text-yellow-300">'https://site.com'</span>, <span class="text-yellow-300">'Navegar'</span>)
|
|
817
|
+
|
|
818
|
+
<span class="text-green-400">// Interações</span>
|
|
819
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">click</span>(<span class="text-yellow-300">'button'</span>, <span class="text-yellow-300">'Clicar botão'</span>)
|
|
820
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">fill</span>(<span class="text-yellow-300">'#input'</span>, <span class="text-yellow-300">'valor'</span>, <span class="text-yellow-300">'Preencher campo'</span>)
|
|
821
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">selectOption</span>(<span class="text-yellow-300">'select'</span>, <span class="text-yellow-300">'opcao'</span>, <span class="text-yellow-300">'Selecionar opção'</span>)
|
|
822
|
+
|
|
823
|
+
<span class="text-green-400">// Validações</span>
|
|
824
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">waitForElement</span>(<span class="text-yellow-300">'.loading'</span>, <span class="text-yellow-300">'Aguardar elemento'</span>)
|
|
825
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">validateText</span>(<span class="text-yellow-300">'h1'</span>, <span class="text-yellow-300">'Título'</span>, <span class="text-yellow-300">'Verificar título'</span>)
|
|
826
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">validateUrl</span>(<span class="text-yellow-300">'https://expected.com'</span>, <span class="text-yellow-300">'URL esperada'</span>)
|
|
827
|
+
|
|
828
|
+
<span class="text-green-400">// Screenshots</span>
|
|
829
|
+
<span class="text-blue-400">await</span> Actions.<span class="text-purple-400">screenshot</span>(<span class="text-yellow-300">'screenshot.png'</span>, <span class="text-yellow-300">'Capturar tela'</span>)
|
|
830
|
+
</div>
|
|
831
|
+
</div>
|
|
832
|
+
|
|
833
|
+
<!-- MobileActions -->
|
|
834
|
+
<div class="card">
|
|
835
|
+
<h2 class="text-2xl font-bold mb-4 text-orange-400">📱 MobileActions - Componente Mobile</h2>
|
|
836
|
+
<div class="code-block">
|
|
837
|
+
<span class="text-blue-400">import</span> { MobileActions } <span class="text-blue-400">from</span> <span class="text-yellow-300">'@silasfmartins/testhub'</span>
|
|
838
|
+
|
|
839
|
+
<span class="text-green-400">// Gestos básicos</span>
|
|
840
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">tap</span>(<span class="text-orange-400">100</span>, <span class="text-orange-400">200</span>, <span class="text-yellow-300">'Tocar na tela'</span>)
|
|
841
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">swipe</span>(<span class="text-orange-400">0</span>, <span class="text-orange-400">100</span>, <span class="text-orange-400">0</span>, <span class="text-orange-400">-100</span>, <span class="text-yellow-300">'Deslizar para cima'</span>)
|
|
842
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">longPress</span>(<span class="text-yellow-300">'#element'</span>, <span class="text-yellow-300">'Pressionar longo'</span>)
|
|
843
|
+
|
|
844
|
+
<span class="text-green-400">// Elementos</span>
|
|
845
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">clickElement</span>(<span class="text-yellow-300">'button'</span>, <span class="text-yellow-300">'Clicar elemento'</span>)
|
|
846
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">fillField</span>(<span class="text-yellow-300">'#input'</span>, <span class="text-yellow-300">'texto'</span>, <span class="text-yellow-300">'Preencher campo'</span>)
|
|
847
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">waitForElement</span>(<span class="text-yellow-300">'#loading'</span>, <span class="text-yellow-300">'Aguardar carregamento'</span>)
|
|
848
|
+
|
|
849
|
+
<span class="text-green-400">// Contextos</span>
|
|
850
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">switchToContext</span>(<span class="text-yellow-300">'WEBVIEW_1'</span>, <span class="text-yellow-300">'Mudar para webview'</span>)
|
|
851
|
+
|
|
852
|
+
<span class="text-green-400">// Orientação</span>
|
|
853
|
+
<span class="text-blue-400">await</span> MobileActions.<span class="text-purple-400">setOrientation</span>(<span class="text-yellow-300">'LANDSCAPE'</span>, <span class="text-yellow-300">'Mudar orientação'</span>)
|
|
854
|
+
</div>
|
|
855
|
+
</div>
|
|
856
|
+
|
|
857
|
+
<!-- SSHActions -->
|
|
858
|
+
<div class="card">
|
|
859
|
+
<h2 class="text-2xl font-bold mb-4 text-purple-400">🔐 SSHActions - Componente SSH</h2>
|
|
860
|
+
<div class="code-block">
|
|
861
|
+
<span class="text-blue-400">import</span> { SSHActions } <span class="text-blue-400">from</span> <span class="text-yellow-300">'@silasfmartins/testhub'</span>
|
|
862
|
+
|
|
863
|
+
<span class="text-green-400">// Conexão</span>
|
|
864
|
+
<span class="text-blue-400">await</span> SSHActions.<span class="text-purple-400">connectWithKey</span>(<span class="text-yellow-300">'/path/key.pem'</span>)
|
|
865
|
+
|
|
866
|
+
<span class="text-green-400">// Execução de comandos</span>
|
|
867
|
+
<span class="text-blue-400">await</span> SSHActions.<span class="text-purple-400">write</span>(<span class="text-yellow-300">'ls -la'</span>, <span class="text-yellow-300">'Listar arquivos'</span>)
|
|
868
|
+
<span class="text-blue-400">const</span> output = SSHActions.<span class="text-purple-400">read</span>(<span class="text-yellow-300">'Ler saída'</span>)
|
|
869
|
+
|
|
870
|
+
<span class="text-green-400">// Comandos com retorno</span>
|
|
871
|
+
<span class="text-blue-400">await</span> SSHActions.<span class="text-purple-400">writeAndReturnCommand</span>(<span class="text-yellow-300">'pwd'</span>, <span class="text-yellow-300">'Diretório atual'</span>)
|
|
872
|
+
<span class="text-blue-400">const</span> result = <span class="text-blue-400">await</span> SSHActions.<span class="text-purple-400">readOutputCommand</span>()
|
|
873
|
+
|
|
874
|
+
<span class="text-green-400">// Transfer de arquivos</span>
|
|
875
|
+
<span class="text-blue-400">await</span> SSHActions.<span class="text-purple-400">download</span>(<span class="text-yellow-300">'/remote/file.txt'</span>, <span class="text-yellow-300">'/local/file.txt'</span>, <span class="text-yellow-300">'Download'</span>)
|
|
876
|
+
|
|
877
|
+
<span class="text-green-400">// Validações</span>
|
|
878
|
+
SSHActions.<span class="text-purple-400">validateContains</span>(output, <span class="text-yellow-300">'sucesso'</span>, <span class="text-yellow-300">'Comando executado'</span>)
|
|
879
|
+
SSHActions.<span class="text-purple-400">validateMatches</span>(output, <span class="text-yellow-300">/pattern/</span>, <span class="text-yellow-300">'Padrão encontrado'</span>)
|
|
880
|
+
</div>
|
|
881
|
+
</div>
|
|
882
|
+
|
|
883
|
+
<!-- BancoActions -->
|
|
884
|
+
<div class="card">
|
|
885
|
+
<h2 class="text-2xl font-bold mb-4 text-red-400">🗄️ BancoActions - Componente Banco de Dados</h2>
|
|
886
|
+
<div class="code-block">
|
|
887
|
+
<span class="text-blue-400">import</span> { BancoActions } <span class="text-blue-400">from</span> <span class="text-yellow-300">'@silasfmartins/testhub'</span>
|
|
888
|
+
|
|
889
|
+
<span class="text-green-400">// Queries de consulta</span>
|
|
890
|
+
<span class="text-blue-400">const</span> users = <span class="text-blue-400">await</span> BancoActions.<span class="text-purple-400">executarSelect</span>(<span class="text-yellow-300">'SELECT * FROM users'</span>)
|
|
891
|
+
<span class="text-blue-400">await</span> BancoActions.<span class="text-purple-400">select</span>(<span class="text-yellow-300">'users'</span>, <span class="text-yellow-300">'id = 1'</span>, <span class="text-yellow-300">'Buscar usuário'</span>)
|
|
892
|
+
|
|
893
|
+
<span class="text-green-400">// Operações DML</span>
|
|
894
|
+
<span class="text-blue-400">await</span> BancoActions.<span class="text-purple-400">executarInsert</span>(<span class="text-yellow-300">'INSERT INTO users VALUES (1, "João")'</span>)
|
|
895
|
+
<span class="text-blue-400">await</span> BancoActions.<span class="text-purple-400">executarUpdate</span>(<span class="text-yellow-300">'UPDATE users SET name = "Maria" WHERE id = 1'</span>)
|
|
896
|
+
<span class="text-blue-400">await</span> BancoActions.<span class="text-purple-400">executarDelete</span>(<span class="text-yellow-300">'DELETE FROM users WHERE id = 1'</span>)
|
|
897
|
+
|
|
898
|
+
<span class="text-green-400">// Validações</span>
|
|
899
|
+
BancoActions.<span class="text-purple-400">validarResultado</span>(result, <span class="text-yellow-300">'Deve retornar dados'</span>)
|
|
900
|
+
BancoActions.<span class="text-purple-400">validarQuantidadeRegistros</span>(result, <span class="text-orange-400">5</span>, <span class="text-yellow-300">'Deve ter 5 registros'</span>)
|
|
901
|
+
</div>
|
|
902
|
+
</div>
|
|
903
|
+
|
|
904
|
+
<!-- Relatórios -->
|
|
905
|
+
<div class="card">
|
|
906
|
+
<h2 class="text-2xl font-bold mb-4 text-cyan-400">📊 Relatórios</h2>
|
|
907
|
+
<div class="code-block">
|
|
908
|
+
<span class="text-green-400">// Obter estatísticas</span>
|
|
909
|
+
<span class="text-blue-400">const</span> stats = ApiActions.<span class="text-purple-400">obterEstatisticas</span>()
|
|
910
|
+
<span class="text-blue-400">const</span> logs = Actions.<span class="text-purple-400">obterLogs</span>()
|
|
911
|
+
|
|
912
|
+
<span class="text-green-400">// Anexar relatório</span>
|
|
913
|
+
<span class="text-blue-400">await</span> ApiActions.<span class="text-purple-400">anexarRelatorioFinal</span>()
|
|
914
|
+
</div>
|
|
915
|
+
</div>
|
|
916
|
+
|
|
917
|
+
</div>
|
|
918
|
+
|
|
919
|
+
<script>
|
|
920
|
+
document.getElementById('toggle-theme').onclick = () => {
|
|
921
|
+
document.getElementById('body-root').classList.toggle('light-mode')
|
|
922
|
+
}
|
|
923
|
+
</script>
|
|
924
|
+
</body>
|
|
925
|
+
</html>`;
|
|
926
|
+
fs.writeFileSync(path.join(DOCS_CONFIG.outputDir, 'quick-reference.html'), template);
|
|
927
|
+
console.log('✅ Arquivo quick-reference.html gerado');
|
|
928
|
+
}
|
|
929
|
+
/**
|
|
930
|
+
* Gera página de Visão Geral da Arquitetura
|
|
931
|
+
*/
|
|
932
|
+
function generateArchitectureOverview() {
|
|
933
|
+
const template = `<!DOCTYPE html>
|
|
934
|
+
<html lang="pt-BR">
|
|
935
|
+
<head>
|
|
936
|
+
<meta charset="UTF-8" />
|
|
937
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
938
|
+
<title>Arquitetura - ${DOCS_CONFIG.title}</title>
|
|
939
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
940
|
+
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />
|
|
941
|
+
<style>
|
|
942
|
+
body {
|
|
943
|
+
font-family: 'Inter', sans-serif;
|
|
944
|
+
background-color: #0f172a;
|
|
945
|
+
color: #f1f5f9;
|
|
946
|
+
min-height: 100vh;
|
|
947
|
+
}
|
|
948
|
+
.light-mode {
|
|
949
|
+
background-color: #f9fafb !important;
|
|
950
|
+
color: #222 !important;
|
|
951
|
+
}
|
|
952
|
+
.card {
|
|
953
|
+
background: #1e293b;
|
|
954
|
+
border-radius: 1rem;
|
|
955
|
+
padding: 1.5rem;
|
|
956
|
+
box-shadow: 0 2px 8px #0002;
|
|
957
|
+
margin-bottom: 1.5rem;
|
|
958
|
+
}
|
|
959
|
+
.light-mode .card {
|
|
960
|
+
background: #fff;
|
|
961
|
+
color: #222;
|
|
962
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
|
963
|
+
}
|
|
964
|
+
.layer-box {
|
|
965
|
+
background: linear-gradient(135deg, #1e293b, #334155);
|
|
966
|
+
border: 2px solid #3b82f6;
|
|
967
|
+
border-radius: 0.75rem;
|
|
968
|
+
padding: 1.5rem;
|
|
969
|
+
margin: 1rem 0;
|
|
970
|
+
text-align: center;
|
|
971
|
+
position: relative;
|
|
972
|
+
}
|
|
973
|
+
.light-mode .layer-box {
|
|
974
|
+
background: linear-gradient(135deg, #f8fafc, #e2e8f0);
|
|
975
|
+
border: 2px solid #3b82f6;
|
|
976
|
+
color: #1e293b;
|
|
977
|
+
}
|
|
978
|
+
.arrow-down {
|
|
979
|
+
position: absolute;
|
|
980
|
+
bottom: -20px;
|
|
981
|
+
left: 50%;
|
|
982
|
+
transform: translateX(-50%);
|
|
983
|
+
width: 0;
|
|
984
|
+
height: 0;
|
|
985
|
+
border-left: 10px solid transparent;
|
|
986
|
+
border-right: 10px solid transparent;
|
|
987
|
+
border-top: 15px solid #3b82f6;
|
|
988
|
+
}
|
|
989
|
+
.component-grid {
|
|
990
|
+
display: grid;
|
|
991
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
992
|
+
gap: 1rem;
|
|
993
|
+
margin: 1rem 0;
|
|
994
|
+
}
|
|
995
|
+
.component-card {
|
|
996
|
+
background: #1e293b;
|
|
997
|
+
border: 1px solid #475569;
|
|
998
|
+
border-radius: 0.5rem;
|
|
999
|
+
padding: 1rem;
|
|
1000
|
+
text-align: center;
|
|
1001
|
+
}
|
|
1002
|
+
.light-mode .component-card {
|
|
1003
|
+
background: #f8fafc;
|
|
1004
|
+
border: 1px solid #cbd5e1;
|
|
1005
|
+
color: #1e293b;
|
|
1006
|
+
}
|
|
1007
|
+
.btn {
|
|
1008
|
+
background: #3b82f6;
|
|
1009
|
+
color: #fff;
|
|
1010
|
+
border: none;
|
|
1011
|
+
border-radius: 8px;
|
|
1012
|
+
padding: 0.75rem 1.5rem;
|
|
1013
|
+
font-weight: 600;
|
|
1014
|
+
cursor: pointer;
|
|
1015
|
+
margin: 0.25rem;
|
|
1016
|
+
transition: all 0.2s;
|
|
1017
|
+
text-decoration: none;
|
|
1018
|
+
display: inline-block;
|
|
1019
|
+
}
|
|
1020
|
+
.btn:hover {
|
|
1021
|
+
background: #2563eb;
|
|
1022
|
+
transform: translateY(-1px);
|
|
1023
|
+
}
|
|
1024
|
+
.btn-secondary {
|
|
1025
|
+
background: #6b7280;
|
|
1026
|
+
}
|
|
1027
|
+
.btn-secondary:hover {
|
|
1028
|
+
background: #4b5563;
|
|
1029
|
+
}
|
|
1030
|
+
</style>
|
|
1031
|
+
</head>
|
|
1032
|
+
<body id="body-root">
|
|
1033
|
+
<div class="max-w-6xl mx-auto p-6">
|
|
1034
|
+
<div class="flex justify-between items-center mb-8">
|
|
1035
|
+
<div>
|
|
1036
|
+
<h1 class="text-4xl font-bold text-blue-400">🏗️ Visão Geral da Arquitetura</h1>
|
|
1037
|
+
<p class="text-xl text-gray-300">Arquitetura em Camadas + DDD para Framework de Testes</p>
|
|
1038
|
+
</div>
|
|
1039
|
+
<div class="flex gap-2">
|
|
1040
|
+
<button id="toggle-theme" class="btn btn-secondary" type="button">🌙 Tema</button>
|
|
1041
|
+
<a href="./index.html" class="btn">🏠 Voltar</a>
|
|
1042
|
+
</div>
|
|
1043
|
+
</div>
|
|
1044
|
+
|
|
1045
|
+
<!-- Princípios Arquiteturais -->
|
|
1046
|
+
<div class="card">
|
|
1047
|
+
<h2 class="text-2xl font-bold mb-4 text-green-400">🎯 Princípios Arquiteturais</h2>
|
|
1048
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
1049
|
+
<div>
|
|
1050
|
+
<h3 class="text-lg font-semibold text-yellow-400 mb-2">✅ SOLID</h3>
|
|
1051
|
+
<ul class="text-sm space-y-1">
|
|
1052
|
+
<li>• <strong>S</strong>ingle Responsibility - Uma responsabilidade por componente</li>
|
|
1053
|
+
<li>• <strong>O</strong>pen/Closed - Aberto para extensão, fechado para modificação</li>
|
|
1054
|
+
<li>• <strong>L</strong>iskov Substitution - Subtipos substituíveis</li>
|
|
1055
|
+
<li>• <strong>I</strong>nterface Segregation - Interfaces específicas</li>
|
|
1056
|
+
<li>• <strong>D</strong>ependency Inversion - Dependa de abstrações</li>
|
|
1057
|
+
</ul>
|
|
1058
|
+
</div>
|
|
1059
|
+
<div>
|
|
1060
|
+
<h3 class="text-lg font-semibold text-yellow-400 mb-2">🔧 DDD (Domain-Driven Design)</h3>
|
|
1061
|
+
<ul class="text-sm space-y-1">
|
|
1062
|
+
<li>• Separação clara entre domínios</li>
|
|
1063
|
+
<li>• Linguagem ubíqua para testes</li>
|
|
1064
|
+
<li>• Bounded contexts por tipo de automação</li>
|
|
1065
|
+
<li>• Agregados para componentes relacionados</li>
|
|
1066
|
+
</ul>
|
|
1067
|
+
</div>
|
|
1068
|
+
</div>
|
|
1069
|
+
</div>
|
|
1070
|
+
|
|
1071
|
+
<!-- Arquitetura em Camadas -->
|
|
1072
|
+
<div class="card">
|
|
1073
|
+
<h2 class="text-2xl font-bold mb-4 text-purple-400">📋 Arquitetura em Camadas</h2>
|
|
1074
|
+
|
|
1075
|
+
<!-- Camada de Apresentação -->
|
|
1076
|
+
<div class="layer-box">
|
|
1077
|
+
<h3 class="text-xl font-bold text-yellow-400">🖥️ Camada de Apresentação</h3>
|
|
1078
|
+
<p class="text-sm mt-2">Interface para desenvolvedores de testes</p>
|
|
1079
|
+
<div class="component-grid mt-4">
|
|
1080
|
+
<div class="component-card">
|
|
1081
|
+
<h4 class="font-semibold text-blue-400">Componentes Públicos</h4>
|
|
1082
|
+
<p class="text-xs">ApiActions, Actions, MobileActions</p>
|
|
1083
|
+
</div>
|
|
1084
|
+
<div class="component-card">
|
|
1085
|
+
<h4 class="font-semibold text-blue-400">Scripts de Inicialização</h4>
|
|
1086
|
+
<p class="text-xs">init-api.ts, init-frontend.ts</p>
|
|
1087
|
+
</div>
|
|
1088
|
+
</div>
|
|
1089
|
+
<div class="arrow-down"></div>
|
|
1090
|
+
</div>
|
|
1091
|
+
|
|
1092
|
+
<!-- Camada de Aplicação -->
|
|
1093
|
+
<div class="layer-box">
|
|
1094
|
+
<h3 class="text-xl font-bold text-yellow-400">⚙️ Camada de Aplicação</h3>
|
|
1095
|
+
<p class="text-sm mt-2">Orquestração e casos de uso</p>
|
|
1096
|
+
<div class="component-grid mt-4">
|
|
1097
|
+
<div class="component-card">
|
|
1098
|
+
<h4 class="font-semibold text-green-400">Helpers</h4>
|
|
1099
|
+
<p class="text-xs">BancoHelper, ConexaoTestHelper</p>
|
|
1100
|
+
</div>
|
|
1101
|
+
<div class="component-card">
|
|
1102
|
+
<h4 class="font-semibold text-green-400">Test Context</h4>
|
|
1103
|
+
<p class="text-xs">TestContext, TestAnnotations</p>
|
|
1104
|
+
</div>
|
|
1105
|
+
</div>
|
|
1106
|
+
<div class="arrow-down"></div>
|
|
1107
|
+
</div>
|
|
1108
|
+
|
|
1109
|
+
<!-- Camada de Domínio -->
|
|
1110
|
+
<div class="layer-box">
|
|
1111
|
+
<h3 class="text-xl font-bold text-yellow-400">🏛️ Camada de Domínio</h3>
|
|
1112
|
+
<p class="text-sm mt-2">Regras de negócio e entidades</p>
|
|
1113
|
+
<div class="component-grid mt-4">
|
|
1114
|
+
<div class="component-card">
|
|
1115
|
+
<h4 class="font-semibold text-orange-400">Interfaces</h4>
|
|
1116
|
+
<p class="text-xs">Contratos e tipos</p>
|
|
1117
|
+
</div>
|
|
1118
|
+
<div class="component-card">
|
|
1119
|
+
<h4 class="font-semibold text-orange-400">Funções de Erro</h4>
|
|
1120
|
+
<p class="text-xs">BaseError, ValidationError</p>
|
|
1121
|
+
</div>
|
|
1122
|
+
</div>
|
|
1123
|
+
<div class="arrow-down"></div>
|
|
1124
|
+
</div>
|
|
1125
|
+
|
|
1126
|
+
<!-- Camada de Infraestrutura -->
|
|
1127
|
+
<div class="layer-box">
|
|
1128
|
+
<h3 class="text-xl font-bold text-yellow-400">🔧 Camada de Infraestrutura</h3>
|
|
1129
|
+
<p class="text-sm mt-2">Integração com ferramentas externas</p>
|
|
1130
|
+
<div class="component-grid mt-4">
|
|
1131
|
+
<div class="component-card">
|
|
1132
|
+
<h4 class="font-semibold text-red-400">Playwright</h4>
|
|
1133
|
+
<p class="text-xs">Automação Web</p>
|
|
1134
|
+
</div>
|
|
1135
|
+
<div class="component-card">
|
|
1136
|
+
<h4 class="font-semibold text-red-400">Appium</h4>
|
|
1137
|
+
<p class="text-xs">Automação Mobile</p>
|
|
1138
|
+
</div>
|
|
1139
|
+
<div class="component-card">
|
|
1140
|
+
<h4 class="font-semibold text-red-400">SSH</h4>
|
|
1141
|
+
<p class="text-xs">Conexões SSH</p>
|
|
1142
|
+
</div>
|
|
1143
|
+
<div class="component-card">
|
|
1144
|
+
<h4 class="font-semibold text-red-400">Database</h4>
|
|
1145
|
+
<p class="text-xs">Conexões BD</p>
|
|
1146
|
+
</div>
|
|
1147
|
+
</div>
|
|
1148
|
+
</div>
|
|
1149
|
+
</div>
|
|
1150
|
+
|
|
1151
|
+
<!-- Bounded Contexts -->
|
|
1152
|
+
<div class="card">
|
|
1153
|
+
<h2 class="text-2xl font-bold mb-4 text-cyan-400">🎯 Bounded Contexts (DDD)</h2>
|
|
1154
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
1155
|
+
<div class="component-card">
|
|
1156
|
+
<h3 class="text-lg font-semibold text-blue-400 mb-2">🌐 API Context</h3>
|
|
1157
|
+
<ul class="text-xs space-y-1 text-left">
|
|
1158
|
+
<li>• ApiActions</li>
|
|
1159
|
+
<li>• JsonResponse</li>
|
|
1160
|
+
<li>• HTTP validations</li>
|
|
1161
|
+
</ul>
|
|
1162
|
+
</div>
|
|
1163
|
+
<div class="component-card">
|
|
1164
|
+
<h3 class="text-lg font-semibold text-green-400 mb-2">🎭 Web Context</h3>
|
|
1165
|
+
<ul class="text-xs space-y-1 text-left">
|
|
1166
|
+
<li>• Actions (Playwright)</li>
|
|
1167
|
+
<li>• Browser automation</li>
|
|
1168
|
+
<li>• Page interactions</li>
|
|
1169
|
+
</ul>
|
|
1170
|
+
</div>
|
|
1171
|
+
<div class="component-card">
|
|
1172
|
+
<h3 class="text-lg font-semibold text-orange-400 mb-2">📱 Mobile Context</h3>
|
|
1173
|
+
<ul class="text-xs space-y-1 text-left">
|
|
1174
|
+
<li>• MobileActions</li>
|
|
1175
|
+
<li>• MobileConnection</li>
|
|
1176
|
+
<li>• Appium integration</li>
|
|
1177
|
+
</ul>
|
|
1178
|
+
</div>
|
|
1179
|
+
<div class="component-card">
|
|
1180
|
+
<h3 class="text-lg font-semibold text-purple-400 mb-2">🔐 SSH Context</h3>
|
|
1181
|
+
<ul class="text-xs space-y-1 text-left">
|
|
1182
|
+
<li>• SSHActions</li>
|
|
1183
|
+
<li>• SSHClient</li>
|
|
1184
|
+
<li>• Remote commands</li>
|
|
1185
|
+
</ul>
|
|
1186
|
+
</div>
|
|
1187
|
+
<div class="component-card">
|
|
1188
|
+
<h3 class="text-lg font-semibold text-red-400 mb-2">🗄️ Database Context</h3>
|
|
1189
|
+
<ul class="text-xs space-y-1 text-left">
|
|
1190
|
+
<li>• BancoActions</li>
|
|
1191
|
+
<li>• BancoHelper</li>
|
|
1192
|
+
<li>• SQL operations</li>
|
|
1193
|
+
</ul>
|
|
1194
|
+
</div>
|
|
1195
|
+
<div class="component-card">
|
|
1196
|
+
<h3 class="text-lg font-semibold text-yellow-400 mb-2">🛡️ Security Context</h3>
|
|
1197
|
+
<ul class="text-xs space-y-1 text-left">
|
|
1198
|
+
<li>• BuildSecurity</li>
|
|
1199
|
+
<li>• KeysManager</li>
|
|
1200
|
+
<li>• Protection systems</li>
|
|
1201
|
+
</ul>
|
|
1202
|
+
</div>
|
|
1203
|
+
</div>
|
|
1204
|
+
</div>
|
|
1205
|
+
|
|
1206
|
+
<!-- Padrões de Design -->
|
|
1207
|
+
<div class="card">
|
|
1208
|
+
<h2 class="text-2xl font-bold mb-4 text-pink-400">🎨 Padrões de Design Implementados</h2>
|
|
1209
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
1210
|
+
<div>
|
|
1211
|
+
<h3 class="text-lg font-semibold text-blue-400 mb-3">🏭 Padrões Criacionais</h3>
|
|
1212
|
+
<ul class="space-y-2 text-sm">
|
|
1213
|
+
<li>• <strong>Factory Method</strong> - Criação de conexões específicas</li>
|
|
1214
|
+
<li>• <strong>Builder</strong> - Construção de objetos de teste complexos</li>
|
|
1215
|
+
<li>• <strong>Singleton</strong> - Gerenciamento de configurações globais</li>
|
|
1216
|
+
</ul>
|
|
1217
|
+
</div>
|
|
1218
|
+
<div>
|
|
1219
|
+
<h3 class="text-lg font-semibold text-green-400 mb-3">🔧 Padrões Estruturais</h3>
|
|
1220
|
+
<ul class="space-y-2 text-sm">
|
|
1221
|
+
<li>• <strong>Adapter</strong> - Integração com ferramentas externas</li>
|
|
1222
|
+
<li>• <strong>Facade</strong> - Interface simplificada para componentes</li>
|
|
1223
|
+
<li>• <strong>Decorator</strong> - Adição de funcionalidades dinamicamente</li>
|
|
1224
|
+
</ul>
|
|
1225
|
+
</div>
|
|
1226
|
+
<div>
|
|
1227
|
+
<h3 class="text-lg font-semibold text-orange-400 mb-3">⚡ Padrões Comportamentais</h3>
|
|
1228
|
+
<ul class="space-y-2 text-sm">
|
|
1229
|
+
<li>• <strong>Strategy</strong> - Diferentes estratégias de validação</li>
|
|
1230
|
+
<li>• <strong>Observer</strong> - Notificações de eventos de teste</li>
|
|
1231
|
+
<li>• <strong>Command</strong> - Execução de ações encapsuladas</li>
|
|
1232
|
+
</ul>
|
|
1233
|
+
</div>
|
|
1234
|
+
<div>
|
|
1235
|
+
<h3 class="text-lg font-semibold text-purple-400 mb-3">🏛️ Padrões Arquiteturais</h3>
|
|
1236
|
+
<ul class="space-y-2 text-sm">
|
|
1237
|
+
<li>• <strong>Repository</strong> - Acesso a dados abstrato</li>
|
|
1238
|
+
<li>• <strong>Unit of Work</strong> - Transações coordenadas</li>
|
|
1239
|
+
<li>• <strong>Dependency Injection</strong> - Inversão de controle</li>
|
|
1240
|
+
</ul>
|
|
1241
|
+
</div>
|
|
1242
|
+
</div>
|
|
1243
|
+
</div>
|
|
1244
|
+
|
|
1245
|
+
<!-- Fluxo de Dados -->
|
|
1246
|
+
<div class="card">
|
|
1247
|
+
<h2 class="text-2xl font-bold mb-4 text-indigo-400">🔄 Fluxo de Dados</h2>
|
|
1248
|
+
<div class="text-center">
|
|
1249
|
+
<div class="inline-block text-left">
|
|
1250
|
+
<div class="flex items-center space-x-4 mb-4">
|
|
1251
|
+
<div class="w-16 h-16 bg-blue-500 rounded-full flex items-center justify-center text-2xl">👨💻</div>
|
|
1252
|
+
<div class="text-2xl">→</div>
|
|
1253
|
+
<div class="w-16 h-16 bg-green-500 rounded-full flex items-center justify-center text-2xl">🎭</div>
|
|
1254
|
+
<div class="text-2xl">→</div>
|
|
1255
|
+
<div class="w-16 h-16 bg-orange-500 rounded-full flex items-center justify-center text-2xl">⚙️</div>
|
|
1256
|
+
<div class="text-2xl">→</div>
|
|
1257
|
+
<div class="w-16 h-16 bg-red-500 rounded-full flex items-center justify-center text-2xl">🔧</div>
|
|
1258
|
+
</div>
|
|
1259
|
+
<div class="flex items-center space-x-2 text-sm">
|
|
1260
|
+
<span class="w-20 text-center">Teste</span>
|
|
1261
|
+
<span class="w-8"></span>
|
|
1262
|
+
<span class="w-20 text-center">Component</span>
|
|
1263
|
+
<span class="w-8"></span>
|
|
1264
|
+
<span class="w-20 text-center">Helper</span>
|
|
1265
|
+
<span class="w-8"></span>
|
|
1266
|
+
<span class="w-20 text-center">Tool</span>
|
|
1267
|
+
</div>
|
|
1268
|
+
</div>
|
|
1269
|
+
</div>
|
|
1270
|
+
<div class="mt-6 text-sm">
|
|
1271
|
+
<p><strong>1. Teste:</strong> Desenvolvedor escreve teste usando componentes</p>
|
|
1272
|
+
<p><strong>2. Component:</strong> Valida entrada e delega para helpers</p>
|
|
1273
|
+
<p><strong>3. Helper:</strong> Orquestra operações e aplica regras de negócio</p>
|
|
1274
|
+
<p><strong>4. Tool:</strong> Executa operação na ferramenta específica</p>
|
|
1275
|
+
</div>
|
|
1276
|
+
</div>
|
|
1277
|
+
|
|
1278
|
+
<!-- Benefícios -->
|
|
1279
|
+
<div class="card">
|
|
1280
|
+
<h2 class="text-2xl font-bold mb-4 text-teal-400">✨ Benefícios da Arquitetura</h2>
|
|
1281
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
1282
|
+
<div>
|
|
1283
|
+
<h3 class="text-lg font-semibold text-green-400 mb-3">💪 Manutenibilidade</h3>
|
|
1284
|
+
<ul class="space-y-1 text-sm">
|
|
1285
|
+
<li>• Separação clara de responsabilidades</li>
|
|
1286
|
+
<li>• Baixo acoplamento entre camadas</li>
|
|
1287
|
+
<li>• Fácil localização de bugs</li>
|
|
1288
|
+
<li>• Código autoexplicativo</li>
|
|
1289
|
+
</ul>
|
|
1290
|
+
</div>
|
|
1291
|
+
<div>
|
|
1292
|
+
<h3 class="text-lg font-semibold text-blue-400 mb-3">🚀 Escalabilidade</h3>
|
|
1293
|
+
<ul class="space-y-1 text-sm">
|
|
1294
|
+
<li>• Adição de novos componentes sem impacto</li>
|
|
1295
|
+
<li>• Extensão de funcionalidades existentes</li>
|
|
1296
|
+
<li>• Suporte a múltiplas ferramentas</li>
|
|
1297
|
+
<li>• Reutilização de código</li>
|
|
1298
|
+
</ul>
|
|
1299
|
+
</div>
|
|
1300
|
+
<div>
|
|
1301
|
+
<h3 class="text-lg font-semibold text-orange-400 mb-3">🧪 Testabilidade</h3>
|
|
1302
|
+
<ul class="space-y-1 text-sm">
|
|
1303
|
+
<li>• Mocks e stubs facilitados</li>
|
|
1304
|
+
<li>• Testes unitários isolados</li>
|
|
1305
|
+
<li>• Testes de integração focados</li>
|
|
1306
|
+
<li>• Cobertura de código eficiente</li>
|
|
1307
|
+
</ul>
|
|
1308
|
+
</div>
|
|
1309
|
+
<div>
|
|
1310
|
+
<h3 class="text-lg font-semibold text-purple-400 mb-3">👥 Colaboração</h3>
|
|
1311
|
+
<ul class="space-y-1 text-sm">
|
|
1312
|
+
<li>• Linguagem comum entre times</li>
|
|
1313
|
+
<li>• Documentação arquitetural clara</li>
|
|
1314
|
+
<li>• Onboarding simplificado</li>
|
|
1315
|
+
<li>• Padronização de práticas</li>
|
|
1316
|
+
</ul>
|
|
1317
|
+
</div>
|
|
1318
|
+
</div>
|
|
1319
|
+
</div>
|
|
1320
|
+
|
|
1321
|
+
</div>
|
|
1322
|
+
|
|
1323
|
+
<script>
|
|
1324
|
+
document.getElementById('toggle-theme').onclick = () => {
|
|
1325
|
+
document.getElementById('body-root').classList.toggle('light-mode')
|
|
1326
|
+
}
|
|
1327
|
+
</script>
|
|
1328
|
+
</body>
|
|
1329
|
+
</html>`;
|
|
1330
|
+
fs.writeFileSync(path.join(DOCS_CONFIG.outputDir, 'architecture-overview.html'), template);
|
|
1331
|
+
console.log('✅ Arquivo architecture-overview.html gerado');
|
|
1332
|
+
}
|
|
1333
|
+
/**
|
|
1334
|
+
* Função principal de geração
|
|
1335
|
+
*/
|
|
1336
|
+
function generateStaticDocs() {
|
|
1337
|
+
console.log('🚀 Gerando documentação estática do AutoCore...');
|
|
1338
|
+
try {
|
|
1339
|
+
// Criar diretório de saída se não existir
|
|
1340
|
+
if (!fs.existsSync(DOCS_CONFIG.outputDir)) {
|
|
1341
|
+
fs.mkdirSync(DOCS_CONFIG.outputDir, { recursive: true });
|
|
1342
|
+
}
|
|
1343
|
+
// Gerar todas as páginas de documentação
|
|
1344
|
+
generateIndexHtml();
|
|
1345
|
+
generateOpenApiSpec();
|
|
1346
|
+
generateQuickReference();
|
|
1347
|
+
generateArchitectureOverview();
|
|
1348
|
+
console.log('✅ Documentação estática gerada com sucesso!');
|
|
1349
|
+
console.log('📁 Arquivos gerados em:', DOCS_CONFIG.outputDir);
|
|
1350
|
+
console.log(' • index.html - Página principal');
|
|
1351
|
+
console.log(' • quick-reference.html - Referência rápida dos componentes');
|
|
1352
|
+
console.log(' • architecture-overview.html - Visão geral da arquitetura');
|
|
1353
|
+
console.log(' • openapi.json - Especificação OpenAPI');
|
|
1354
|
+
console.log('🌐 Abra o arquivo docs/index.html em um navegador para visualizar');
|
|
1355
|
+
}
|
|
1356
|
+
catch (error) {
|
|
1357
|
+
log.error('❌ Erro ao gerar documentação:', error);
|
|
1358
|
+
process.exit(1);
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
// Executar geração sempre (para compatibilidade com tsx)
|
|
1362
|
+
generateStaticDocs();
|
|
1363
|
+
export { generateStaticDocs, DOCS_CONFIG };
|