UNPKG

unleash-server

Version:

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

148 lines 4.96 kB
import supertest from 'supertest'; import getApp from '../../../app.js'; import { createTestConfig } from '../../../../test/config/test-config.js'; import { createServices, } from '../../../services/index.js'; import dbInit from '../../../../test/e2e/helpers/database-init.js'; import { startOfHour } from 'date-fns'; import { CLIENT_METRICS } from '../../../events/index.js'; let db; let config; let eventBus; async function getSetup(opts) { config = createTestConfig(opts); db = await dbInit('unknown_flags', config.getLogger); const services = createServices(db.stores, config, db.rawDatabase); const app = await getApp(config, db.stores, services); config.eventBus.emit = vi.fn(); return { request: supertest(app), stores: db.stores, services, db: db.rawDatabase, destroy: db.destroy, eventBus: config.eventBus, }; } let request; let stores; let services; let destroy; beforeAll(async () => { const setup = await getSetup({ experimental: { flags: { reportUnknownFlags: true, }, }, }); request = setup.request; stores = setup.stores; destroy = setup.destroy; services = setup.services; eventBus = setup.eventBus; }); afterAll(async () => { await destroy(); }); afterEach(async () => { await stores.unknownFlagsStore.deleteAll(); }); describe('should register unknown flags', () => { test('/metrics endpoint', async () => { // @ts-expect-error - cachedFeatureNames is a private property in ClientMetricsServiceV2 services.clientMetricsServiceV2.cachedFeatureNames = vi .fn() .mockResolvedValue(['existing_flag']); await request .post('/api/client/metrics') .send({ appName: 'demo', instanceId: '1', bucket: { start: Date.now(), stop: Date.now(), toggles: { existing_flag: { yes: 200, no: 0, }, unknown_flag: { yes: 100, no: 50, }, }, }, }) .expect(202); await services.unknownFlagsService.flush(); const unknownFlags = await services.unknownFlagsService.getAll(); expect(unknownFlags).toHaveLength(1); expect(unknownFlags[0]).toMatchObject({ name: 'unknown_flag', environment: 'development', appName: 'demo', seenAt: expect.any(Date), }); expect(eventBus.emit).toHaveBeenCalledWith(CLIENT_METRICS, expect.arrayContaining([ expect.objectContaining({ featureName: 'existing_flag', yes: 200, }), ])); }); test('/metrics/bulk endpoint', async () => { // @ts-expect-error - cachedFeatureNames is a private property in ClientMetricsServiceV2 services.clientMetricsServiceV2.cachedFeatureNames = vi .fn() .mockResolvedValue(['existing_flag_bulk']); const unknownFlag = { appName: 'demo', instanceId: '1', environment: 'development', sdkVersion: 'unleash-client-js:1.0.0', sdkType: 'frontend', }; await request .post('/api/client/metrics/bulk') .send({ applications: [unknownFlag], metrics: [ { featureName: 'existing_flag_bulk', environment: 'development', appName: 'demo', timestamp: startOfHour(new Date()), yes: 1337, no: 0, variants: {}, }, { featureName: 'unknown_flag_bulk', environment: 'development', appName: 'demo', timestamp: startOfHour(new Date()), yes: 200, no: 100, variants: {}, }, ], }) .expect(202); await services.unknownFlagsService.flush(); const unknownFlags = await services.unknownFlagsService.getAll(); expect(unknownFlags).toHaveLength(1); expect(unknownFlags[0]).toMatchObject({ name: 'unknown_flag_bulk', environment: 'development', appName: 'demo', seenAt: expect.any(Date), }); expect(eventBus.emit).toHaveBeenCalledWith(CLIENT_METRICS, expect.arrayContaining([ expect.objectContaining({ featureName: 'existing_flag_bulk', yes: 1337, }), ])); }); }); //# sourceMappingURL=unknown-flags.e2e.test.js.map