UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

104 lines 3.65 kB
import SettingService from '../../../lib/services/setting-service.js'; import { createTestConfig } from '../../config/test-config.js'; import dbInit from '../helpers/database-init.js'; import { SETTING_CREATED, SETTING_DELETED, SETTING_UPDATED, } from '../../../lib/events/index.js'; import { createEventsService } from '../../../lib/features/index.js'; import { TEST_AUDIT_USER } from '../../../lib/types/index.js'; let stores; let db; let service; const TEST_USER_ID = -9999; beforeAll(async () => { const config = createTestConfig(); db = await dbInit('setting_service_serial', config.getLogger); stores = db.stores; const eventService = createEventsService(db.rawDatabase, config); service = new SettingService(stores, config, eventService); }); beforeEach(async () => { await stores.eventStore.deleteAll(); }); afterAll(async () => { await db.destroy(); }); test('Can create new setting', async () => { const someData = { some: 'blob' }; await service.insert('some-setting', someData, TEST_AUDIT_USER, false); const actual = await service.get('some-setting'); expect(actual).toStrictEqual(someData); const { eventStore } = stores; const createdEvents = await eventStore.searchEvents({ offset: 0, limit: 10, }, [ { field: 'type', operator: 'IS', values: [SETTING_CREATED], }, ]); expect(createdEvents).toHaveLength(1); expect(createdEvents[0].data).toEqual({ id: 'some-setting', some: 'blob' }); }); test('Can delete setting', async () => { const someData = { some: 'blob' }; await service.insert('some-setting', someData, TEST_AUDIT_USER); await service.delete('some-setting', TEST_AUDIT_USER); const actual = await service.get('some-setting'); expect(actual).toBeUndefined(); const { eventStore } = stores; const createdEvents = await eventStore.searchEvents({ offset: 0, limit: 10, }, [ { field: 'type', operator: 'IS', values: [SETTING_DELETED], }, ]); expect(createdEvents).toHaveLength(1); }); test('Sentitive SSO settings are redacted in event log', async () => { const someData = { password: 'mySecretPassword' }; const property = 'unleash.enterprise.auth.oidc'; await service.insert(property, someData, TEST_AUDIT_USER); await service.insert(property, { password: 'changed' }, TEST_AUDIT_USER); const actual = await service.get(property); const { eventStore } = stores; const updatedEvents = await eventStore.searchEvents({ offset: 0, limit: 10, }, [ { field: 'type', operator: 'IS', values: [SETTING_UPDATED], }, ]); expect(updatedEvents[0].preData).toEqual({ hideEventDetails: true }); await service.delete(property, TEST_AUDIT_USER); }); test('Can update setting', async () => { const { eventStore } = stores; const someData = { some: 'blob' }; await service.insert('updated-setting', someData, TEST_AUDIT_USER, false); await service.insert('updated-setting', { ...someData, test: 'fun' }, TEST_AUDIT_USER, false); const updatedEvents = await eventStore.searchEvents({ offset: 0, limit: 10, }, [ { field: 'type', operator: 'IS', values: [SETTING_UPDATED], }, ]); expect(updatedEvents).toHaveLength(1); expect(updatedEvents[0].data).toEqual({ id: 'updated-setting', some: 'blob', test: 'fun', }); }); //# sourceMappingURL=setting-service.test.js.map