mirror of
https://github.com/Unleash/unleash.git
synced 2025-03-27 00:19:39 +01:00
fix: add project filter to feature-toggle-list-builder (#5099)
Adds `forProject` filter to FeatureToggleQueryBuilder Filters playground results for an array of projects Closes # [1-1525](https://linear.app/unleash/issue/1-1525/getting-results-for-all-projects-when-defining-a-single-project-in-the) Signed-off-by: andreas-unleash <andreas@getunleash.ai>
This commit is contained in:
parent
de237d844d
commit
6760fc0723
src/lib/features
@ -198,6 +198,10 @@ export default class FeatureToggleStore implements IFeatureToggleStore {
|
||||
builder.addSelectColumn('df.enabled as parent_enabled');
|
||||
}
|
||||
|
||||
if (featureQuery?.project) {
|
||||
builder.forProject(featureQuery.project);
|
||||
}
|
||||
|
||||
const rows = await builder.internalQuery.select(
|
||||
builder.getSelectColumns(),
|
||||
);
|
||||
|
@ -129,7 +129,11 @@ export class FeatureToggleListBuilder {
|
||||
userId,
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
forProject = (project: string[]) => {
|
||||
this.internalQuery.whereIn('features.project', project);
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,22 @@
|
||||
import dbInit from '../../../../test/e2e/helpers/database-init';
|
||||
import getLogger from '../../../../test/fixtures/no-logger';
|
||||
import { FeatureToggleDTO, IFeatureToggleStore } from '../../../types';
|
||||
import {
|
||||
FeatureToggleDTO,
|
||||
IFeatureToggleStore,
|
||||
IProjectStore,
|
||||
} from '../../../types';
|
||||
|
||||
let stores;
|
||||
let db;
|
||||
let featureToggleStore: IFeatureToggleStore;
|
||||
let projectStore: IProjectStore;
|
||||
|
||||
beforeAll(async () => {
|
||||
getLogger.setMuteError(true);
|
||||
db = await dbInit('feature_toggle_store_serial', getLogger);
|
||||
stores = db.stores;
|
||||
featureToggleStore = stores.featureToggleStore;
|
||||
projectStore = stores.projectStore;
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
@ -301,5 +307,24 @@ describe('potentially_stale marking', () => {
|
||||
|
||||
expect(potentiallyStale).toBeFalsy();
|
||||
});
|
||||
|
||||
test('it should filter projects for playground', async () => {
|
||||
await projectStore.create({
|
||||
id: 'MyProject',
|
||||
name: 'MyProject',
|
||||
description: 'MyProject',
|
||||
});
|
||||
await featureToggleStore.create('default', { name: 'featureA' });
|
||||
|
||||
await featureToggleStore.create('MyProject', { name: 'featureB' });
|
||||
|
||||
const playgroundFeatures =
|
||||
await featureToggleStore.getPlaygroundFeatures({
|
||||
project: ['MyProject'],
|
||||
});
|
||||
|
||||
expect(playgroundFeatures).toHaveLength(1);
|
||||
expect(playgroundFeatures[0].project).toBe('MyProject');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -101,7 +101,7 @@ export class PlaygroundService {
|
||||
): Promise<AdvancedPlaygroundFeatureEvaluationResult[]> {
|
||||
const segments = await this.segmentService.getActive();
|
||||
|
||||
let filteredProjects: typeof projects;
|
||||
let filteredProjects: typeof projects = projects;
|
||||
if (this.flagResolver.isEnabled('privateProjects')) {
|
||||
const projectAccess =
|
||||
await this.privateProjectChecker.getUserAccessibleProjects(
|
||||
|
Loading…
Reference in New Issue
Block a user