unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
103 lines • 4.44 kB
JavaScript
import dbInit from '../../../../../test/e2e/helpers/database-init.js';
import { setupAppWithCustomConfig, } from '../../../../../test/e2e/helpers/test-helper.js';
import getLogger from '../../../../../test/fixtures/no-logger.js';
import { DEFAULT_ENV } from '../../../../server-impl.js';
import { TEST_AUDIT_USER } from '../../../../types/index.js';
let app;
let db;
beforeAll(async () => {
db = await dbInit('last_seen_at_service_e2e', getLogger);
app = await setupAppWithCustomConfig(db.stores, {
experimental: {
flags: {
strictSchemaValidation: true,
},
},
}, db.rawDatabase);
});
beforeEach(async () => {
await db.rawDatabase.raw('DELETE FROM last_seen_at_metrics;');
});
afterAll(async () => {
await app.destroy();
await db.destroy();
});
test('should clean unknown feature flag names from last seen store', async () => {
const { lastSeenService, featureToggleService } = app.services;
const clean = ['clean1', 'clean2', 'clean3', 'clean4'];
const dirty = ['dirty1', 'dirty2', 'dirty3', 'dirty4'];
await Promise.all(clean.map((featureName) => featureToggleService.createFeatureToggle('default', { name: featureName }, TEST_AUDIT_USER)));
const inserts = [...clean, ...dirty].map((feature) => {
return {
featureName: feature,
environment: DEFAULT_ENV,
yes: 1,
no: 0,
appName: 'test',
timestamp: new Date(),
};
});
lastSeenService.updateLastSeen(inserts);
await lastSeenService.store();
// We have no method to get these from the last seen service or any other service or store
let stored = await db.rawDatabase.raw('SELECT * FROM last_seen_at_metrics;');
expect(stored.rows.length).toBe(8);
await lastSeenService.cleanLastSeen();
stored = await db.rawDatabase.raw('SELECT * FROM last_seen_at_metrics;');
expect(stored.rows.length).toBe(4);
expect(stored.rows).toMatch;
const notInDirty = stored.rows.filter((row) => !dirty.includes(row.feature_name));
expect(notInDirty.length).toBe(4);
});
test('should clean unknown feature flag environments from last seen store', async () => {
const { lastSeenService, featureToggleService } = app.services;
const clean = [
{ name: 'clean5', environment: DEFAULT_ENV },
{ name: 'clean6', environment: DEFAULT_ENV },
{ name: 'clean7', environment: 'nonexisting' },
{ name: 'clean8', environment: 'nonexisting' },
];
await Promise.all(clean.map((feature) => featureToggleService.createFeatureToggle('default', { name: feature.name }, TEST_AUDIT_USER)));
const inserts = [...clean].map((feature) => {
return {
featureName: feature.name,
environment: feature.environment,
yes: 1,
no: 0,
appName: 'test',
timestamp: new Date(),
};
});
lastSeenService.updateLastSeen(inserts);
await lastSeenService.store();
// We have no method to get these from the last seen service or any other service or store
let stored = await db.rawDatabase.raw('SELECT * FROM last_seen_at_metrics;');
expect(stored.rows.length).toBe(4);
await lastSeenService.cleanLastSeen();
stored = await db.rawDatabase.raw('SELECT * FROM last_seen_at_metrics;');
expect(stored.rows.length).toBe(2);
});
test('should not fail with feature names longer than 255 chars', async () => {
const { lastSeenService } = app.services;
const longFeatureNames = [
{ name: 'a'.repeat(254), environment: DEFAULT_ENV },
{ name: 'b'.repeat(255), environment: DEFAULT_ENV },
{ name: 'c'.repeat(256), environment: DEFAULT_ENV }, // this one should be filtered out
];
const inserts = [...longFeatureNames].map((feature) => {
return {
featureName: feature.name,
environment: feature.environment,
yes: 1,
no: 0,
appName: 'test',
timestamp: new Date(),
};
});
lastSeenService.updateLastSeen(inserts);
await lastSeenService.store();
// We have no method to get these from the last seen service or any other service or store
const stored = await db.rawDatabase.raw('SELECT * FROM last_seen_at_metrics;');
expect(stored.rows.length).toBe(2);
});
//# sourceMappingURL=last-seen-service.e2e.test.js.map