mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-20 00:08:02 +01:00
fix: hardcoded stickiness and mode fields (#5342)
This PR fixes an issue where project overview would return hardcoded project mode and stickiness fields.
This commit is contained in:
parent
572610a0d8
commit
fd453f5af7
@ -128,17 +128,30 @@ class ProjectStore implements IProjectStore {
|
|||||||
const projectTimer = this.timer('getProjectsWithCount');
|
const projectTimer = this.timer('getProjectsWithCount');
|
||||||
let projects = this.db(TABLE)
|
let projects = this.db(TABLE)
|
||||||
.leftJoin('features', 'features.project', 'projects.id')
|
.leftJoin('features', 'features.project', 'projects.id')
|
||||||
|
.leftJoin(
|
||||||
|
'project_settings',
|
||||||
|
'project_settings.project',
|
||||||
|
'projects.id',
|
||||||
|
)
|
||||||
.orderBy('projects.name', 'asc');
|
.orderBy('projects.name', 'asc');
|
||||||
|
|
||||||
if (query) {
|
if (query) {
|
||||||
projects = projects.where(query);
|
projects = projects.where(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
let selectColumns = [
|
let selectColumns = [
|
||||||
this.db.raw(
|
this.db.raw(
|
||||||
'projects.id, projects.name, projects.description, projects.health, projects.updated_at, projects.created_at, count(features.name) FILTER (WHERE features.archived_at is null) AS number_of_features',
|
'projects.id, projects.name, projects.description, projects.health, projects.updated_at, projects.created_at, count(features.name) FILTER (WHERE features.archived_at is null) AS number_of_features',
|
||||||
),
|
),
|
||||||
|
'project_settings.default_stickiness',
|
||||||
|
'project_settings.project_mode',
|
||||||
] as (string | Raw<any>)[];
|
] as (string | Raw<any>)[];
|
||||||
|
|
||||||
let groupByColumns = ['projects.id'];
|
let groupByColumns = [
|
||||||
|
'projects.id',
|
||||||
|
'project_settings.default_stickiness',
|
||||||
|
'project_settings.project_mode',
|
||||||
|
];
|
||||||
|
|
||||||
if (userId) {
|
if (userId) {
|
||||||
projects = projects.leftJoin(`favorite_projects`, function () {
|
projects = projects.leftJoin(`favorite_projects`, function () {
|
||||||
@ -172,6 +185,7 @@ class ProjectStore implements IProjectStore {
|
|||||||
const memberMap = new Map<string, number>(
|
const memberMap = new Map<string, number>(
|
||||||
memberCount.map((c) => [c.project, Number(c.count)]),
|
memberCount.map((c) => [c.project, Number(c.count)]),
|
||||||
);
|
);
|
||||||
|
|
||||||
return projectsWithFeatureCount.map((projectWithCount) => {
|
return projectsWithFeatureCount.map((projectWithCount) => {
|
||||||
return {
|
return {
|
||||||
...projectWithCount,
|
...projectWithCount,
|
||||||
@ -192,8 +206,8 @@ class ProjectStore implements IProjectStore {
|
|||||||
memberCount: Number(row.number_of_users) || 0,
|
memberCount: Number(row.number_of_users) || 0,
|
||||||
updatedAt: row.updated_at,
|
updatedAt: row.updated_at,
|
||||||
createdAt: row.created_at,
|
createdAt: row.created_at,
|
||||||
mode: 'open',
|
mode: row.project_mode || 'open',
|
||||||
defaultStickiness: 'default',
|
defaultStickiness: row.default_stickiness || 'default',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,6 +177,7 @@ export default class ProjectService {
|
|||||||
query,
|
query,
|
||||||
userId,
|
userId,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (this.flagResolver.isEnabled('privateProjects') && userId) {
|
if (this.flagResolver.isEnabled('privateProjects') && userId) {
|
||||||
const projectAccess =
|
const projectAccess =
|
||||||
await this.privateProjectChecker.getUserAccessibleProjects(
|
await this.privateProjectChecker.getUserAccessibleProjects(
|
||||||
|
@ -1999,3 +1999,49 @@ test('deleting a project with no archived toggles should not result in an error'
|
|||||||
await projectService.createProject(project, user);
|
await projectService.createProject(project, user);
|
||||||
await projectService.deleteProject(project.id, user);
|
await projectService.deleteProject(project.id, user);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should get project settings with mode', async () => {
|
||||||
|
const projectOne = {
|
||||||
|
id: 'mode-private',
|
||||||
|
name: 'New project',
|
||||||
|
description: 'Desc',
|
||||||
|
mode: 'open' as const,
|
||||||
|
defaultStickiness: 'default',
|
||||||
|
};
|
||||||
|
|
||||||
|
const projectTwo = {
|
||||||
|
id: 'mode-open',
|
||||||
|
name: 'New project',
|
||||||
|
description: 'Desc',
|
||||||
|
mode: 'open' as const,
|
||||||
|
defaultStickiness: 'default',
|
||||||
|
};
|
||||||
|
|
||||||
|
const updatedProject = {
|
||||||
|
id: 'mode-private',
|
||||||
|
name: 'New name',
|
||||||
|
description: 'Desc',
|
||||||
|
mode: 'private' as const,
|
||||||
|
defaultStickiness: 'clientId',
|
||||||
|
};
|
||||||
|
|
||||||
|
const { mode, id, ...rest } = updatedProject;
|
||||||
|
|
||||||
|
await projectService.createProject(projectOne, user);
|
||||||
|
await projectService.createProject(projectTwo, user);
|
||||||
|
await projectService.updateProject({ id, ...rest }, user);
|
||||||
|
await projectService.updateProjectEnterpriseSettings({ mode, id }, user);
|
||||||
|
|
||||||
|
const projects = await projectService.getProjects();
|
||||||
|
const foundProjectOne = projects.find(
|
||||||
|
(project) => projectOne.id === project.id,
|
||||||
|
);
|
||||||
|
const foundProjectTwo = projects.find(
|
||||||
|
(project) => projectTwo.id === project.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(foundProjectOne!.mode).toBe('private');
|
||||||
|
expect(foundProjectOne!.defaultStickiness).toBe('clientId');
|
||||||
|
expect(foundProjectTwo!.mode).toBe('open');
|
||||||
|
expect(foundProjectTwo!.defaultStickiness).toBe('default');
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user