1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-06 00:07:44 +01:00
unleash.unleash/src/lib/addons/feature-event-formatter-md.test.ts

512 lines
19 KiB
TypeScript
Raw Normal View History

import {
FEATURE_STRATEGY_ADD,
FEATURE_STRATEGY_REMOVE,
FEATURE_STRATEGY_UPDATE,
IEvent,
} from '../types';
import { FeatureEventFormatterMd } from './feature-event-formatter-md';
import {
DATE_AFTER,
DATE_BEFORE,
IN,
NOT_IN,
NUM_EQ,
NUM_GT,
NUM_GTE,
NUM_LT,
NUM_LTE,
SEMVER_EQ,
SEMVER_GT,
SEMVER_LT,
STR_CONTAINS,
STR_ENDS_WITH,
STR_STARTS_WITH,
} from '../util';
const testCases: [string, IEvent, string][] = [
[
'when groupId changed',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
constraints: [],
parameters: {
groupId: 'different-feature',
rollout: '32',
stickiness: 'default',
},
},
preData: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
parameters: {
groupId: 'new-feature',
rollout: '32',
stickiness: 'default',
},
constraints: [],
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy flexibleRollout in *production* groupId from new-feature to different-feature',
],
[
'when rollout percentage changed',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
constraints: [],
parameters: {
groupId: 'new-feature',
rollout: '32',
stickiness: 'default',
},
},
preData: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
parameters: {
groupId: 'new-feature',
rollout: '67',
stickiness: 'default',
},
constraints: [],
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy flexibleRollout in *production* rollout from 67% to 32%',
],
[
'when stickiness changed',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
constraints: [],
parameters: {
groupId: 'new-feature',
rollout: '67',
stickiness: 'random',
},
},
preData: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
parameters: {
groupId: 'new-feature',
rollout: '67',
stickiness: 'default',
},
constraints: [],
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy flexibleRollout in *production* stickiness from default to random',
],
[
'when constraints and rollout percentage and stickiness changed',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
constraints: [
{
values: ['x', 'y'],
inverted: false,
operator: IN,
contextName: 'appName',
caseInsensitive: false,
},
],
parameters: {
groupId: 'new-feature',
rollout: '32',
stickiness: 'random',
},
},
preData: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
parameters: {
groupId: 'new-feature',
rollout: '67',
stickiness: 'default',
},
constraints: [],
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy flexibleRollout in *production* stickiness from default to random; rollout from 67% to 32%; constraints from empty set of constraints to [appName is one of (x,y)]',
],
[
'when neither rollout percentage nor stickiness changed',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
constraints: [],
parameters: {
groupId: 'new-feature',
rollout: '67',
stickiness: 'default',
},
},
preData: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
parameters: {
groupId: 'new-feature',
rollout: '67',
stickiness: 'default',
},
constraints: [],
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy flexibleRollout in *production*',
],
[
'when strategy added',
{
id: 919,
type: FEATURE_STRATEGY_ADD,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:08.290Z'),
data: {
id: '3f4bf713-696c-43a4-8ce7-d6c607108858',
name: 'flexibleRollout',
constraints: [],
parameters: {
groupId: 'new-feature',
rollout: '67',
stickiness: 'default',
},
},
preData: null,
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by adding strategy flexibleRollout in *production*',
],
[
'when strategy removed',
{
id: 918,
type: FEATURE_STRATEGY_REMOVE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:00.229Z'),
data: null,
preData: {
id: '9591090e-acb0-4088-8958-21faaeb7147d',
name: 'default',
parameters: {},
constraints: [],
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by removing strategy default in *production*',
],
...[
[IN, 'is one of'],
[NOT_IN, 'is not one of'],
[STR_CONTAINS, 'is a string that contains'],
[STR_STARTS_WITH, 'is a string that starts with'],
[STR_ENDS_WITH, 'is a string that ends with'],
].map(
([operator, display]) =>
<[string, IEvent, string]>[
'when default strategy updated',
{
id: 39,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'admin',
createdAt: new Date('2023-02-20T20:23:28.791Z'),
data: {
id: 'f2d34aac-52ec-49d2-82d3-08d710e89eaa',
name: 'default',
constraints: [
{
values: ['x', 'y'],
inverted: false,
operator: operator,
contextName: 'appName',
caseInsensitive: false,
},
{
values: ['x'],
inverted: true,
operator: operator,
contextName: 'appName',
caseInsensitive: false,
},
],
parameters: {},
segments: [],
},
preData: {
id: 'f2d34aac-52ec-49d2-82d3-08d710e89eaa',
name: 'default',
segments: [],
parameters: {},
constraints: [],
},
tags: [],
featureName: 'aaa',
project: 'default',
environment: 'production',
},
`admin updated *[aaa](unleashUrl/projects/default/features/aaa)* in project *default* by updating strategy default in *production* constraints from empty set of constraints to [appName ${display} (x,y), appName not ${display} (x)]`,
],
),
...[
[NUM_EQ, 'is a number equal to'],
[NUM_GT, 'is a number greater than'],
[NUM_GTE, 'is a number greater than or equal to'],
[NUM_LT, 'is a number less than'],
[NUM_LTE, 'is a number less than or equal to'],
[DATE_BEFORE, 'is a date before'],
[DATE_AFTER, 'is a date after'],
[SEMVER_EQ, 'is a SemVer equal to'],
[SEMVER_GT, 'is a SemVer greater than'],
[SEMVER_LT, 'is a SemVer less than'],
].map(
([operator, display]) =>
<[string, IEvent, string]>[
`when default strategy updated with numeric constraint ${operator}`,
{
id: 39,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'admin',
createdAt: new Date('2023-02-20T20:23:28.791Z'),
data: {
id: 'f2d34aac-52ec-49d2-82d3-08d710e89eaa',
name: 'default',
constraints: [],
parameters: {},
segments: [],
},
preData: {
id: 'f2d34aac-52ec-49d2-82d3-08d710e89eaa',
name: 'default',
segments: [],
parameters: {},
constraints: [
{
value: '4',
values: [],
inverted: false,
operator: operator,
contextName: 'appName',
caseInsensitive: false,
},
],
},
tags: [],
featureName: 'aaa',
project: 'default',
environment: 'production',
},
`admin updated *[aaa](unleashUrl/projects/default/features/aaa)* in project *default* by updating strategy default in *production* constraints from [appName ${display} 4] to empty set of constraints`,
],
),
[
'when userIds changed',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
name: 'userWithId',
constraints: [
{
values: ['x', 'y'],
inverted: false,
operator: IN,
contextName: 'appName',
caseInsensitive: false,
},
],
parameters: {
userIds: 'a,b',
},
sortOrder: 9999,
id: '9a995d94-5944-4897-a82f-0f7e65c2fb3f',
},
preData: {
name: 'userWithId',
constraints: [],
parameters: {
userIds: '',
},
sortOrder: 9999,
id: '9a995d94-5944-4897-a82f-0f7e65c2fb3f',
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy userWithId in *production* userIds from empty set of userIds to [a,b]; constraints from empty set of constraints to [appName is one of (x,y)]',
],
[
'when IPs changed',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
name: 'remoteAddress',
constraints: [
{
values: ['x', 'y'],
inverted: false,
operator: IN,
contextName: 'appName',
caseInsensitive: false,
},
],
parameters: {
IPs: '127.0.0.1',
},
},
preData: {
name: 'remoteAddress',
constraints: [],
parameters: {
IPs: '',
},
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy remoteAddress in *production* IPs from empty set of IPs to [127.0.0.1]; constraints from empty set of constraints to [appName is one of (x,y)]',
],
[
'when host names changed',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
name: 'applicationHostname',
constraints: [
{
values: ['x', 'y'],
inverted: false,
operator: IN,
contextName: 'appName',
caseInsensitive: false,
},
],
parameters: {
hostNames: 'unleash.com',
},
},
preData: {
name: 'applicationHostname',
constraints: [],
parameters: {
hostNames: '',
},
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy applicationHostname in *production* hostNames from empty set of hostNames to [unleash.com]; constraints from empty set of constraints to [appName is one of (x,y)]',
],
[
'when no specific text for strategy exists yet',
{
id: 920,
type: FEATURE_STRATEGY_UPDATE,
createdBy: 'user@company.com',
createdAt: new Date('2022-06-01T10:03:11.549Z'),
data: {
name: 'newStrategy',
constraints: [
{
values: ['x', 'y'],
inverted: false,
operator: IN,
contextName: 'appName',
caseInsensitive: false,
},
],
parameters: {
IPs: '127.0.0.1',
},
},
preData: {
name: 'newStrategy',
constraints: [],
parameters: {
IPs: '',
},
},
tags: [],
featureName: 'new-feature',
project: 'my-other-project',
environment: 'production',
},
'user@company.com updated *[new-feature](unleashUrl/projects/my-other-project/features/new-feature)* in project *my-other-project* by updating strategy newStrategy in *production*',
],
];
testCases.forEach(([description, event, expected]) =>
test(`Should format specialised text for events ${description}`, () => {
const formatter = new FeatureEventFormatterMd('unleashUrl');
const actual = formatter.format(event);
expect(actual).toBe(expected);
}),
);