From c2e6f74bfaa8c5de519349047efc264d8839f9c9 Mon Sep 17 00:00:00 2001 From: Mateusz Kwasniewski Date: Thu, 15 Aug 2024 13:27:18 +0200 Subject: [PATCH] fix: exclude archived features in segments count (#7897) --- .../segment/admin-segment.e2e.test.ts | 35 +++++++++++++++++++ src/lib/features/segment/segment-store.ts | 8 ++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/lib/features/segment/admin-segment.e2e.test.ts b/src/lib/features/segment/admin-segment.e2e.test.ts index 07c6b9023d..019a822da6 100644 --- a/src/lib/features/segment/admin-segment.e2e.test.ts +++ b/src/lib/features/segment/admin-segment.e2e.test.ts @@ -948,4 +948,39 @@ describe('detect strategy usage in change requests', () => { { usedInFeatures: 0, usedInProjects: 0 }, ]); }); + + test('If a segment is used in an archived feature it should be excluded from count - enterprise version', async () => { + await app.createSegment({ + name: 'a', + constraints: [], + }); + const flag = mockFeatureFlag(); + await createFeatureFlag(enterpriseApp, flag); + const [segment] = await enterpriseFetchSegments(); + + await addStrategyToFeatureEnv( + enterpriseApp, + { ...flag.strategies[0] }, + 'default', + flag.name, + ); + + const [feature] = await fetchFeatures(); + const [strategy] = await fetchFeatureStrategies(feature.name); + + const strategyId = strategy.id; + await addSegmentsToStrategy([segment.id], strategyId!); + + const segments = await enterpriseFetchSegments(); + expect(segments).toMatchObject([ + { usedInFeatures: 1, usedInProjects: 1 }, + ]); + + await enterpriseApp.archiveFeature(flag.name, 'default'); + + const segmentsAfter = await enterpriseFetchSegments(); + expect(segmentsAfter).toMatchObject([ + { usedInFeatures: 0, usedInProjects: 0 }, + ]); + }); }); diff --git a/src/lib/features/segment/segment-store.ts b/src/lib/features/segment/segment-store.ts index 04ad651e7c..890ce7cc0b 100644 --- a/src/lib/features/segment/segment-store.ts +++ b/src/lib/features/segment/segment-store.ts @@ -187,7 +187,13 @@ export default class SegmentStore implements ISegmentStore { T.featureStrategies, `${T.featureStrategies}.id`, `${T.featureStrategySegment}.feature_strategy_id`, - ); + ) + .leftJoin( + T.features, + `${T.featureStrategies}.feature_name`, + `${T.features}.name`, + ) + .where(`${T.features}.archived_at`, null); this.mergeCurrentUsageWithCombinedData( combinedUsageData,