diff --git a/src/lib/features/feature-lifecycle/feature-lifecycle-store.ts b/src/lib/features/feature-lifecycle/feature-lifecycle-store.ts index f113824b08..5b9a625ff5 100644 --- a/src/lib/features/feature-lifecycle/feature-lifecycle-store.ts +++ b/src/lib/features/feature-lifecycle/feature-lifecycle-store.ts @@ -58,14 +58,15 @@ export class FeatureLifecycleStore implements IFeatureLifecycleStore { stopTimer(); return []; } + const baseTime = new Date(); const result = await this.db('feature_lifecycles') .insert( - validStages.map((stage) => ({ + validStages.map((stage, index) => ({ feature: stage.feature, stage: stage.stage, status: stage.status, status_value: stage.statusValue, - created_at: new Date(), + created_at: new Date(baseTime.getTime() + index), // prevent identical times for stages in bulk update })), ) .returning('*') diff --git a/src/lib/features/feature-lifecycle/feature-lifecycle.e2e.test.ts b/src/lib/features/feature-lifecycle/feature-lifecycle.e2e.test.ts index ef19c39edd..daa4495a59 100644 --- a/src/lib/features/feature-lifecycle/feature-lifecycle.e2e.test.ts +++ b/src/lib/features/feature-lifecycle/feature-lifecycle.e2e.test.ts @@ -38,7 +38,9 @@ beforeAll(async () => { db.stores, { experimental: { - flags: {}, + flags: { + optimizeLifecycle: true, + }, }, }, db.rawDatabase, @@ -178,6 +180,9 @@ test('should return lifecycle stages', async () => { enteredStageAt: expect.any(String), }, ]); + expect(new Date(body[2].enteredStageAt).getTime()).toBeGreaterThan( + new Date(body[1].enteredStageAt).getTime(), + ); await expectFeatureStage('my_feature_a', 'archived'); eventStore.emit(FEATURE_REVIVED, { featureName: 'my_feature_a' });