mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-15 01:16:22 +02:00
fix: reached stage should emit feature name (#7068)
This commit is contained in:
parent
7cf9cfa96e
commit
9281d6b694
@ -38,10 +38,11 @@ test('can insert and read lifecycle stages', async () => {
|
|||||||
environment,
|
environment,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function reachedStage(name: StageName) {
|
function reachedStage(feature: string, name: StageName) {
|
||||||
return new Promise((resolve) =>
|
return new Promise((resolve) =>
|
||||||
featureLifecycleService.on(STAGE_ENTERED, (event) => {
|
featureLifecycleService.on(STAGE_ENTERED, (event) => {
|
||||||
if (event.stage === name) resolve(name);
|
if (event.stage === name && event.feature === feature)
|
||||||
|
resolve(name);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -65,20 +66,20 @@ test('can insert and read lifecycle stages', async () => {
|
|||||||
featureLifecycleService.listen();
|
featureLifecycleService.listen();
|
||||||
|
|
||||||
eventStore.emit(FEATURE_CREATED, { featureName });
|
eventStore.emit(FEATURE_CREATED, { featureName });
|
||||||
await reachedStage('initial');
|
await reachedStage(featureName, 'initial');
|
||||||
|
|
||||||
emitMetricsEvent('unknown-environment');
|
emitMetricsEvent('unknown-environment');
|
||||||
emitMetricsEvent('my-dev-environment');
|
emitMetricsEvent('my-dev-environment');
|
||||||
await reachedStage('pre-live');
|
await reachedStage(featureName, 'pre-live');
|
||||||
emitMetricsEvent('my-dev-environment');
|
emitMetricsEvent('my-dev-environment');
|
||||||
emitMetricsEvent('my-another-dev-environment');
|
emitMetricsEvent('my-another-dev-environment');
|
||||||
emitMetricsEvent('my-prod-environment');
|
emitMetricsEvent('my-prod-environment');
|
||||||
await reachedStage('live');
|
await reachedStage(featureName, 'live');
|
||||||
emitMetricsEvent('my-prod-environment');
|
emitMetricsEvent('my-prod-environment');
|
||||||
emitMetricsEvent('my-another-prod-environment');
|
emitMetricsEvent('my-another-prod-environment');
|
||||||
|
|
||||||
eventStore.emit(FEATURE_ARCHIVED, { featureName });
|
eventStore.emit(FEATURE_ARCHIVED, { featureName });
|
||||||
await reachedStage('archived');
|
await reachedStage(featureName, 'archived');
|
||||||
|
|
||||||
const lifecycle =
|
const lifecycle =
|
||||||
await featureLifecycleService.getFeatureLifecycle(featureName);
|
await featureLifecycleService.getFeatureLifecycle(featureName);
|
||||||
@ -91,7 +92,7 @@ test('can insert and read lifecycle stages', async () => {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
eventStore.emit(FEATURE_REVIVED, { featureName });
|
eventStore.emit(FEATURE_REVIVED, { featureName });
|
||||||
await reachedStage('initial');
|
await reachedStage(featureName, 'initial');
|
||||||
const initialLifecycle =
|
const initialLifecycle =
|
||||||
await featureLifecycleService.getFeatureLifecycle(featureName);
|
await featureLifecycleService.getFeatureLifecycle(featureName);
|
||||||
expect(initialLifecycle).toEqual([
|
expect(initialLifecycle).toEqual([
|
||||||
|
@ -125,7 +125,7 @@ export class FeatureLifecycleService extends EventEmitter {
|
|||||||
await this.featureLifecycleStore.insert([
|
await this.featureLifecycleStore.insert([
|
||||||
{ feature, stage: 'initial' },
|
{ feature, stage: 'initial' },
|
||||||
]);
|
]);
|
||||||
this.emit(STAGE_ENTERED, { stage: 'initial' });
|
this.emit(STAGE_ENTERED, { stage: 'initial', feature });
|
||||||
}
|
}
|
||||||
|
|
||||||
private async stageReceivedMetrics(
|
private async stageReceivedMetrics(
|
||||||
@ -135,7 +135,9 @@ export class FeatureLifecycleService extends EventEmitter {
|
|||||||
await this.featureLifecycleStore.insert(
|
await this.featureLifecycleStore.insert(
|
||||||
features.map((feature) => ({ feature, stage })),
|
features.map((feature) => ({ feature, stage })),
|
||||||
);
|
);
|
||||||
this.emit(STAGE_ENTERED, { stage });
|
features.forEach((feature) =>
|
||||||
|
this.emit(STAGE_ENTERED, { stage, feature }),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async featuresReceivedMetrics(
|
private async featuresReceivedMetrics(
|
||||||
@ -207,7 +209,7 @@ export class FeatureLifecycleService extends EventEmitter {
|
|||||||
await this.featureLifecycleStore.insert([
|
await this.featureLifecycleStore.insert([
|
||||||
{ feature, stage: 'archived' },
|
{ feature, stage: 'archived' },
|
||||||
]);
|
]);
|
||||||
this.emit(STAGE_ENTERED, { stage: 'archived' });
|
this.emit(STAGE_ENTERED, { stage: 'archived', feature });
|
||||||
}
|
}
|
||||||
|
|
||||||
private async featureRevived(feature: string) {
|
private async featureRevived(feature: string) {
|
||||||
|
@ -95,10 +95,10 @@ const uncompleteFeature = async (featureName: string, expectedCode = 200) => {
|
|||||||
.expect(expectedCode);
|
.expect(expectedCode);
|
||||||
};
|
};
|
||||||
|
|
||||||
function reachedStage(name: StageName) {
|
function reachedStage(feature: string, stage: StageName) {
|
||||||
return new Promise((resolve) =>
|
return new Promise((resolve) =>
|
||||||
featureLifecycleService.on(STAGE_ENTERED, (event) => {
|
featureLifecycleService.on(STAGE_ENTERED, (event) => {
|
||||||
if (event.stage === name) resolve(name);
|
if (event.stage === stage) resolve(stage);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -118,7 +118,7 @@ test('should return lifecycle stages', async () => {
|
|||||||
await app.createFeature('my_feature_a');
|
await app.createFeature('my_feature_a');
|
||||||
await app.enableFeature('my_feature_a', 'default');
|
await app.enableFeature('my_feature_a', 'default');
|
||||||
eventStore.emit(FEATURE_CREATED, { featureName: 'my_feature_a' });
|
eventStore.emit(FEATURE_CREATED, { featureName: 'my_feature_a' });
|
||||||
await reachedStage('initial');
|
await reachedStage('my_feature_a', 'initial');
|
||||||
await expectFeatureStage('my_feature_a', 'initial');
|
await expectFeatureStage('my_feature_a', 'initial');
|
||||||
eventBus.emit(CLIENT_METRICS, {
|
eventBus.emit(CLIENT_METRICS, {
|
||||||
bucket: {
|
bucket: {
|
||||||
@ -143,10 +143,10 @@ test('should return lifecycle stages', async () => {
|
|||||||
},
|
},
|
||||||
environment: 'non-existent',
|
environment: 'non-existent',
|
||||||
});
|
});
|
||||||
await reachedStage('live');
|
await reachedStage('my_feature_a', 'live');
|
||||||
await expectFeatureStage('my_feature_a', 'live');
|
await expectFeatureStage('my_feature_a', 'live');
|
||||||
eventStore.emit(FEATURE_ARCHIVED, { featureName: 'my_feature_a' });
|
eventStore.emit(FEATURE_ARCHIVED, { featureName: 'my_feature_a' });
|
||||||
await reachedStage('archived');
|
await reachedStage('my_feature_a', 'archived');
|
||||||
|
|
||||||
const { body } = await getFeatureLifecycle('my_feature_a');
|
const { body } = await getFeatureLifecycle('my_feature_a');
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ test('should return lifecycle stages', async () => {
|
|||||||
await expectFeatureStage('my_feature_a', 'archived');
|
await expectFeatureStage('my_feature_a', 'archived');
|
||||||
|
|
||||||
eventStore.emit(FEATURE_REVIVED, { featureName: 'my_feature_a' });
|
eventStore.emit(FEATURE_REVIVED, { featureName: 'my_feature_a' });
|
||||||
await reachedStage('initial');
|
await reachedStage('my_feature_a', 'initial');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should be able to toggle between completed/uncompleted', async () => {
|
test('should be able to toggle between completed/uncompleted', async () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user