diff --git a/src/lib/types/model.ts b/src/lib/types/model.ts index 44de43849a..14dc0c1a39 100644 --- a/src/lib/types/model.ts +++ b/src/lib/types/model.ts @@ -381,10 +381,10 @@ export interface ISuggestChangeFeature { changes: ISuggestChange[]; } -export interface ISuggestChange { +export interface ISuggestChangeBase { id?: number; action: SuggestChangeAction; - payload: any; + payload: SuggestChangePayload; createdBy?: Pick; createdAt?: Date; } @@ -397,13 +397,66 @@ export enum SuggestChangesetState { CANCELLED = 'Cancelled', } -export enum SuggestChangeAction { - UPDATE_ENABLED = 'updateEnabled', - ADD_STRATEGY = 'strategyAdd', - UPDATE_STRATEGY = 'strategyUpdate', - DELETE_STRATEGY = 'strategyDelete', +type SuggestChangePayload = + | SuggestChangeEnabled + | SuggestChangeAddStrategy + | SuggestChangeEditStrategy + | SuggestChangeDeleteStrategy; + +export interface ISuggestChangeAddStrategy extends ISuggestChangeBase { + action: 'addStrategy'; + payload: SuggestChangeAddStrategy; } +export interface ISuggestChangeDeleteStrategy extends ISuggestChangeBase { + action: 'deleteStrategy'; + payload: SuggestChangeDeleteStrategy; +} + +export interface ISuggestChangeUpdateStrategy extends ISuggestChangeBase { + action: 'updateStrategy'; + payload: SuggestChangeEditStrategy; +} + +export interface ISuggestChangeEnabled extends ISuggestChangeBase { + action: 'updateEnabled'; + payload: SuggestChangeEnabled; +} + +export type ISuggestChange = + | ISuggestChangeAddStrategy + | ISuggestChangeDeleteStrategy + | ISuggestChangeUpdateStrategy + | ISuggestChangeEnabled; + +type SuggestChangeEnabled = { enabled: boolean }; + +type SuggestChangeAddStrategy = Pick< + IFeatureStrategy, + 'parameters' | 'constraints' +> & { name: string }; + +type SuggestChangeEditStrategy = SuggestChangeAddStrategy & { id: string }; + +type SuggestChangeDeleteStrategy = { + deleteId: string; +}; + +export enum SuggestChangesetEvent { + CREATED = 'CREATED', + UPDATED = 'UPDATED', + SUBMITTED = 'SUBMITTED', + APPROVED = 'APPROVED', + REJECTED = 'REJECTED', + CLOSED = 'CLOSED', +} + +export type SuggestChangeAction = + | 'updateEnabled' + | 'addStrategy' + | 'updateStrategy' + | 'deleteStrategy'; + export interface ISuggestChangeEventData { feature: string; data: unknown; diff --git a/src/test/fixtures/fake-feature-strategies-store.ts b/src/test/fixtures/fake-feature-strategies-store.ts index 99c1848c5f..04cb53ba93 100644 --- a/src/test/fixtures/fake-feature-strategies-store.ts +++ b/src/test/fixtures/fake-feature-strategies-store.ts @@ -124,6 +124,20 @@ export default class FakeFeatureStrategiesStore return Promise.resolve(rows); } + async getFeatureToggleForEnvironment( + featureName: string, + // eslint-disable-next-line + environment: string, + ): Promise { + const toggle = this.featureToggles.find((f) => f.name === featureName); + if (toggle) { + return { ...toggle, environments: [] }; + } + throw new NotFoundError( + `Could not find feature with name ${featureName}`, + ); + } + async getFeatureToggleWithEnvs( featureName: string, archived: boolean = false, diff --git a/src/test/fixtures/fake-suggest-change-store.ts b/src/test/fixtures/fake-suggest-change-store.ts index 313ab7d9fe..c37d2c6081 100644 --- a/src/test/fixtures/fake-suggest-change-store.ts +++ b/src/test/fixtures/fake-suggest-change-store.ts @@ -29,7 +29,7 @@ export default class FakeSuggestChangeStore implements ISuggestChangeStore { } addChangeToSet( - change: PartialSome, + change: ISuggestChange, feature: string, changeSetID: number, userId: number, @@ -44,6 +44,7 @@ export default class FakeSuggestChangeStore implements ISuggestChangeStore { }, ], }); + return Promise.resolve(); }