UNPKG

@mdfriday/foundry

Version:

The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.

199 lines 8.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const config_1 = require("../entity/config"); const mock_fs_1 = require("./mock-fs"); class MockProvider { constructor() { this.data = new Map(); } getString(key) { return this.data.get(key) || ''; } getInt(key) { return this.data.get(key) || 0; } getBool(key) { return this.data.get(key) || false; } getParams(key) { return this.data.get(key) || {}; } getStringMap(key) { return this.data.get(key) || {}; } getStringMapString(key) { return this.data.get(key) || {}; } getStringSlice(key) { return this.data.get(key) || []; } get(key) { return this.data.get(key); } set(key, value) { this.data.set(key, value); } keys() { return Array.from(this.data.keys()); } merge(key, value) { const existing = this.data.get(key) || {}; this.data.set(key, { ...existing, ...value }); } setDefaults(params) { for (const [key, value] of Object.entries(params)) { if (!this.data.has(key)) { this.data.set(key, value); } } } setDefaultMergeStrategy() { // Mock implementation } walkParams(walkFn) { // Mock implementation } isSet(key) { return this.data.has(key); } } describe('Config Entity', () => { let mockFs; let mockProvider; let mockRoot; let mockDir; let mockModule; let mockService; let mockLanguage; let mockTaxonomy; beforeEach(() => { mockFs = new mock_fs_1.MockFs(); mockProvider = new MockProvider(); // Create mock entities - we'll need to read the entity files to create proper mocks mockRoot = { defaultTheme: () => 'test-theme', validate: () => true }; mockDir = {}; mockModule = {}; mockService = {}; mockLanguage = { validate: () => true }; mockTaxonomy = {}; }); describe('constructor', () => { it('should create Config instance with all dependencies', () => { const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, mockLanguage, mockTaxonomy); expect(config.fs()).toBe(mockFs); expect(config.getProvider()).toBe(mockProvider); expect(config.getRoot()).toBe(mockRoot); expect(config.getDir()).toBe(mockDir); expect(config.getModule()).toBe(mockModule); expect(config.getService()).toBe(mockService); expect(config.getLanguage()).toBe(mockLanguage); expect(config.getTaxonomy()).toBe(mockTaxonomy); }); }); describe('theme', () => { it('should return default theme from root', () => { const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, mockLanguage, mockTaxonomy); expect(config.theme()).toBe('test-theme'); }); }); describe('setLanguage', () => { it('should update language entity', () => { const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, mockLanguage, mockTaxonomy); const newLanguage = { validate: () => true }; config.setLanguage(newLanguage); expect(config.getLanguage()).toBe(newLanguage); }); }); describe('setTaxonomy', () => { it('should update taxonomy entity', () => { const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, mockLanguage, mockTaxonomy); const newTaxonomy = {}; config.setTaxonomy(newTaxonomy); expect(config.getTaxonomy()).toBe(newTaxonomy); }); }); describe('validate', () => { it('should return true when language validation passes', () => { const validLanguage = { validate: jest.fn().mockReturnValue(true) }; const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, validLanguage, mockTaxonomy); expect(config.validate()).toBe(true); expect(validLanguage.validate).toHaveBeenCalled(); }); it('should return false when language validation fails', () => { const invalidLanguage = { validate: jest.fn().mockReturnValue(false) }; const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, invalidLanguage, mockTaxonomy); expect(config.validate()).toBe(false); expect(invalidLanguage.validate).toHaveBeenCalled(); }); it('should handle null language gracefully', () => { const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, null, mockTaxonomy); expect(config.validate()).toBe(true); }); it('should handle undefined language gracefully', () => { const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, undefined, mockTaxonomy); expect(config.validate()).toBe(true); }); }); describe('newConfig factory function', () => { it('should create Config instance using factory', () => { const config = (0, config_1.newConfig)(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, mockLanguage, mockTaxonomy); expect(config).toBeInstanceOf(config_1.Config); expect(config.fs()).toBe(mockFs); expect(config.getProvider()).toBe(mockProvider); expect(config.getRoot()).toBe(mockRoot); }); }); describe('integration scenarios', () => { it('should handle complete configuration workflow', () => { // Setup provider with some data mockProvider.set('baseURL', 'https://test.com'); mockProvider.set('title', 'Test Site'); const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, mockLanguage, mockTaxonomy); // Verify provider data is accessible expect(config.getProvider().get('baseURL')).toBe('https://test.com'); expect(config.getProvider().get('title')).toBe('Test Site'); // Verify theme comes from root expect(config.theme()).toBe('test-theme'); // Verify validation works expect(config.validate()).toBe(true); }); it('should handle dynamic language and taxonomy updates', () => { const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, mockLanguage, mockTaxonomy); // Initial state expect(config.getLanguage()).toBe(mockLanguage); expect(config.getTaxonomy()).toBe(mockTaxonomy); // Update language const newLanguage = { validate: () => true }; config.setLanguage(newLanguage); expect(config.getLanguage()).toBe(newLanguage); // Update taxonomy const newTaxonomy = {}; config.setTaxonomy(newTaxonomy); expect(config.getTaxonomy()).toBe(newTaxonomy); // Validation should still work expect(config.validate()).toBe(true); }); it('should provide access to all subsystems', () => { const config = new config_1.Config(mockFs, mockProvider, mockRoot, mockDir, mockModule, mockService, mockLanguage, mockTaxonomy); // Verify all getters return the correct instances expect(config.fs()).toBe(mockFs); expect(config.getProvider()).toBe(mockProvider); expect(config.getRoot()).toBe(mockRoot); expect(config.getDir()).toBe(mockDir); expect(config.getModule()).toBe(mockModule); expect(config.getService()).toBe(mockService); expect(config.getLanguage()).toBe(mockLanguage); expect(config.getTaxonomy()).toBe(mockTaxonomy); }); }); }); //# sourceMappingURL=entity-config.test.js.map