@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,581 @@
|
|
|
1
|
+
import { createRequire } from 'module';
|
|
2
|
+
import oracledb from 'oracledb';
|
|
3
|
+
import { BaseError, IntegrationError, ValidationError, } from '../functions/errors/index.js';
|
|
4
|
+
import { AutoDocs } from '../hubdocs/HubDocs.js';
|
|
5
|
+
import { TestContext } from '../testContext/TestContext.js';
|
|
6
|
+
import { UnifiedReportManager } from '../testContext/UnifiedReportManager.js';
|
|
7
|
+
import { Logger } from '../utils/Logger.js';
|
|
8
|
+
import { EnviromentHelper } from './EnviromentHelper.js';
|
|
9
|
+
// 🤖 IMPORTAÇÃO CRÍTICA: Força inicialização do StatementTracker para projetos Banco
|
|
10
|
+
import '../hubdocs/StatementTracker.js';
|
|
11
|
+
import { StatementTracker } from '../hubdocs/StatementTracker.js';
|
|
12
|
+
// 🚫 REMOVIDO: import { installDatabaseInterceptor } from '../utils/DatabaseInterceptor.js'
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
14
|
+
/**
|
|
15
|
+
* Tipos suportados para seleção de coluna.
|
|
16
|
+
*/
|
|
17
|
+
export const BancoType = {
|
|
18
|
+
LONG: 'LONG',
|
|
19
|
+
VARCHAR: 'VARCHAR',
|
|
20
|
+
DOUBLE: 'DOUBLE',
|
|
21
|
+
INTEGER: 'INTEGER',
|
|
22
|
+
DATE: 'DATE',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Classe de ações utilitárias para automação de banco Oracle.
|
|
26
|
+
* Inspirada no padrão Actions do Qandalf/Java.
|
|
27
|
+
* Todos métodos registram logs e metadados no UnifiedReportManager.
|
|
28
|
+
*
|
|
29
|
+
* ✅ CONSOLIDADO: Funcionalidades de BancoHelper foram integradas aqui.
|
|
30
|
+
*/
|
|
31
|
+
export class BancoActions {
|
|
32
|
+
static successCount = 0;
|
|
33
|
+
static failureCount = 0;
|
|
34
|
+
static inicioExecucao;
|
|
35
|
+
static fimExecucao;
|
|
36
|
+
static queryExecutadas = 0;
|
|
37
|
+
/**
|
|
38
|
+
* Registra o início da execução para relatórios.
|
|
39
|
+
*/
|
|
40
|
+
static registrarInicioExecucao() {
|
|
41
|
+
BancoActions.inicioExecucao = new Date();
|
|
42
|
+
Logger.info(`⏱️ Início da execução de Banco registrado: ${BancoActions.inicioExecucao.toLocaleTimeString()}`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Registra o fim da execução para relatórios.
|
|
46
|
+
*/
|
|
47
|
+
static registrarFimExecucao() {
|
|
48
|
+
BancoActions.fimExecucao = new Date();
|
|
49
|
+
if (BancoActions.inicioExecucao) {
|
|
50
|
+
const duration = (BancoActions.fimExecucao.getTime() -
|
|
51
|
+
BancoActions.inicioExecucao.getTime()) /
|
|
52
|
+
1000;
|
|
53
|
+
Logger.info(`⏱️ Execução de Banco concluída em ${duration.toFixed(2)}s`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Registra um evento de log para o teste atual.
|
|
58
|
+
* @param message Mensagem de log.
|
|
59
|
+
*/
|
|
60
|
+
static logEvent(message) {
|
|
61
|
+
const testInfo = TestContext.getSafeTestInfo();
|
|
62
|
+
if (testInfo?.title) {
|
|
63
|
+
try {
|
|
64
|
+
UnifiedReportManager.adicionarLog(testInfo.title, message);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
Logger.info(message);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
Logger.info(message);
|
|
72
|
+
}
|
|
73
|
+
// Log tradicional para annotations
|
|
74
|
+
if (testInfo &&
|
|
75
|
+
testInfo.annotations &&
|
|
76
|
+
Array.isArray(testInfo.annotations)) {
|
|
77
|
+
testInfo.annotations.push({ type: 'log', description: message });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Marca que o BancoActions foi utilizado automaticamente.
|
|
82
|
+
* @private
|
|
83
|
+
*/
|
|
84
|
+
static marcarUsoAutomatico() {
|
|
85
|
+
if (!BancoActions.inicioExecucao) {
|
|
86
|
+
BancoActions.registrarInicioExecucao();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Executa uma query Oracle e retorna os resultados (método base).
|
|
91
|
+
* Registra logs, métricas e metadados no UnifiedReportManager.
|
|
92
|
+
* @param query Query SQL a ser executada.
|
|
93
|
+
* @param options Opções de execução (autoCommit, bindParams, outFormat).
|
|
94
|
+
* @returns Promise<Array<unknown>> Array de resultados.
|
|
95
|
+
*/
|
|
96
|
+
static async executarQuery(query, options = {}) {
|
|
97
|
+
const startTime = Date.now();
|
|
98
|
+
// 🆕 Registrar statement no StatementTracker
|
|
99
|
+
let statementTimestamp = null;
|
|
100
|
+
try {
|
|
101
|
+
const { StatementTracker } = require('../hubdocs/StatementTracker.js');
|
|
102
|
+
statementTimestamp = StatementTracker.startStatement('BancoActions', `executarQuery: ${query.substring(0, 50)}...`);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
Logger.warning(`Não foi possível registrar statement no StatementTracker: ${error}`);
|
|
106
|
+
}
|
|
107
|
+
const execOptions = {
|
|
108
|
+
outFormat: oracledb.OUT_FORMAT_OBJECT,
|
|
109
|
+
...options,
|
|
110
|
+
};
|
|
111
|
+
let connection;
|
|
112
|
+
const queryTimestamp = new Date().toISOString();
|
|
113
|
+
try {
|
|
114
|
+
BancoActions.marcarUsoAutomatico();
|
|
115
|
+
const bindParamsForAutoDocs = Array.isArray(options.bindParams)
|
|
116
|
+
? options.bindParams
|
|
117
|
+
: options.bindParams
|
|
118
|
+
? Object.values(options.bindParams)
|
|
119
|
+
: [];
|
|
120
|
+
AutoDocs.interceptDB(query, bindParamsForAutoDocs, 'oracle', 'Execução de Query Oracle', 'BancoActions');
|
|
121
|
+
if (process.env.NODE_ORACLEDB_DRIVER_MODE === 'thick') {
|
|
122
|
+
oracledb.initOracleClient({ libDir: process.env.ORACLE_CLIENT_PATH });
|
|
123
|
+
}
|
|
124
|
+
const connectionString = EnviromentHelper.buildConnectionString();
|
|
125
|
+
const connectionParts = connectionString.match(/^([^/]+)\/([^@]+)@(.+)$/);
|
|
126
|
+
if (!connectionParts) {
|
|
127
|
+
throw new IntegrationError('INVALID_CONNECTION_STRING', 'Invalid connection string format', 'String de conexão inválida. Formato esperado: user/password@connectString', undefined, { metadata: { connectionString } });
|
|
128
|
+
}
|
|
129
|
+
connection = await oracledb.getConnection({
|
|
130
|
+
user: connectionParts[1],
|
|
131
|
+
password: connectionParts[2],
|
|
132
|
+
connectString: connectionParts[3],
|
|
133
|
+
});
|
|
134
|
+
const queryTruncated = query.slice(0, 100) + (query.length > 100 ? '...' : '');
|
|
135
|
+
BancoActions.logEvent(`🔍 Executando query: ${queryTruncated}`);
|
|
136
|
+
const bindParams = options.bindParams || {};
|
|
137
|
+
const result = await connection.execute(query, bindParams, {
|
|
138
|
+
autoCommit: options.autoCommit,
|
|
139
|
+
outFormat: options.outFormat,
|
|
140
|
+
});
|
|
141
|
+
const duration = (Date.now() - startTime) / 1000;
|
|
142
|
+
const rowCount = result.rows?.length || 0;
|
|
143
|
+
AutoDocs.updateDBResult(query, queryTimestamp, true, duration * 1000, undefined, rowCount);
|
|
144
|
+
try {
|
|
145
|
+
const queryTruncatedForAction = query.slice(0, 200) + (query.length > 200 ? '...' : '');
|
|
146
|
+
StatementTracker.recordAction('DB', queryTruncatedForAction, true, duration * 1000, {
|
|
147
|
+
query: query.slice(0, 500),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
// Falha silenciosa
|
|
152
|
+
}
|
|
153
|
+
BancoActions.queryExecutadas++;
|
|
154
|
+
BancoActions.logEvent(`✅ Query executada com sucesso em ${duration.toFixed(2)}s - ${rowCount} registros retornados`);
|
|
155
|
+
// 🆕 Finalizar statement com sucesso
|
|
156
|
+
if (statementTimestamp) {
|
|
157
|
+
try {
|
|
158
|
+
const { StatementTracker } = require('../hubdocs/StatementTracker.js');
|
|
159
|
+
StatementTracker.finishStatement(statementTimestamp, true, `✅ Query executada: ${rowCount} registros em ${duration.toFixed(2)}s`);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
Logger.warning(`Não foi possível finalizar statement no StatementTracker: ${error}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const testInfo = TestContext.getSafeTestInfo();
|
|
166
|
+
if (testInfo?.title) {
|
|
167
|
+
try {
|
|
168
|
+
const currentMetadata = UnifiedReportManager.getMetrics().testes.find((t) => t.nome === testInfo.title)?.metadata || {};
|
|
169
|
+
UnifiedReportManager.setTestMetadata(testInfo.title, {
|
|
170
|
+
...currentMetadata,
|
|
171
|
+
queries: (currentMetadata.queries || 0) + 1,
|
|
172
|
+
totalRecords: (currentMetadata.totalRecords || 0) + rowCount,
|
|
173
|
+
lastQueryDuration: duration,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Ignorar
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return result.rows || [];
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
const duration = (Date.now() - startTime) / 1000;
|
|
184
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
185
|
+
AutoDocs.updateDBResult(query, queryTimestamp, false, duration * 1000, errorMessage);
|
|
186
|
+
try {
|
|
187
|
+
const queryTruncatedForAction = query.slice(0, 200) + (query.length > 200 ? '...' : '');
|
|
188
|
+
StatementTracker.recordAction('DB', queryTruncatedForAction, false, duration * 1000, {
|
|
189
|
+
query: query.slice(0, 500),
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
// Falha silenciosa
|
|
194
|
+
}
|
|
195
|
+
BancoActions.logEvent(`❌ Erro ao executar query em ${duration.toFixed(2)}s: ${errorMessage}`);
|
|
196
|
+
// 🆕 Finalizar statement com erro
|
|
197
|
+
if (statementTimestamp) {
|
|
198
|
+
try {
|
|
199
|
+
const { StatementTracker } = require('../hubdocs/StatementTracker.js');
|
|
200
|
+
StatementTracker.finishStatement(statementTimestamp, false, `❌ Erro na query: ${errorMessage}`);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
Logger.warning(`Não foi possível finalizar statement no StatementTracker: ${error}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (error instanceof BaseError) {
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
throw new IntegrationError('DATABASE_QUERY_FAILED', `Database query failed: ${errorMessage}`, `Falha ao executar query: ${errorMessage}`, error instanceof Error ? error : new Error(String(error)), { metadata: { query: query.slice(0, 500), duration } });
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
if (connection) {
|
|
213
|
+
try {
|
|
214
|
+
await connection.close();
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
BancoActions.logEvent(`⚠️ Erro ao fechar conexão: ${err}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Executa uma instrução SQL (DDL/DML) com descrição.
|
|
224
|
+
* Registra logs e metadados no UnifiedReportManager.
|
|
225
|
+
* @param descriptionToAction Descrição da ação.
|
|
226
|
+
* @param sql SQL a ser executado.
|
|
227
|
+
* @returns Promise<void>
|
|
228
|
+
*/
|
|
229
|
+
static async execute(descriptionToAction, sql) {
|
|
230
|
+
const startTime = Date.now();
|
|
231
|
+
Logger.info(`🔶 Executando: ${descriptionToAction} >> ${sql}`);
|
|
232
|
+
BancoActions.logToUnified(`🔶 ${descriptionToAction} >> ${sql}`);
|
|
233
|
+
try {
|
|
234
|
+
await BancoActions.executarQuery(sql);
|
|
235
|
+
const duration = Date.now() - startTime;
|
|
236
|
+
Logger.success(`✅ ${descriptionToAction} executada com sucesso (${duration}ms)`);
|
|
237
|
+
BancoActions.logToUnified(`✅ ${descriptionToAction} executada com sucesso (${duration}ms)`);
|
|
238
|
+
BancoActions.addActionMetadata('Executar', true, duration);
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
const duration = Date.now() - startTime;
|
|
242
|
+
Logger.error(`❌ Erro ao executar: ${descriptionToAction}`, error);
|
|
243
|
+
BancoActions.logToUnified(`❌ Erro ao executar: ${descriptionToAction} - ${error}`);
|
|
244
|
+
BancoActions.addActionMetadata('Executar', false, duration);
|
|
245
|
+
if (error instanceof BaseError) {
|
|
246
|
+
throw error;
|
|
247
|
+
}
|
|
248
|
+
throw new IntegrationError('DATABASE_EXECUTION_FAILED', `Database execution failed: ${error}`, `Falha na execução do banco: ${error}`, error instanceof Error ? error : new Error(String(error)), { metadata: { action: descriptionToAction, duration } });
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Executa uma instrução SQL de consulta e retorna os resultados.
|
|
253
|
+
* Registra logs e metadados no UnifiedReportManager.
|
|
254
|
+
* @param sql SQL de consulta.
|
|
255
|
+
* @returns Promise<Array<any>> Array de resultados.
|
|
256
|
+
*/
|
|
257
|
+
static async executeQuery(sql) {
|
|
258
|
+
const startTime = Date.now();
|
|
259
|
+
BancoActions.logToUnified(`🔍 Executando executeQuery: ${sql}`);
|
|
260
|
+
// ✅ REMOVIDO: Interceptação duplicada - executarQuery já faz isso
|
|
261
|
+
// AutoDocs.interceptDB(sql, [], 'oracle')
|
|
262
|
+
try {
|
|
263
|
+
const result = await BancoActions.executarQuery(sql);
|
|
264
|
+
const duration = Date.now() - startTime;
|
|
265
|
+
BancoActions.logToUnified(`✅ executeQuery executado (${duration}ms) - ${result.length} registros`);
|
|
266
|
+
BancoActions.addActionMetadata('Select', true, duration);
|
|
267
|
+
return result;
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
const duration = Date.now() - startTime;
|
|
271
|
+
BancoActions.logToUnified(`❌ Erro no executeQuery: ${error}`);
|
|
272
|
+
BancoActions.addActionMetadata('Select', false, duration);
|
|
273
|
+
if (error instanceof BaseError) {
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
throw new IntegrationError('DATABASE_QUERY_FAILED', `Database query failed: ${error}`, `Falha na consulta do banco: ${error}`, error instanceof Error ? error : new Error(String(error)), { metadata: { sql, duration } });
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Executa uma instrução SQL de atualização com descrição.
|
|
281
|
+
* Registra logs e metadados no UnifiedReportManager.
|
|
282
|
+
* @param descriptionToAction Descrição da ação.
|
|
283
|
+
* @param sql SQL de update.
|
|
284
|
+
* @returns Promise<number> Número de linhas afetadas.
|
|
285
|
+
*/
|
|
286
|
+
static async update(descriptionToAction, sql) {
|
|
287
|
+
const startTime = Date.now();
|
|
288
|
+
BancoActions.logToUnified(`🔄 ${descriptionToAction} >> ${sql}`);
|
|
289
|
+
try {
|
|
290
|
+
const result = await BancoActions.executarQuery(sql);
|
|
291
|
+
const affected = Array.isArray(result) ? result.length : 0;
|
|
292
|
+
const duration = Date.now() - startTime;
|
|
293
|
+
BancoActions.logToUnified(`✅ UPDATE executado (${duration}ms) - ${affected} linhas`);
|
|
294
|
+
BancoActions.addActionMetadata('Update', true, duration);
|
|
295
|
+
return affected;
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
const duration = Date.now() - startTime;
|
|
299
|
+
BancoActions.logToUnified(`❌ Erro no UPDATE: ${error}`);
|
|
300
|
+
BancoActions.addActionMetadata('Update', false, duration);
|
|
301
|
+
if (error instanceof BaseError) {
|
|
302
|
+
throw error;
|
|
303
|
+
}
|
|
304
|
+
throw new IntegrationError('DATABASE_UPDATE_FAILED', `Database update failed: ${error}`, `Falha no update do banco: ${error}`, error instanceof Error ? error : new Error(String(error)), { metadata: { sql, duration } });
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Executa uma instrução SQL de seleção e retorna os resultados.
|
|
309
|
+
* @param sql SQL de seleção.
|
|
310
|
+
* @returns Promise<Array<any>> Array de resultados.
|
|
311
|
+
*/
|
|
312
|
+
static async select(sql) {
|
|
313
|
+
return BancoActions.executeQuery(sql);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Executa uma instrução SQL de seleção e retorna o valor de uma coluna, convertido para o tipo especificado.
|
|
317
|
+
* @param sql SQL de seleção.
|
|
318
|
+
* @param column Nome da coluna.
|
|
319
|
+
* @param type Tipo do valor (BancoType).
|
|
320
|
+
* @returns Promise<unknown> Valor da coluna convertido.
|
|
321
|
+
* @throws {Error} Se não houver resultados.
|
|
322
|
+
*/
|
|
323
|
+
static async selectColumn(sql, column, type) {
|
|
324
|
+
const results = await BancoActions.executeQuery(sql);
|
|
325
|
+
if (!results || results.length === 0) {
|
|
326
|
+
throw new ValidationError('DATABASE_NO_RESULTS', `No results found for query: ${sql}`, `Nenhum resultado encontrado para a query: ${sql}`, undefined, { metadata: { sql, column, type } });
|
|
327
|
+
}
|
|
328
|
+
const row = results[0];
|
|
329
|
+
const value = row[column];
|
|
330
|
+
switch (type) {
|
|
331
|
+
case BancoType.VARCHAR:
|
|
332
|
+
return value != null ? String(value) : null;
|
|
333
|
+
case BancoType.DOUBLE:
|
|
334
|
+
return value != null ? Number(value) : null;
|
|
335
|
+
case BancoType.INTEGER:
|
|
336
|
+
return value != null ? Number.parseInt(value, 10) : null;
|
|
337
|
+
case BancoType.LONG:
|
|
338
|
+
return value != null ? Number(value) : null;
|
|
339
|
+
case BancoType.DATE:
|
|
340
|
+
return value != null ? new Date(value) : null;
|
|
341
|
+
default:
|
|
342
|
+
return value;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Pausa a execução por um tempo fixo em segundos.
|
|
347
|
+
* @param time Tempo em segundos.
|
|
348
|
+
* @returns Promise<void>
|
|
349
|
+
*/
|
|
350
|
+
static async esperarPorTempo(time) {
|
|
351
|
+
BancoActions.logToUnified(`⏳ Esperando ${time}s`);
|
|
352
|
+
await new Promise((resolve) => setTimeout(resolve, time * 1000));
|
|
353
|
+
BancoActions.logToUnified(`⏱️ Espera de ${time}s concluída`);
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Relata uma tabela de resultados no log em formato HTML.
|
|
357
|
+
* @param registros Array de registros.
|
|
358
|
+
* @returns void
|
|
359
|
+
*/
|
|
360
|
+
static reportarTabela(registros) {
|
|
361
|
+
if (!registros || registros.length === 0) {
|
|
362
|
+
BancoActions.logToUnified('⚠️ Nenhum registro para exibir na tabela');
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
const colunas = Object.keys(registros[0]);
|
|
366
|
+
let html = '<div style="overflow-x:auto;max-width:500px;"><span>Dados retornados:</span><table><thead><tr>';
|
|
367
|
+
for (const col of colunas) {
|
|
368
|
+
html += `<th style="word-break:normal;border:2px solid #dee2e6;">${col}</th>`;
|
|
369
|
+
}
|
|
370
|
+
html += '</tr></thead><tbody>';
|
|
371
|
+
for (const row of registros) {
|
|
372
|
+
html += '<tr>';
|
|
373
|
+
for (const col of colunas) {
|
|
374
|
+
html += `<td style="word-break:normal;border:2px solid #dee2e6;">${row[col] ?? '[null]'}</td>`;
|
|
375
|
+
}
|
|
376
|
+
html += '</tr>';
|
|
377
|
+
}
|
|
378
|
+
html += '</tbody></table></div>';
|
|
379
|
+
BancoActions.logToUnified(html);
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* 🆕 NOVO: Obtém informações da conexão atual de forma segura.
|
|
383
|
+
* @returns String com informações da conexão (sem senha).
|
|
384
|
+
*/
|
|
385
|
+
static getConnectionInfo() {
|
|
386
|
+
try {
|
|
387
|
+
const { DB_USER, DB_HOST, DB_PORT, DB_SERVICE, ENV } = process.env;
|
|
388
|
+
return `Ambiente: ${ENV || 'não definido'}, Usuário: ${DB_USER}, Host: ${DB_HOST}:${DB_PORT}, Serviço: ${DB_SERVICE}`;
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
return 'Informações de conexão não disponíveis';
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* 🆕 NOVO: Exibe detalhes dos resultados de uma consulta.
|
|
396
|
+
* @param resultado Array de resultados da consulta.
|
|
397
|
+
*/
|
|
398
|
+
static async exibirDetalhesResultados(resultado) {
|
|
399
|
+
if (!resultado || resultado.length === 0) {
|
|
400
|
+
Logger.warning('Nenhum resultado encontrado.');
|
|
401
|
+
BancoActions.logToUnified('⚠️ Nenhum resultado encontrado na consulta');
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
const message = `Serviço executado com sucesso! Encontrados ${resultado.length} registros.`;
|
|
405
|
+
Logger.success(message);
|
|
406
|
+
BancoActions.logToUnified(`✅ ${message}`);
|
|
407
|
+
// Exibir até 3 registros no console
|
|
408
|
+
Logger.info('\n📋 Primeiros 3 registros:');
|
|
409
|
+
resultado.slice(0, 3).forEach((registro, index) => {
|
|
410
|
+
Logger.info(`\n--- Registro ${index + 1} ---`);
|
|
411
|
+
Object.entries(registro).forEach(([chave, valor]) => {
|
|
412
|
+
Logger.info(`${chave}: ${valor}`);
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* 🆕 NOVO: Executa um serviço de banco com logs automáticos.
|
|
418
|
+
* @param descricao Descrição do serviço sendo executado.
|
|
419
|
+
* @param servico Função que executa o serviço.
|
|
420
|
+
* @returns Promise com resultado do serviço.
|
|
421
|
+
*/
|
|
422
|
+
static async executarServico(descricao, servico) {
|
|
423
|
+
const startTime = Date.now();
|
|
424
|
+
// Log inicial
|
|
425
|
+
Logger.info(`🚀 Executando serviço: ${descricao}`);
|
|
426
|
+
BancoActions.logToUnified(`🚀 Executando serviço: ${descricao}`);
|
|
427
|
+
BancoActions.logToUnified(`🔗 Conexão: ${BancoActions.getConnectionInfo()}`);
|
|
428
|
+
try {
|
|
429
|
+
const resultado = await servico();
|
|
430
|
+
const duration = Date.now() - startTime;
|
|
431
|
+
// Log de sucesso
|
|
432
|
+
Logger.success(`✅ ${descricao} executado com sucesso (${duration}ms)`);
|
|
433
|
+
BancoActions.logToUnified(`✅ ${descricao} executado com sucesso (${duration}ms)`);
|
|
434
|
+
BancoActions.addActionMetadata('Serviço', true, duration);
|
|
435
|
+
// Se resultado é array, mostrar detalhes
|
|
436
|
+
if (Array.isArray(resultado)) {
|
|
437
|
+
await BancoActions.exibirDetalhesResultados(resultado);
|
|
438
|
+
}
|
|
439
|
+
return resultado;
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
const duration = Date.now() - startTime;
|
|
443
|
+
// Log de erro
|
|
444
|
+
Logger.error(`❌ Erro ao executar ${descricao}:`, error);
|
|
445
|
+
BancoActions.logToUnified(`❌ Erro ao executar ${descricao}: ${error}`);
|
|
446
|
+
BancoActions.addActionMetadata('Serviço', false, duration);
|
|
447
|
+
if (error instanceof BaseError) {
|
|
448
|
+
throw error;
|
|
449
|
+
}
|
|
450
|
+
throw new IntegrationError('SERVICE_EXECUTION_FAILED', `Service execution failed: ${error}`, `Falha na execução do serviço: ${error}`, error instanceof Error ? error : new Error(String(error)), { metadata: { descricao, duration } });
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Valida se dois valores são iguais.
|
|
455
|
+
* Registra sucesso ou falha nos logs e incrementa métricas.
|
|
456
|
+
* @param actual Valor atual.
|
|
457
|
+
* @param expected Valor esperado.
|
|
458
|
+
* @param message Mensagem descritiva da validação.
|
|
459
|
+
* @throws {Error} Se os valores não forem iguais.
|
|
460
|
+
*/
|
|
461
|
+
static validateEquals(actual, expected, message) {
|
|
462
|
+
if (actual !== expected) {
|
|
463
|
+
BancoActions.failureCount++;
|
|
464
|
+
BancoActions.logEvent(`❌ ${message}: esperado ${expected}, obtido ${actual}`);
|
|
465
|
+
throw new ValidationError('VALIDATION_FAILED', `Validation failed: expected ${expected}, got ${actual}`, `${message}: esperado ${expected}, obtido ${actual}`, undefined, { metadata: { actual, expected, message } });
|
|
466
|
+
}
|
|
467
|
+
BancoActions.successCount++;
|
|
468
|
+
BancoActions.logEvent(`✅ ${message}: esperado ${expected}, obtido ${actual}`);
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Verifica se o BancoActions foi utilizado.
|
|
472
|
+
* @returns true se houve queries executadas ou início de execução registrado.
|
|
473
|
+
*/
|
|
474
|
+
static foiUtilizado() {
|
|
475
|
+
return !!BancoActions.inicioExecucao || BancoActions.queryExecutadas > 0;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Registra duração do teste para relatórios.
|
|
479
|
+
* @param nome Nome do teste.
|
|
480
|
+
* @param duracao Duração em segundos.
|
|
481
|
+
*/
|
|
482
|
+
static registrarDuracaoDoTeste(nome, duracao) {
|
|
483
|
+
const testInfo = TestContext.getSafeTestInfo();
|
|
484
|
+
if (testInfo?.title) {
|
|
485
|
+
try {
|
|
486
|
+
UnifiedReportManager.setTestDuration(testInfo.title, duracao);
|
|
487
|
+
}
|
|
488
|
+
catch (error) {
|
|
489
|
+
Logger.warning(`Não foi possível registrar duração do teste: ${error}`);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Obtém métricas do BancoActions.
|
|
495
|
+
* @returns Objeto com queryExecutadas, sucessos, erros e duracaoTotal.
|
|
496
|
+
*/
|
|
497
|
+
static getMetrics() {
|
|
498
|
+
const duracao = BancoActions.inicioExecucao && BancoActions.fimExecucao
|
|
499
|
+
? (BancoActions.fimExecucao.getTime() -
|
|
500
|
+
BancoActions.inicioExecucao.getTime()) /
|
|
501
|
+
1000
|
|
502
|
+
: 0;
|
|
503
|
+
return {
|
|
504
|
+
queryExecutadas: BancoActions.queryExecutadas,
|
|
505
|
+
sucessos: BancoActions.successCount,
|
|
506
|
+
erros: BancoActions.failureCount,
|
|
507
|
+
duracaoTotal: duracao,
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Método unificado para anexar relatórios (delegado para UnifiedReportManager).
|
|
512
|
+
*/
|
|
513
|
+
static async anexarRelatorioFinal() {
|
|
514
|
+
try {
|
|
515
|
+
await UnifiedReportManager.finalizarTeste();
|
|
516
|
+
}
|
|
517
|
+
catch (error) {
|
|
518
|
+
Logger.error('❌ Erro ao anexar relatórios finais via UnifiedReportManager', error);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Limpa todos os dados para nova execução.
|
|
523
|
+
*/
|
|
524
|
+
static limparTudo() {
|
|
525
|
+
BancoActions.successCount = 0;
|
|
526
|
+
BancoActions.failureCount = 0;
|
|
527
|
+
BancoActions.queryExecutadas = 0;
|
|
528
|
+
BancoActions.inicioExecucao = undefined;
|
|
529
|
+
BancoActions.fimExecucao = undefined;
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* Adiciona log ao UnifiedReportManager para o teste atual.
|
|
533
|
+
* @private
|
|
534
|
+
* @param message Mensagem de log a ser registrada.
|
|
535
|
+
*/
|
|
536
|
+
static logToUnified(message) {
|
|
537
|
+
const testInfo = TestContext.getSafeTestInfo();
|
|
538
|
+
if (testInfo?.title) {
|
|
539
|
+
try {
|
|
540
|
+
UnifiedReportManager.adicionarLog(testInfo.title, message);
|
|
541
|
+
}
|
|
542
|
+
catch {
|
|
543
|
+
// Silenciosamente ignorar se o contexto não estiver configurado
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Registra metadados de ação no UnifiedReportManager.
|
|
549
|
+
* @private
|
|
550
|
+
* @param actionType Tipo da ação executada.
|
|
551
|
+
* @param success Indica se a ação foi bem-sucedida.
|
|
552
|
+
* @param duration Duração da ação em milissegundos.
|
|
553
|
+
*/
|
|
554
|
+
static addActionMetadata(actionType, success, duration) {
|
|
555
|
+
const testInfo = TestContext.getSafeTestInfo();
|
|
556
|
+
if (testInfo?.title) {
|
|
557
|
+
try {
|
|
558
|
+
UnifiedReportManager.setTestMetadata(testInfo.title, {
|
|
559
|
+
actionType,
|
|
560
|
+
success,
|
|
561
|
+
duration,
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
catch {
|
|
565
|
+
// Silenciosamente ignorar se o contexto não estiver configurado
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
// 🚫 AUTO-ATIVAÇÃO REMOVIDA: BancoActions são métodos internos que não devem ser interceptados
|
|
571
|
+
// BancoActions.execute(), .select(), etc. não são CTs válidos e devem ser filtrados
|
|
572
|
+
// A interceptação foi removida para evitar falsos CTs nos relatórios
|
|
573
|
+
// CTs reais vêm das classes Statement (StatementsBanco, etc.) via InterceptacaoMagica.ts
|
|
574
|
+
// CÓDIGO REMOVIDO:
|
|
575
|
+
// try {
|
|
576
|
+
// installDatabaseInterceptor(BancoActions, 'BancoActions')
|
|
577
|
+
// } catch (error) {
|
|
578
|
+
// if (process.env.AUTOCORE_DEBUG_LOGS === 'true') {
|
|
579
|
+
// process.stderr.write(`[DatabaseInterceptor] Falha na auto-ativação BancoActions: ${String(error)}\n`)
|
|
580
|
+
// }
|
|
581
|
+
// }
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classe utilitária para manipulação de strings de conexão Oracle a partir das variáveis de ambiente.
|
|
3
|
+
*/
|
|
4
|
+
export declare class EnviromentHelper {
|
|
5
|
+
/**
|
|
6
|
+
* Constrói a string de conexão Oracle a partir das variáveis de ambiente.
|
|
7
|
+
* @returns A string de conexão no formato: user/pass@host:port/service
|
|
8
|
+
* @throws {Error} Se algum parâmetro necessário não estiver definido no .env.
|
|
9
|
+
*/
|
|
10
|
+
static buildConnectionString(): string;
|
|
11
|
+
/**
|
|
12
|
+
* Retorna a string de conexão com a senha mascarada (para logs).
|
|
13
|
+
* @param connectionString String de conexão original.
|
|
14
|
+
* @returns String de conexão com a senha oculta.
|
|
15
|
+
*/
|
|
16
|
+
static mascaraSenha(connectionString: string): string;
|
|
17
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classe utilitária para manipulação de strings de conexão Oracle a partir das variáveis de ambiente.
|
|
3
|
+
*/
|
|
4
|
+
export class EnviromentHelper {
|
|
5
|
+
/**
|
|
6
|
+
* Constrói a string de conexão Oracle a partir das variáveis de ambiente.
|
|
7
|
+
* @returns A string de conexão no formato: user/pass@host:port/service
|
|
8
|
+
* @throws {Error} Se algum parâmetro necessário não estiver definido no .env.
|
|
9
|
+
*/
|
|
10
|
+
static buildConnectionString() {
|
|
11
|
+
// 🎯 INJETAR credenciais Banco do AutoCore Hub se sistema foi selecionado
|
|
12
|
+
let dbUser;
|
|
13
|
+
let dbPass;
|
|
14
|
+
let dbHost;
|
|
15
|
+
let dbPort;
|
|
16
|
+
let dbService;
|
|
17
|
+
// ✅ CORRIGIDO: Só injetar configurações de Banco do AutoCore Hub se o CT atual tem sistema configurado
|
|
18
|
+
// ✅ NOVO: Obter sistema do CT atual via StatementTracker
|
|
19
|
+
let hasSystemConfigured = null;
|
|
20
|
+
try {
|
|
21
|
+
const { StatementTracker } = require('../hubdocs/StatementTracker.js');
|
|
22
|
+
hasSystemConfigured = StatementTracker.getCurrentCTSystem();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Ignora se não conseguir importar
|
|
26
|
+
}
|
|
27
|
+
if (hasSystemConfigured) {
|
|
28
|
+
try {
|
|
29
|
+
// Importação dinâmica para evitar dependência circular
|
|
30
|
+
const { DynamicConfigManager, } = require('../testhub/DynamicConfigManager.js');
|
|
31
|
+
const configManager = DynamicConfigManager.getInstance();
|
|
32
|
+
const dbConfig = configManager.getDatabaseConfig();
|
|
33
|
+
if (dbConfig && dbConfig.host) {
|
|
34
|
+
dbUser = dbConfig.user;
|
|
35
|
+
dbPass = dbConfig.password;
|
|
36
|
+
dbHost = dbConfig.host;
|
|
37
|
+
dbPort = String(dbConfig.port || 1521);
|
|
38
|
+
dbService = dbConfig.serviceName;
|
|
39
|
+
const { Logger } = require('../utils/Logger.js');
|
|
40
|
+
Logger.info(`🎯 [AutoCore Hub] Banco config injetado para sistema "${hasSystemConfigured}": ${dbHost}:${dbPort}/${dbService} (user: ${dbUser})`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Ignora se não conseguir importar
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Fallback para process.env se não houver config do AutoCore Hub OU se setSystem() não foi chamado
|
|
48
|
+
const DB_USER = dbUser || process.env.DB_USER;
|
|
49
|
+
const DB_PASS = dbPass || process.env.DB_PASS;
|
|
50
|
+
const DB_HOST = dbHost || process.env.DB_HOST;
|
|
51
|
+
const DB_PORT = dbPort || process.env.DB_PORT;
|
|
52
|
+
const DB_SERVICE = dbService || process.env.DB_SERVICE;
|
|
53
|
+
if (!(DB_USER && DB_PASS && DB_HOST && DB_PORT && DB_SERVICE)) {
|
|
54
|
+
throw new Error('Parâmetros de conexão incompletos no arquivo .env');
|
|
55
|
+
}
|
|
56
|
+
return `${DB_USER}/${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_SERVICE}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Retorna a string de conexão com a senha mascarada (para logs).
|
|
60
|
+
* @param connectionString String de conexão original.
|
|
61
|
+
* @returns String de conexão com a senha oculta.
|
|
62
|
+
*/
|
|
63
|
+
static mascaraSenha(connectionString) {
|
|
64
|
+
return connectionString.replace(/\/([^@]+)@/, '/********@');
|
|
65
|
+
}
|
|
66
|
+
}
|