upskill-event-manager/tests/environments/EnvironmentConfig.js
Ben 7c9ca65cf2
Some checks are pending
HVAC Plugin CI/CD Pipeline / Security Analysis (push) Waiting to run
HVAC Plugin CI/CD Pipeline / Code Quality & Standards (push) Waiting to run
HVAC Plugin CI/CD Pipeline / Unit Tests (push) Waiting to run
HVAC Plugin CI/CD Pipeline / Integration Tests (push) Waiting to run
HVAC Plugin CI/CD Pipeline / Deploy to Staging (push) Blocked by required conditions
HVAC Plugin CI/CD Pipeline / Deploy to Production (push) Blocked by required conditions
HVAC Plugin CI/CD Pipeline / Notification (push) Blocked by required conditions
Security Monitoring & Compliance / Dependency Vulnerability Scan (push) Waiting to run
Security Monitoring & Compliance / Secrets & Credential Scan (push) Waiting to run
Security Monitoring & Compliance / WordPress Security Analysis (push) Waiting to run
Security Monitoring & Compliance / Static Code Security Analysis (push) Waiting to run
Security Monitoring & Compliance / Security Compliance Validation (push) Waiting to run
Security Monitoring & Compliance / Security Summary Report (push) Blocked by required conditions
Security Monitoring & Compliance / Security Team Notification (push) Blocked by required conditions
feat: add comprehensive test framework and test files
- Add 90+ test files including E2E, unit, and integration tests
- Implement Page Object Model (POM) architecture
- Add Docker testing environment with comprehensive services
- Include modernized test framework with error recovery
- Add specialized test suites for master trainer and trainer workflows
- Update .gitignore to properly track test infrastructure

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-29 23:23:26 -03:00

281 lines
No EOL
9.1 KiB
JavaScript

/**
* Environment Configuration Manager
* Centralized configuration management for different environments
*/
const path = require('path');
class EnvironmentConfig {
constructor(environment = 'staging') {
this.environment = environment;
this.config = null;
this.loadConfiguration();
}
/**
* Load configuration for specified environment
* @returns {void}
*/
loadConfiguration() {
try {
const configFile = path.join(__dirname, `${this.environment}.config.js`);
this.config = require(configFile);
} catch (error) {
console.warn(`Failed to load config for ${this.environment}, using default staging`);
this.config = require('./staging.config.js');
}
}
/**
* Get full configuration object
* @returns {Object}
*/
getConfig() {
return this.config;
}
/**
* Get browser configuration
* @returns {Object}
*/
getBrowserConfig() {
return {
browserType: 'chromium',
headless: this.config.browser?.headless ?? true,
slowMo: this.config.browser?.slowMo ?? 0,
timeout: this.config.framework?.timeout ?? 30000,
viewport: this.config.browser?.viewport ?? { width: 1280, height: 720 },
video: this.config.framework?.videosOnFailure ?? false,
screenshot: this.config.framework?.screenshotsOnFailure ? 'only-on-failure' : 'off',
args: this.config.browser?.args ?? []
};
}
/**
* Get authentication configuration
* @returns {Object}
*/
getAuthConfig() {
return {
baseUrl: this.config.app?.baseUrl || this.config.baseUrl,
loginPath: this.config.urls?.login || this.config.wordpress?.customLoginPath || '/community-login/',
logoutPath: this.config.urls?.wpLogin || '/wp-login.php?action=logout'
};
}
/**
* Get test user accounts
* @returns {Object}
*/
getUserAccounts() {
if (this.config.environments?.users) {
// New format
return {
masterTrainer: this.config.environments.users.masterTrainer,
alternateMasterTrainer: this.config.environments.users.masterTrainerAlt,
trainer: this.config.environments.users.trainer,
admin: this.config.environments.users.admin
};
} else if (this.config.accounts) {
// Legacy format
return this.config.accounts;
} else {
// Fallback defaults
return {
masterTrainer: {
username: 'test_master',
password: 'TestMaster123!',
email: 'test_master@example.com',
role: 'master_trainer'
},
trainer: {
username: 'test_trainer',
password: 'TestTrainer123!',
email: 'test_trainer@example.com',
role: 'hvac_trainer'
}
};
}
}
/**
* Get test execution configuration
* @returns {Object}
*/
getTestConfig() {
return {
timeout: this.config.framework?.timeout ?? this.config.test?.timeout ?? 30000,
retries: this.config.framework?.retries ?? this.config.test?.retries ?? 2,
parallel: this.config.framework?.parallel ?? this.config.test?.parallel ?? false,
workers: this.config.framework?.maxWorkers ?? this.config.test?.workers ?? 1,
screenshotOnFailure: this.config.framework?.screenshotsOnFailure ?? this.config.test?.screenshotOnFailure ?? true,
videoOnFailure: this.config.framework?.videosOnFailure ?? this.config.test?.videoOnFailure ?? false
};
}
/**
* Get protected URLs for security testing
* @returns {string[]}
*/
getProtectedUrls() {
if (this.config.protectedUrls) {
return this.config.protectedUrls;
}
// Default protected URLs
return [
'/trainer/dashboard/',
'/trainer/venue/list/',
'/trainer/venue/manage/',
'/trainer/organizer/manage/',
'/trainer/profile/training-leads/',
'/master-trainer/master-dashboard/',
'/master-trainer/events/',
'/master-trainer/google-sheets/',
'/master-trainer/announcements/',
'/master-trainer/pending-approvals/',
'/master-trainer/trainers/',
'/master-trainer/communication-templates/'
];
}
/**
* Get test data configuration
* @returns {Object}
*/
getTestDataConfig() {
return {
seedData: this.config.testData?.seedData ?? true,
cleanupAfterTests: this.config.testData?.cleanupAfterTests ?? true,
isolateTransactions: this.config.testData?.isolateTransactions ?? true,
fixtures: this.config.testData?.fixtures ?? {}
};
}
/**
* Get evidence collection configuration
* @returns {Object}
*/
getEvidenceConfig() {
return {
screenshots: {
enabled: this.config.evidence?.screenshots?.enabled ?? true,
onFailure: this.config.evidence?.screenshots?.onFailure ?? true,
onSuccess: this.config.evidence?.screenshots?.onSuccess ?? false,
fullPage: this.config.evidence?.screenshots?.fullPage ?? true,
dir: this.config.media?.screenshotDir ?? './tests/evidence/screenshots'
},
videos: {
enabled: this.config.evidence?.videos?.enabled ?? false,
onFailure: this.config.evidence?.videos?.onFailure ?? true,
onSuccess: this.config.evidence?.videos?.onSuccess ?? false,
dir: this.config.media?.videoDir ?? './tests/evidence/videos'
},
logs: {
enabled: this.config.evidence?.logs?.enabled ?? true,
level: this.config.evidence?.logs?.level ?? 'info',
includeNetwork: this.config.evidence?.logs?.includeNetwork ?? true,
includeConsole: this.config.evidence?.logs?.includeConsole ?? true
}
};
}
/**
* Get WordPress-specific configuration
* @returns {Object}
*/
getWordPressConfig() {
return {
cliPath: this.config.wordpress?.cliPath ?? 'wp',
adminPath: this.config.wordpress?.adminPath ?? '/wp-admin/',
apiPath: this.config.wordpress?.apiPath ?? '/wp-json/',
databaseIsolation: this.config.wordpress?.databaseIsolation ?? true,
flushRewriteRules: this.config.wordpress?.flushRewriteRules ?? true,
clearCache: this.config.wordpress?.clearCache ?? true
};
}
/**
* Get security configuration
* @returns {Object}
*/
getSecurityConfig() {
return {
allowInsecureCertificates: this.config.security?.allowInsecureCertificates ?? true,
ignoreHttpsErrors: this.config.network?.ignoreHTTPSErrors ?? true,
skipCsrfValidation: this.config.security?.skipCsrfValidation ?? false,
bypassCSP: this.config.network?.bypassCSP ?? false
};
}
/**
* Get base URL for the environment
* @returns {string}
*/
getBaseUrl() {
return this.config.app?.baseUrl || this.config.baseUrl || 'https://upskill-staging.measurequick.com';
}
/**
* Get environment name
* @returns {string}
*/
getEnvironmentName() {
return this.config.name || this.config.app?.environment || this.environment;
}
/**
* Check if feature is enabled
* @param {string} featureName - Name of feature to check
* @returns {boolean}
*/
isFeatureEnabled(featureName) {
return this.config.features?.[featureName] ?? true;
}
/**
* Get environment-specific selectors
* @returns {Object}
*/
getSelectors() {
return this.config.selectors ?? {
dataTestIdAttribute: 'data-testid',
roleAttribute: 'data-role',
pageAttribute: 'data-page'
};
}
/**
* Get expected content for validation
* @returns {Object}
*/
getExpectedContent() {
return this.config.expectedContent ?? {};
}
/**
* Get performance configuration
* @returns {Object}
*/
getPerformanceConfig() {
return {
slowNetworkSimulation: this.config.performance?.slowNetworkSimulation ?? false,
resourceBlocking: this.config.performance?.resourceBlocking ?? {
images: false,
fonts: false,
stylesheets: false
}
};
}
}
/**
* Create environment configuration instance
* @param {string} environment - Environment name
* @returns {EnvironmentConfig}
*/
function createEnvironmentConfig(environment = process.env.TEST_ENVIRONMENT || 'staging') {
return new EnvironmentConfig(environment);
}
module.exports = { EnvironmentConfig, createEnvironmentConfig };