/**
* Configuration Integration Tests
*
* Tests configuration modes and feature toggles in integrated environment
*/
import { getServerConfig } from '../../src/config/server-config.js';
import { getWordPressConfig, validateWordPressConfig } from '../../src/config/wordpress-config.js';
describe('Configuration Integration Tests', () => {
const originalEnv = process.env;
beforeEach(() => {
// Reset environment before each test
process.env = { ...originalEnv };
});
afterAll(() => {
// Restore original environment
process.env = originalEnv;
});
describe('Configuration Mode Switching', () => {
it('should switch between all configuration modes', () => {
const modes = ['essential', 'standard', 'advanced', 'full'];
modes.forEach(mode => {
process.env.ELEMENTOR_MCP_MODE = mode;
const config = getServerConfig();
expect(config.mode).toBe(mode);
expect(config.basicWordPressOperations).toBe(true);
expect(config.basicElementorOperations).toBe(true);
});
});
it('should enable appropriate features for each mode', () => {
// Essential mode
process.env.ELEMENTOR_MCP_MODE = 'essential';
const essentialConfig = getServerConfig();
expect(essentialConfig.basicWordPressOperations).toBe(true);
expect(essentialConfig.basicElementorOperations).toBe(true);
expect(essentialConfig.sectionContainerCreation).toBe(false);
expect(essentialConfig.templateManagement).toBe(false);
// Standard mode
process.env.ELEMENTOR_MCP_MODE = 'standard';
const standardConfig = getServerConfig();
expect(standardConfig.basicWordPressOperations).toBe(true);
expect(standardConfig.sectionContainerCreation).toBe(true);
expect(standardConfig.widgetAddition).toBe(true);
expect(standardConfig.templateManagement).toBe(false);
// Advanced mode
process.env.ELEMENTOR_MCP_MODE = 'advanced';
const advancedConfig = getServerConfig();
expect(advancedConfig.basicWordPressOperations).toBe(true);
expect(advancedConfig.performanceOptimization).toBe(true);
expect(advancedConfig.advancedElementOperations).toBe(true);
expect(advancedConfig.templateManagement).toBe(false);
// Full mode
process.env.ELEMENTOR_MCP_MODE = 'full';
const fullConfig = getServerConfig();
expect(fullConfig.basicWordPressOperations).toBe(true);
expect(fullConfig.templateManagement).toBe(true);
expect(fullConfig.globalSettings).toBe(true);
expect(fullConfig.customFieldsIntegration).toBe(true);
});
});
describe('Feature Toggle Integration', () => {
it('should override individual features', () => {
process.env.ELEMENTOR_MCP_MODE = 'standard';
process.env.ELEMENTOR_ENABLE_TEMPLATES = 'true';
process.env.ELEMENTOR_ENABLE_GLOBAL_SETTINGS = 'true';
const config = getServerConfig();
expect(config.mode).toBe('standard');
expect(config.templateManagement).toBe(true);
expect(config.globalSettings).toBe(true);
});
it('should respect ELEMENTOR_ENABLE_ALL flag', () => {
process.env.ELEMENTOR_ENABLE_ALL = 'true';
const config = getServerConfig();
expect(config.mode).toBe('full');
expect(config.basicWordPressOperations).toBe(true);
expect(config.basicElementorOperations).toBe(true);
expect(config.sectionContainerCreation).toBe(true);
expect(config.widgetAddition).toBe(true);
expect(config.elementManagement).toBe(true);
expect(config.pageStructure).toBe(true);
expect(config.performanceOptimization).toBe(true);
expect(config.advancedElementOperations).toBe(true);
expect(config.templateManagement).toBe(true);
expect(config.globalSettings).toBe(true);
});
it('should respect ELEMENTOR_MINIMAL_MODE flag', () => {
process.env.ELEMENTOR_MINIMAL_MODE = 'true';
const config = getServerConfig();
expect(config.mode).toBe('essential');
expect(config.basicWordPressOperations).toBe(true);
expect(config.basicElementorOperations).toBe(true);
expect(config.sectionContainerCreation).toBe(false);
});
});
describe('WordPress Configuration Integration', () => {
it('should validate complete WordPress configuration', () => {
process.env.WORDPRESS_BASE_URL = 'https://test-site.com';
process.env.WORDPRESS_USERNAME = 'testuser';
process.env.WORDPRESS_APPLICATION_PASSWORD = 'test-app-password';
const config = getWordPressConfig();
expect(config).not.toBeNull();
expect(config?.baseUrl).toBe('https://test-site.com');
expect(config?.username).toBe('testuser');
expect(config?.applicationPassword).toBe('test-app-password');
expect(() => validateWordPressConfig(config!)).not.toThrow();
});
it('should handle missing WordPress configuration gracefully', () => {
delete process.env.WORDPRESS_BASE_URL;
delete process.env.WORDPRESS_USERNAME;
delete process.env.WORDPRESS_APPLICATION_PASSWORD;
const config = getWordPressConfig();
expect(config).toBeNull();
});
it('should validate WordPress configuration fields', () => {
const validConfig = {
baseUrl: 'https://valid-site.com',
username: 'validuser',
applicationPassword: 'valid-password'
};
expect(() => validateWordPressConfig(validConfig)).not.toThrow();
const invalidConfigs = [
{ baseUrl: '', username: 'user', applicationPassword: 'pass' },
{ baseUrl: 'https://site.com', username: '', applicationPassword: 'pass' },
{ baseUrl: 'https://site.com', username: 'user', applicationPassword: '' },
{ baseUrl: 'not-a-url', username: 'user', applicationPassword: 'pass' }
];
invalidConfigs.forEach(config => {
expect(() => validateWordPressConfig(config)).toThrow();
});
});
});
describe('Configuration Helper Methods', () => {
it('should list enabled features', () => {
process.env.ELEMENTOR_MCP_MODE = 'full';
const config = getServerConfig();
const enabledFeatures = config.getEnabledFeatures();
expect(Array.isArray(enabledFeatures)).toBe(true);
expect(enabledFeatures.length).toBeGreaterThan(0);
expect(enabledFeatures).toContain('basicWordPressOperations');
expect(enabledFeatures).toContain('basicElementorOperations');
expect(enabledFeatures).toContain('templateManagement');
});
it('should list disabled features', () => {
process.env.ELEMENTOR_MCP_MODE = 'essential';
const config = getServerConfig();
const disabledFeatures = config.getDisabledFeatures();
expect(Array.isArray(disabledFeatures)).toBe(true);
expect(disabledFeatures.length).toBeGreaterThan(0);
expect(disabledFeatures).toContain('sectionContainerCreation');
expect(disabledFeatures).toContain('templateManagement');
});
it('should count total enabled features', () => {
const modes = ['essential', 'standard', 'advanced', 'full'];
const expectedCounts = {
essential: 2,
standard: 6,
advanced: 8,
full: 12
};
modes.forEach(mode => {
process.env.ELEMENTOR_MCP_MODE = mode;
const config = getServerConfig();
const count = config.getTotalEnabledFeatures();
expect(count).toBeGreaterThan(0);
expect(count).toBe(expectedCounts[mode as keyof typeof expectedCounts]);
});
});
it('should serialize configuration to JSON', () => {
process.env.ELEMENTOR_MCP_MODE = 'standard';
const config = getServerConfig();
const json = config.toJSON();
expect(json).toBeDefined();
expect(json.mode).toBe('standard');
expect(json.features).toBeDefined();
expect(json.features.basicWordPressOperations).toBe(true);
expect(json.features.basicElementorOperations).toBe(true);
expect(json.totalEnabledFeatures).toBe(6);
});
});
describe('Configuration Persistence', () => {
it('should maintain configuration across multiple accesses', () => {
process.env.ELEMENTOR_MCP_MODE = 'advanced';
const config1 = getServerConfig();
const config2 = getServerConfig();
expect(config1.mode).toBe(config2.mode);
expect(config1.basicWordPressOperations).toBe(config2.basicWordPressOperations);
expect(config1.performanceOptimization).toBe(config2.performanceOptimization);
});
it('should reflect environment changes', () => {
process.env.ELEMENTOR_MCP_MODE = 'essential';
const config1 = getServerConfig();
expect(config1.mode).toBe('essential');
process.env.ELEMENTOR_MCP_MODE = 'full';
const config2 = getServerConfig();
expect(config2.mode).toBe('full');
});
});
describe('Configuration Edge Cases', () => {
it('should handle invalid mode gracefully', () => {
process.env.ELEMENTOR_MCP_MODE = 'invalid-mode';
const config = getServerConfig();
// Should default to standard mode
expect(['essential', 'standard', 'advanced', 'full']).toContain(config.mode);
});
it('should handle conflicting environment variables', () => {
process.env.ELEMENTOR_MCP_MODE = 'essential';
process.env.ELEMENTOR_ENABLE_ALL = 'true'; // This should override
const config = getServerConfig();
expect(config.mode).toBe('full');
});
it('should handle case-insensitive mode names', () => {
const modes = ['FULL', 'Full', 'fUlL'];
modes.forEach(mode => {
process.env.ELEMENTOR_MCP_MODE = mode;
const config = getServerConfig();
expect(config.mode).toBe('full');
});
});
});
describe('Integration with Other Components', () => {
it('should work with WordPress configuration when both are set', () => {
process.env.ELEMENTOR_MCP_MODE = 'full';
process.env.WORDPRESS_BASE_URL = 'https://integrated-test.com';
process.env.WORDPRESS_USERNAME = 'integrationuser';
process.env.WORDPRESS_APPLICATION_PASSWORD = 'integration-password';
const serverConfig = getServerConfig();
const wpConfig = getWordPressConfig();
expect(serverConfig).toBeDefined();
expect(wpConfig).not.toBeNull();
expect(serverConfig.mode).toBe('full');
expect(wpConfig?.baseUrl).toBe('https://integrated-test.com');
});
it('should allow server configuration without WordPress', () => {
process.env.ELEMENTOR_MCP_MODE = 'standard';
delete process.env.WORDPRESS_BASE_URL;
delete process.env.WORDPRESS_USERNAME;
delete process.env.WORDPRESS_APPLICATION_PASSWORD;
const serverConfig = getServerConfig();
const wpConfig = getWordPressConfig();
expect(serverConfig).toBeDefined();
expect(serverConfig.mode).toBe('standard');
expect(wpConfig).toBeNull();
});
});
});