mirror of
https://github.com/Unleash/unleash.git
synced 2025-05-03 01:18:43 +02: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
@ -198,6 +198,10 @@ export default class FeatureToggleStore implements IFeatureToggleStore {
|
|||||||
builder.addSelectColumn('df.enabled as parent_enabled');
|
builder.addSelectColumn('df.enabled as parent_enabled');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (featureQuery?.project) {
|
||||||
|
builder.forProject(featureQuery.project);
|
||||||
|
}
|
||||||
|
|
||||||
const rows = await builder.internalQuery.select(
|
const rows = await builder.internalQuery.select(
|
||||||
builder.getSelectColumns(),
|
builder.getSelectColumns(),
|
||||||
);
|
);
|
||||||
|
@ -132,4 +132,8 @@ export class FeatureToggleListBuilder {
|
|||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
forProject = (project: string[]) => {
|
||||||
|
this.internalQuery.whereIn('features.project', project);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,16 +1,22 @@
|
|||||||
import dbInit from '../../../../test/e2e/helpers/database-init';
|
import dbInit from '../../../../test/e2e/helpers/database-init';
|
||||||
import getLogger from '../../../../test/fixtures/no-logger';
|
import getLogger from '../../../../test/fixtures/no-logger';
|
||||||
import { FeatureToggleDTO, IFeatureToggleStore } from '../../../types';
|
import {
|
||||||
|
FeatureToggleDTO,
|
||||||
|
IFeatureToggleStore,
|
||||||
|
IProjectStore,
|
||||||
|
} from '../../../types';
|
||||||
|
|
||||||
let stores;
|
let stores;
|
||||||
let db;
|
let db;
|
||||||
let featureToggleStore: IFeatureToggleStore;
|
let featureToggleStore: IFeatureToggleStore;
|
||||||
|
let projectStore: IProjectStore;
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
getLogger.setMuteError(true);
|
getLogger.setMuteError(true);
|
||||||
db = await dbInit('feature_toggle_store_serial', getLogger);
|
db = await dbInit('feature_toggle_store_serial', getLogger);
|
||||||
stores = db.stores;
|
stores = db.stores;
|
||||||
featureToggleStore = stores.featureToggleStore;
|
featureToggleStore = stores.featureToggleStore;
|
||||||
|
projectStore = stores.projectStore;
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
@ -301,5 +307,24 @@ describe('potentially_stale marking', () => {
|
|||||||
|
|
||||||
expect(potentiallyStale).toBeFalsy();
|
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[]> {
|
): Promise<AdvancedPlaygroundFeatureEvaluationResult[]> {
|
||||||
const segments = await this.segmentService.getActive();
|
const segments = await this.segmentService.getActive();
|
||||||
|
|
||||||
let filteredProjects: typeof projects;
|
let filteredProjects: typeof projects = projects;
|
||||||
if (this.flagResolver.isEnabled('privateProjects')) {
|
if (this.flagResolver.isEnabled('privateProjects')) {
|
||||||
const projectAccess =
|
const projectAccess =
|
||||||
await this.privateProjectChecker.getUserAccessibleProjects(
|
await this.privateProjectChecker.getUserAccessibleProjects(
|
||||||
|
Loading…
Reference in New Issue
Block a user