1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-04-24 01:18:01 +02:00

feat: initial test skeleton

This commit is contained in:
FredrikOseberg 2024-12-16 14:38:50 +01:00
parent 3696420c51
commit e8f699458f
No known key found for this signature in database
GPG Key ID: 282FD8A6D8F9BCF0
2 changed files with 185 additions and 0 deletions

View File

@ -143,10 +143,15 @@ export class ClientFeatureToggleDelta {
const hasDelta = this.delta[environment] !== undefined;
if (!hasDelta) {
await this.initEnvironmentDelta(environment);
}
console.log("ENVIRONMENT", environment);
console.log("DELTA CACHE", this.delta[environment]);
// Should get the latest state if revision does not exist or if sdkRevision is not present
// We should be able to do this without going to the database by merging revisions from the delta with
// the base case

View File

@ -0,0 +1,180 @@
import { RoleName } from '../../../types/model';
import dbInit, {
type ITestDb,
} from '../../../../test/e2e/helpers/database-init';
import {
type IUnleashTest,
setupAppWithCustomConfig,
} from '../../../../test/e2e/helpers/test-helper';
import getLogger from '../../../../test/fixtures/no-logger';
import { DEFAULT_ENV } from '../../../util/constants';
import { type IUserWithRootRole, TEST_AUDIT_USER } from '../../../types';
let app: IUnleashTest;
let db: ITestDb;
let dummyAdmin: IUserWithRootRole;
const getApiClientResponse = (project = 'default') => [
{
name: 'test1',
type: 'release',
enabled: false,
project: project,
stale: false,
strategies: [
{
name: 'flexibleRollout',
constraints: [],
parameters: {
rollout: '100',
stickiness: 'default',
groupId: 'test1',
},
variants: [],
},
],
variants: [],
description: null,
impressionData: false,
},
{
name: 'test2',
type: 'release',
enabled: false,
project: project,
stale: false,
strategies: [
{
name: 'default',
constraints: [
{
contextName: 'userId',
operator: 'IN',
values: ['123'],
},
],
parameters: {},
variants: [],
},
],
variants: [],
description: null,
impressionData: false,
},
];
const cleanup = async (db: ITestDb, app: IUnleashTest) => {
const all =
await db.stores.projectStore.getEnvironmentsForProject('default');
await Promise.all(
all
.filter((env) => env.environment !== DEFAULT_ENV)
.map(async (env) =>
db.stores.projectStore.deleteEnvironmentForProject(
'default',
env.environment,
),
),
);
};
const setupFeatures = async (
db: ITestDb,
app: IUnleashTest,
project = 'default',
) => {
await db.rawDatabase.raw('DELETE FROM features');
await app.createFeature('test1', project);
await app.createFeature('test2', project);
await app.addStrategyToFeatureEnv(
{
name: 'flexibleRollout',
constraints: [],
parameters: {
rollout: '100',
stickiness: 'default',
groupId: 'test1',
},
},
DEFAULT_ENV,
'test1',
project,
);
await app.addStrategyToFeatureEnv(
{
name: 'default',
constraints: [
{ contextName: 'userId', operator: 'IN', values: ['123'] },
],
parameters: {},
},
DEFAULT_ENV,
'test2',
project,
);
};
beforeAll(async () => {
db = await dbInit('client_feature_toggles_delta', getLogger);
app = await setupAppWithCustomConfig(
db.stores,
{
experimental: {
flags: {
strictSchemaValidation: true,
deltaApi: true,
},
},
},
db.rawDatabase,
);
dummyAdmin = await app.services.userService.createUser(
{
name: 'Some Name',
email: 'test@getunleash.io',
rootRole: RoleName.ADMIN,
},
TEST_AUDIT_USER,
);
});
afterEach(async () => {
await cleanup(db, app);
await db.rawDatabase.raw('DELETE FROM events');
});
afterAll(async () => {
await app.destroy();
await db.destroy();
});
test('should match with /api/client/delta', async () => {
await setupFeatures(db, app);
const { body } = await app.request
.get('/api/client/features')
.expect('Content-Type', /json/)
.expect(200);
const { body: deltaBody } = await app.request
.get('/api/client/delta')
.expect('Content-Type', /json/)
.expect(200);
expect(body.features).toMatchObject(deltaBody.updated);
});
test('should get 304 if asked for latest revision', async () => {
await setupFeatures(db, app);
const events = await db.rawDatabase('events').select('*');
console.log(events);
await app.request
.set('If-None-Match', '10')
.get('/api/client/delta')
.expect(304);
});