From 2fdfd96282ef47258580738413c0d35ba84d2dcc Mon Sep 17 00:00:00 2001 From: kwasniew Date: Thu, 9 Mar 2023 11:19:33 +0100 Subject: [PATCH] refactor: separate fake admin and client store --- .../fake-feature-toggle-admin-store.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/test/fixtures/fake-feature-toggle-admin-store.ts diff --git a/src/test/fixtures/fake-feature-toggle-admin-store.ts b/src/test/fixtures/fake-feature-toggle-admin-store.ts new file mode 100644 index 0000000000..e99dabbac1 --- /dev/null +++ b/src/test/fixtures/fake-feature-toggle-admin-store.ts @@ -0,0 +1,63 @@ +import { FeatureToggle, IFeatureToggleQuery } from '../../lib/types/model'; +import { IGetAdminFeatures } from '../../lib/db/feature-toggle-client-store'; +import { IFeatureToggleAdminStore } from '../../lib/types/stores/feature-toggle-admin-store'; + +export default class FakeFeatureToggleAdminStore + implements IFeatureToggleAdminStore +{ + featureToggles: FeatureToggle[] = []; + + async getFeatures( + featureQuery?: IFeatureToggleQuery, + archived: boolean = false, + ): Promise { + const rows = this.featureToggles.filter((toggle) => { + if (featureQuery.namePrefix) { + if (featureQuery.project) { + return ( + toggle.name.startsWith(featureQuery.namePrefix) && + featureQuery.project.some((project) => + project.includes(toggle.project), + ) + ); + } + return toggle.name.startsWith(featureQuery.namePrefix); + } + if (featureQuery.project) { + return featureQuery.project.some((project) => + project.includes(toggle.project), + ); + } + return toggle.archived === archived; + }); + const clientRows: FeatureToggle[] = rows.map((t) => ({ + ...t, + enabled: true, + strategies: [], + description: t.description || '', + type: t.type || 'Release', + stale: t.stale || false, + variants: [], + tags: [], + })); + return Promise.resolve(clientRows); + } + + async getAdmin({ + featureQuery: query, + archived, + }: IGetAdminFeatures): Promise { + return this.getFeatures(query, archived); + } + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + async createFeature(feature: any): Promise { + this.featureToggles.push({ + project: feature.project || 'default', + createdAt: new Date(), + archived: false, + ...feature, + }); + return Promise.resolve(); + } +}