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

fix: addon filtering supports wildcards

Co-authored-by: Simon Hornby <liquidwicked64@gmail.com>
This commit is contained in:
Christopher Kolstad 2022-07-12 15:50:22 +02:00
parent ea8b78669e
commit 8848610e1e
No known key found for this signature in database
GPG Key ID: 559ACB0E3DB5538A
2 changed files with 63 additions and 0 deletions

View File

@ -292,6 +292,65 @@ test('should filter events on environment if addon is setup to filter for it', a
expect(events[0].event.data.name).toBe('some-toggle'); expect(events[0].event.data.name).toBe('some-toggle');
}); });
test('should support wildcard option for filtering addons', async () => {
const { addonService, stores } = getSetup();
const desiredProjects = ['desired', 'desired2'];
const otherProject = 'other';
const config = {
provider: 'simple',
enabled: true,
events: [FEATURE_CREATED],
projects: ['*'],
description: '',
parameters: {
url: 'http://localhost:wh',
},
};
await addonService.createAddon(config, 'me@mail.com');
await stores.eventStore.store({
type: FEATURE_CREATED,
createdBy: 'some@user.com',
project: desiredProjects[0],
data: {
name: 'some-toggle',
enabled: false,
strategies: [{ name: 'default' }],
},
});
await stores.eventStore.store({
type: FEATURE_CREATED,
createdBy: 'some@user.com',
project: otherProject,
data: {
name: 'other-toggle',
enabled: false,
strategies: [{ name: 'default' }],
},
});
await stores.eventStore.store({
type: FEATURE_CREATED,
createdBy: 'some@user.com',
project: desiredProjects[1],
data: {
name: 'third-toggle',
enabled: false,
strategies: [{ name: 'default' }],
},
});
const simpleProvider = addonService.addonProviders.simple;
// @ts-expect-error
const events = simpleProvider.getEvents();
expect(events).toHaveLength(3);
expect(events[0].event.type).toBe(FEATURE_CREATED);
expect(events[0].event.data.name).toBe('some-toggle');
expect(events[1].event.type).toBe(FEATURE_CREATED);
expect(events[1].event.data.name).toBe('other-toggle');
expect(events[2].event.type).toBe(FEATURE_CREATED);
expect(events[2].event.data.name).toBe('third-toggle');
});
test('Should support filtering by both project and environment', async () => { test('Should support filtering by both project and environment', async () => {
const { addonService, stores } = getSetup(); const { addonService, stores } = getSetup();
const desiredProjects = ['desired1', 'desired2', 'desired3']; const desiredProjects = ['desired1', 'desired2', 'desired3'];

View File

@ -17,6 +17,8 @@ const SUPPORTED_EVENTS = Object.keys(events).map((k) => events[k]);
const MASKED_VALUE = '*****'; const MASKED_VALUE = '*****';
const WILDCARD_OPTION = '*';
interface ISensitiveParams { interface ISensitiveParams {
[key: string]: string[]; [key: string]: string[];
} }
@ -109,12 +111,14 @@ export default class AddonService {
(addon) => (addon) =>
!addon.projects || !addon.projects ||
addon.projects.length == 0 || addon.projects.length == 0 ||
addon.projects[0] === WILDCARD_OPTION ||
addon.projects.includes(event.project), addon.projects.includes(event.project),
) )
.filter( .filter(
(addon) => (addon) =>
!addon.environments || !addon.environments ||
addon.environments.length == 0 || addon.environments.length == 0 ||
addon.environments[0] === WILDCARD_OPTION ||
addon.environments.includes(event.environment), addon.environments.includes(event.environment),
) )
.filter((addon) => addonProviders[addon.provider]) .filter((addon) => addonProviders[addon.provider])