unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
94 lines • 4.44 kB
JavaScript
import { resolveOrigin } from './cors-origin-middleware.js';
import FakeSettingStore from '../../test/fixtures/fake-setting-store.js';
import { createTestConfig } from '../../test/config/test-config.js';
import FakeEventStore from '../../test/fixtures/fake-event-store.js';
import FakeProjectStore from '../../test/fixtures/fake-project-store.js';
import { FrontendApiService, SettingService, } from '../../lib/services/index.js';
import { TEST_AUDIT_USER } from '../../lib/types/index.js';
import { frontendSettingsKey } from '../../lib/types/settings/frontend-settings.js';
import FakeFeatureTagStore from '../../test/fixtures/fake-feature-tag-store.js';
import { createFakeEventsService } from '../features/index.js';
const createSettingService = (frontendApiOrigins) => {
const config = createTestConfig({ frontendApiOrigins });
const stores = {
settingStore: new FakeSettingStore(),
eventStore: new FakeEventStore(),
featureTagStore: new FakeFeatureTagStore(),
projectStore: new FakeProjectStore(),
};
const eventService = createFakeEventsService(config);
const services = {
settingService: new SettingService(stores, config, eventService),
};
return {
frontendApiService: new FrontendApiService(config, services, {}),
settingStore: stores.settingStore,
};
};
test('resolveOrigin', () => {
const dotCom = 'https://example.com';
const dotOrg = 'https://example.org';
expect(resolveOrigin([])).toEqual('*');
expect(resolveOrigin(['*'])).toEqual('*');
expect(resolveOrigin([dotOrg])).toEqual([dotOrg]);
expect(resolveOrigin([dotCom, dotOrg])).toEqual([dotCom, dotOrg]);
expect(resolveOrigin([dotOrg, '*'])).toEqual('*');
});
test('corsOriginMiddleware origin validation', async () => {
const { frontendApiService } = createSettingService([]);
await expect(() => frontendApiService.setFrontendCorsSettings(['a'], TEST_AUDIT_USER)).rejects.toThrow('Invalid origin: a');
});
test('corsOriginMiddleware without config', async () => {
const { frontendApiService, settingStore } = createSettingService([]);
expect(await frontendApiService.getFrontendSettings(false)).toEqual({
frontendApiOrigins: [],
});
await frontendApiService.setFrontendCorsSettings([], TEST_AUDIT_USER);
expect(await frontendApiService.getFrontendSettings(false)).toEqual({
frontendApiOrigins: [],
});
await frontendApiService.setFrontendCorsSettings(['*'], TEST_AUDIT_USER);
expect(await frontendApiService.getFrontendSettings(false)).toEqual({
frontendApiOrigins: ['*'],
});
await settingStore.delete(frontendSettingsKey);
expect(await frontendApiService.getFrontendSettings(false)).toEqual({
frontendApiOrigins: [],
});
});
test('corsOriginMiddleware with config', async () => {
const { frontendApiService, settingStore } = createSettingService(['*']);
expect(await frontendApiService.getFrontendSettings(false)).toEqual({
frontendApiOrigins: ['*'],
});
await frontendApiService.setFrontendCorsSettings([], TEST_AUDIT_USER);
expect(await frontendApiService.getFrontendSettings(false)).toEqual({
frontendApiOrigins: [],
});
await frontendApiService.setFrontendCorsSettings(['https://example.com', 'https://example.org'], TEST_AUDIT_USER);
expect(await frontendApiService.getFrontendSettings(false)).toEqual({
frontendApiOrigins: ['https://example.com', 'https://example.org'],
});
await settingStore.delete(frontendSettingsKey);
expect(await frontendApiService.getFrontendSettings(false)).toEqual({
frontendApiOrigins: ['*'],
});
});
test('corsOriginMiddleware with caching enabled', async () => {
const { frontendApiService } = createSettingService([]);
expect(await frontendApiService.getFrontendSettings()).toEqual({
frontendApiOrigins: [],
});
//setting
await frontendApiService.setFrontendCorsSettings(['*'], TEST_AUDIT_USER);
//still get cached value
expect(await frontendApiService.getFrontendSettings()).toEqual({
frontendApiOrigins: [],
});
await frontendApiService.fetchFrontendSettings(); // called by the scheduler service
const settings = await frontendApiService.getFrontendSettings();
expect(settings).toEqual({
frontendApiOrigins: ['*'],
});
});
//# sourceMappingURL=cors-origin-middleware.test.js.map