1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-25 00:07:47 +01:00

fix: exclude archived features in segments count (#7886)

This commit is contained in:
Mateusz Kwasniewski 2024-08-15 11:32:46 +02:00 committed by GitHub
parent 64a9caab30
commit a89f05181d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 35 additions and 15 deletions

View File

@ -602,16 +602,32 @@ test('Should show usage in features and projects', async () => {
);
const [feature] = await fetchFeatures();
const [strategy] = await fetchFeatureStrategies(feature.name);
//@ts-ignore
await addSegmentsToStrategy([segment.id], strategy.id);
const segments = await fetchSegments();
expect(segments).toMatchObject([
const unusedSegments = await fetchSegments();
expect(unusedSegments).toMatchObject([
{
usedInFeatures: 0,
usedInProjects: 0,
},
]);
await addSegmentsToStrategy([segment.id], strategy.id);
const usedSegments = await fetchSegments();
expect(usedSegments).toMatchObject([
{
usedInFeatures: 1,
usedInProjects: 1,
},
]);
await app.archiveFeature(feature.name, feature.project);
const segmentsWithArchivedFeatures = await fetchSegments();
expect(segmentsWithArchivedFeatures).toMatchObject([
{
usedInFeatures: 0,
usedInProjects: 0,
},
]);
});
describe('detect strategy usage in change requests', () => {

View File

@ -16,6 +16,7 @@ import { isDefined } from '../../util';
const T = {
segments: 'segments',
featureStrategies: 'feature_strategies',
features: 'features',
featureStrategySegment: 'feature_strategy_segment',
};
@ -123,17 +124,15 @@ export default class SegmentStore implements ISegmentStore {
private async getAllWithoutChangeRequestUsageData(): Promise<ISegment[]> {
const rows: ISegmentRow[] = await this.db
.select(
this.prefixColumns(),
'used_in_projects',
'used_in_features',
)
.countDistinct(
`${T.featureStrategies}.project_name AS used_in_projects`,
)
.countDistinct(
`${T.featureStrategies}.feature_name AS used_in_features`,
)
.select([
...this.prefixColumns(),
this.db.raw(
`count(distinct case when ${T.features}.archived_at is null then ${T.featureStrategies}.project_name end) as used_in_projects`,
),
this.db.raw(
`count(distinct case when ${T.features}.archived_at is null then ${T.featureStrategies}.feature_name end) as used_in_features`,
),
])
.from(T.segments)
.leftJoin(
T.featureStrategySegment,
@ -145,6 +144,11 @@ export default class SegmentStore implements ISegmentStore {
`${T.featureStrategies}.id`,
`${T.featureStrategySegment}.feature_strategy_id`,
)
.leftJoin(
T.features,
`${T.featureStrategies}.feature_name`,
`${T.features}.name`,
)
.groupBy(this.prefixColumns())
.orderBy('name', 'asc');