@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
JavaScript
;
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