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

test: advanced playground (#3968)

This commit is contained in:
Mateusz Kwasniewski 2023-06-14 08:23:36 +02:00 committed by GitHub
parent b91b7276c5
commit edd67f7046
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 254 additions and 142 deletions

View File

@ -0,0 +1,254 @@
import {
IUnleashTest,
setupAppWithCustomConfig,
} from '../../../test/e2e/helpers/test-helper';
import dbInit, { ITestDb } from '../../../test/e2e/helpers/database-init';
import getLogger from '../../../test/fixtures/no-logger';
let app: IUnleashTest;
let db: ITestDb;
beforeAll(async () => {
db = await dbInit('advanced_playground', getLogger);
app = await setupAppWithCustomConfig(
db.stores,
{
experimental: {
flags: {
advancedPlayground: true,
},
},
},
db.rawDatabase,
);
});
const createFeatureToggle = async (featureName: string) => {
await app.request
.post('/api/admin/projects/default/features')
.send({
name: featureName,
})
.set('Content-Type', 'application/json')
.expect(201);
};
const createFeatureToggleWithStrategy = async (featureName: string) => {
await createFeatureToggle(featureName);
return app.request
.post(
`/api/admin/projects/default/features/${featureName}/environments/default/strategies`,
)
.send({
name: 'default',
parameters: {},
})
.expect(200);
};
const enableToggle = (featureName: string) =>
app.request
.post(
`/api/admin/projects/default/features/${featureName}/environments/default/on`,
)
.send({})
.expect(200);
afterAll(async () => {
await app.destroy();
await db.destroy();
});
test('advanced playground evaluation with no toggles', async () => {
const { body: result } = await app.request
.post('/api/admin/playground/advanced')
.send({
environments: ['default'],
projects: ['default'],
context: { appName: 'test', userId: '1,2', channel: 'web,mobile' },
})
.set('Content-Type', 'application/json')
.expect(200);
expect(result).toMatchObject({
input: {
environments: ['default'],
projects: ['default'],
context: {
appName: 'test',
userId: '1,2',
channel: 'web,mobile',
},
},
features: [],
});
});
test('advanced playground evaluation happy path', async () => {
await createFeatureToggleWithStrategy('test-playground-feature');
await enableToggle('test-playground-feature');
const { body: result } = await app.request
.post('/api/admin/playground/advanced')
.send({
environments: ['default'],
projects: ['default'],
context: { appName: 'test', userId: '1,2', channel: 'web,mobile' },
})
.set('Content-Type', 'application/json')
.expect(200);
expect(result).toMatchObject({
input: {
environments: ['default'],
projects: ['default'],
context: {
appName: 'test',
userId: '1,2',
channel: 'web,mobile',
},
},
features: [
{
name: 'test-playground-feature',
projectId: 'default',
environments: {
default: [
{
isEnabled: true,
isEnabledInCurrentEnvironment: true,
strategies: {
result: true,
data: [
{
name: 'default',
disabled: false,
parameters: {},
result: {
enabled: true,
evaluationStatus: 'complete',
},
constraints: [],
segments: [],
},
],
},
projectId: 'default',
variant: {
name: 'disabled',
enabled: false,
},
name: 'test-playground-feature',
environment: 'default',
context: {
appName: 'test',
userId: '1',
channel: 'web',
},
variants: [],
},
{
isEnabled: true,
isEnabledInCurrentEnvironment: true,
strategies: {
result: true,
data: [
{
name: 'default',
disabled: false,
parameters: {},
result: {
enabled: true,
evaluationStatus: 'complete',
},
constraints: [],
segments: [],
},
],
},
projectId: 'default',
variant: {
name: 'disabled',
enabled: false,
},
name: 'test-playground-feature',
environment: 'default',
context: {
appName: 'test',
userId: '1',
channel: 'mobile',
},
variants: [],
},
{
isEnabled: true,
isEnabledInCurrentEnvironment: true,
strategies: {
result: true,
data: [
{
name: 'default',
disabled: false,
parameters: {},
result: {
enabled: true,
evaluationStatus: 'complete',
},
constraints: [],
segments: [],
},
],
},
projectId: 'default',
variant: {
name: 'disabled',
enabled: false,
},
name: 'test-playground-feature',
environment: 'default',
context: {
appName: 'test',
userId: '2',
channel: 'web',
},
variants: [],
},
{
isEnabled: true,
isEnabledInCurrentEnvironment: true,
strategies: {
result: true,
data: [
{
name: 'default',
disabled: false,
parameters: {},
result: {
enabled: true,
evaluationStatus: 'complete',
},
constraints: [],
segments: [],
},
],
},
projectId: 'default',
variant: {
name: 'disabled',
enabled: false,
},
name: 'test-playground-feature',
environment: 'default',
context: {
appName: 'test',
userId: '2',
channel: 'mobile',
},
variants: [],
},
],
},
},
],
});
});

View File

@ -1,142 +0,0 @@
const sharedDetails = {
isEnabled: true,
isEnabledInCurrentEnvironment: true,
strategies: {
result: true,
data: [
{
name: 'flexibleRollout',
id: '9422b4bb-5f8a-4df5-863a-c2a4c4d83af7',
disabled: false,
parameters: {
groupId: 'test',
rollout: '100',
stickiness: 'default',
},
result: {
enabled: true,
evaluationStatus: 'complete',
},
constraints: [
{
inverted: false,
values: ['2', '4', '6', '8', '10'],
operator: 'IN',
contextName: 'userId',
caseInsensitive: false,
result: true,
},
],
segments: [],
},
],
},
variant: {
name: 'a',
payload: {
type: 'string',
value: 'a',
},
enabled: true,
},
variants: [
{
name: 'a',
weight: 334,
payload: {
type: 'string',
value: 'a',
},
overrides: [],
stickiness: 'default',
weightType: 'variable',
},
{
name: 'b',
weight: 333,
payload: {
type: 'string',
value: 'b',
},
overrides: [],
stickiness: 'default',
weightType: 'variable',
},
{
name: 'c',
weight: 333,
payload: {
type: 'string',
value: 'c',
},
overrides: [],
stickiness: 'default',
weightType: 'variable',
},
],
};
const sharedEnv = [
{
...sharedDetails,
context: {
appName: 'playground',
userId: '1',
channel: 'web',
},
},
{
...sharedDetails,
context: {
appName: 'playground',
userId: '2',
channel: 'web',
},
},
{
...sharedDetails,
context: {
appName: 'playground',
userId: '1',
channel: 'mobile',
},
},
{
...sharedDetails,
context: {
appName: 'playground',
userId: '2',
channel: 'mobile',
},
},
];
export const fixedAdvancedPlaygroundResponse = {
input: {
environments: ['development', 'production'],
projects: ['default'],
context: {
appName: 'playground',
userId: '1,2',
channel: 'web,mobile',
},
},
features: [
{
environments: {
development: sharedEnv,
production: sharedEnv,
},
projectId: 'default',
name: 'featureA',
},
{
environments: {
development: sharedEnv,
production: sharedEnv,
},
projectId: 'default',
name: 'featureB',
},
],
};