mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	fix: add tests for move project
This commit is contained in:
		
							parent
							
								
									917ab04d40
								
							
						
					
					
						commit
						9e085d0ce0
					
				@ -834,6 +834,28 @@ class FeatureToggleService {
 | 
				
			|||||||
        return { ...legacyFeature, enabled, strategies };
 | 
					        return { ...legacyFeature, enabled, strategies };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async changeProject(
 | 
				
			||||||
 | 
					        featureName: string,
 | 
				
			||||||
 | 
					        newProject: string,
 | 
				
			||||||
 | 
					        createdBy: string,
 | 
				
			||||||
 | 
					    ): Promise<void> {
 | 
				
			||||||
 | 
					        const feature = await this.featureToggleStore.get(featureName);
 | 
				
			||||||
 | 
					        const oldProject = feature.project;
 | 
				
			||||||
 | 
					        feature.project = newProject;
 | 
				
			||||||
 | 
					        await this.featureToggleStore.update(newProject, feature);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const tags = await this.tagStore.getAllTagsForFeature(featureName);
 | 
				
			||||||
 | 
					        await this.eventStore.store(
 | 
				
			||||||
 | 
					            new FeatureChangeProjectEvent({
 | 
				
			||||||
 | 
					                createdBy,
 | 
				
			||||||
 | 
					                oldProject,
 | 
				
			||||||
 | 
					                newProject,
 | 
				
			||||||
 | 
					                featureName,
 | 
				
			||||||
 | 
					                tags,
 | 
				
			||||||
 | 
					            }),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async getArchivedFeatures(): Promise<FeatureToggle[]> {
 | 
					    async getArchivedFeatures(): Promise<FeatureToggle[]> {
 | 
				
			||||||
        return this.getFeatureToggles({}, true);
 | 
					        return this.getFeatureToggles({}, true);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -227,17 +227,6 @@ export default class ProjectService {
 | 
				
			|||||||
            newProjectId,
 | 
					            newProjectId,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const tags = await this.tagStore.getAllTagsForFeature(featureName);
 | 
					 | 
				
			||||||
        await this.eventStore.store(
 | 
					 | 
				
			||||||
            new FeatureChangeProjectEvent({
 | 
					 | 
				
			||||||
                createdBy: user.username,
 | 
					 | 
				
			||||||
                oldProject: currentProjectId,
 | 
					 | 
				
			||||||
                newProject: newProjectId,
 | 
					 | 
				
			||||||
                featureName,
 | 
					 | 
				
			||||||
                tags,
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return updatedFeature;
 | 
					        return updatedFeature;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -169,7 +169,7 @@ const hasCommonProjectAccess = async (user, projectName, condition) => {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const hasFullProjectAccess = async (user, projectName, condition) => {
 | 
					const hasFullProjectAccess = async (user, projectName, condition) => {
 | 
				
			||||||
    const { DELETE_PROJECT, UPDATE_PROJECT } = permissions;
 | 
					    const { DELETE_PROJECT, UPDATE_PROJECT, MOVE_FEATURE_TOGGLE } = permissions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
        await accessService.hasPermission(user, DELETE_PROJECT, projectName),
 | 
					        await accessService.hasPermission(user, DELETE_PROJECT, projectName),
 | 
				
			||||||
@ -177,6 +177,13 @@ const hasFullProjectAccess = async (user, projectName, condition) => {
 | 
				
			|||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
        await accessService.hasPermission(user, UPDATE_PROJECT, projectName),
 | 
					        await accessService.hasPermission(user, UPDATE_PROJECT, projectName),
 | 
				
			||||||
    ).toBe(condition);
 | 
					    ).toBe(condition);
 | 
				
			||||||
 | 
					    expect(
 | 
				
			||||||
 | 
					        await accessService.hasPermission(
 | 
				
			||||||
 | 
					            user,
 | 
				
			||||||
 | 
					            MOVE_FEATURE_TOGGLE,
 | 
				
			||||||
 | 
					            projectName,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
    hasCommonProjectAccess(user, projectName, condition);
 | 
					    hasCommonProjectAccess(user, projectName, condition);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -281,7 +288,7 @@ test('should have project admin to default project as editor', async () => {
 | 
				
			|||||||
test('should not have project admin to other projects as editor', async () => {
 | 
					test('should not have project admin to other projects as editor', async () => {
 | 
				
			||||||
    const projectName = 'unusedprojectname';
 | 
					    const projectName = 'unusedprojectname';
 | 
				
			||||||
    const user = editorUser;
 | 
					    const user = editorUser;
 | 
				
			||||||
    hasFullProjectAccess(projectName, user, false);
 | 
					    hasFullProjectAccess(user, projectName, false);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('cannot add CREATE_FEATURE without defining project', async () => {
 | 
					test('cannot add CREATE_FEATURE without defining project', async () => {
 | 
				
			||||||
@ -675,3 +682,77 @@ test('Should be denied access to delete a role that is in use', async () => {
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test('Should be denied move feature toggle to project where the user does not have access', async () => {
 | 
				
			||||||
 | 
					    const user = editorUser;
 | 
				
			||||||
 | 
					    const editorUser2 = await createUserEditorAccess(
 | 
				
			||||||
 | 
					        'seconduser',
 | 
				
			||||||
 | 
					        'bob2@gmail.com',
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const projectOrigin = {
 | 
				
			||||||
 | 
					        id: 'projectOrigin',
 | 
				
			||||||
 | 
					        name: 'New project',
 | 
				
			||||||
 | 
					        description: 'Blah',
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    const projectDest = {
 | 
				
			||||||
 | 
					        id: 'projectDest',
 | 
				
			||||||
 | 
					        name: 'New project',
 | 
				
			||||||
 | 
					        description: 'Blah',
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    await projectService.createProject(projectOrigin, user.id);
 | 
				
			||||||
 | 
					    await projectService.createProject(projectDest, editorUser2.id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const featureToggle = { name: 'moveableToggle' };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await featureToggleService.createFeatureToggle(
 | 
				
			||||||
 | 
					        projectOrigin.id,
 | 
				
			||||||
 | 
					        featureToggle,
 | 
				
			||||||
 | 
					        user.username,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        await projectService.changeProject(
 | 
				
			||||||
 | 
					            projectDest.id,
 | 
				
			||||||
 | 
					            featureToggle.name,
 | 
				
			||||||
 | 
					            user,
 | 
				
			||||||
 | 
					            projectOrigin.id,
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					        expect(e.toString()).toBe(
 | 
				
			||||||
 | 
					            'NoAccessError: You need permission=MOVE_FEATURE_TOGGLE to perform this action',
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test('Should be allowed move feature toggle to project when the user has access', async () => {
 | 
				
			||||||
 | 
					    const user = editorUser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const projectOrigin = {
 | 
				
			||||||
 | 
					        id: 'projectOrigin1',
 | 
				
			||||||
 | 
					        name: 'New project',
 | 
				
			||||||
 | 
					        description: 'Blah',
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    const projectDest = {
 | 
				
			||||||
 | 
					        id: 'projectDest2',
 | 
				
			||||||
 | 
					        name: 'New project',
 | 
				
			||||||
 | 
					        description: 'Blah',
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    await projectService.createProject(projectOrigin, user);
 | 
				
			||||||
 | 
					    await projectService.createProject(projectDest, user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const featureToggle = { name: 'moveableToggle2' };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await featureToggleService.createFeatureToggle(
 | 
				
			||||||
 | 
					        projectOrigin.id,
 | 
				
			||||||
 | 
					        featureToggle,
 | 
				
			||||||
 | 
					        user.username,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await projectService.changeProject(
 | 
				
			||||||
 | 
					        projectDest.id,
 | 
				
			||||||
 | 
					        featureToggle.name,
 | 
				
			||||||
 | 
					        user,
 | 
				
			||||||
 | 
					        projectOrigin.id,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user