Skip to content

Commit

Permalink
feat: added activate workspace user
Browse files Browse the repository at this point in the history
  • Loading branch information
apsantiso committed Jul 19, 2024
1 parent a45c0b6 commit 6f11835
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/modules/workspaces/workspaces.controller.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,22 @@ describe('Workspace Controller', () => {
});
});

describe('PATCH /:workspaceId/members/:memberId/activate', () => {
it('When user is activated, then it should activate the correct user ', async () => {
const userUuid = v4();
const workspaceId = v4();

await expect(
workspacesController.activateWorkspaceMember(userUuid, workspaceId),
).resolves.toBeTruthy();

expect(workspacesUsecases.activateWorkspaceUser).toHaveBeenCalledWith(
userUuid,
workspaceId,
);
});
});

describe('PATCH /:workspaceId/setup', () => {
const user = newUser();
const workspaceDatDto = {
Expand Down
21 changes: 21 additions & 0 deletions src/modules/workspaces/workspaces.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -958,4 +958,25 @@ export class WorkspacesController {
workspaceId,
);
}

@Patch(':workspaceId/members/:memberId/activate')
@ApiBearerAuth()
@ApiOperation({
summary: 'Activate workspace user',
})
@ApiParam({ name: 'workspaceId', type: String, required: true })
@ApiParam({ name: 'memberId', type: String, required: true })
@ApiOkResponse({
description: 'User successfully activated',
})
@UseGuards(WorkspaceGuard)
@WorkspaceRequiredAccess(AccessContext.WORKSPACE, WorkspaceRole.OWNER)
async activateWorkspaceMember(
@Param('memberId', ValidateUUIDPipe)
memberId: WorkspaceTeamAttributes['id'],
@Param('workspaceId', ValidateUUIDPipe)
workspaceId: WorkspaceAttributes['id'],
) {
return this.workspaceUseCases.activateWorkspaceUser(memberId, workspaceId);
}
}
38 changes: 38 additions & 0 deletions src/modules/workspaces/workspaces.usecase.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3481,6 +3481,44 @@ describe('WorkspacesUsecases', () => {
});
});

describe('activateWorkspaceUser', () => {
it('When user is not valid or it is not part of workspace, then it should throw', async () => {
const workspace = newWorkspace();
const workspaceUser = newWorkspaceUser({ workspaceId: workspace.id });

jest
.spyOn(workspaceRepository, 'findWorkspaceUser')
.mockResolvedValue(null);

await expect(
service.activateWorkspaceUser(workspaceUser.memberId, workspace.id),
).rejects.toThrow(BadRequestException);
});

it('When user is valid, then it is activated', async () => {
const member = newUser();
const workspace = newWorkspace();
const workspaceUser = newWorkspaceUser({
workspaceId: workspace.id,
memberId: member.uuid,
});

jest
.spyOn(workspaceRepository, 'findWorkspaceUser')
.mockResolvedValue(workspaceUser);

await service.activateWorkspaceUser(
workspaceUser.memberId,
workspace.id,
);

expect(workspaceRepository.updateWorkspaceUser).toHaveBeenCalledWith(
workspaceUser.id,
{ deactivated: false },
);
});
});

describe('teams', () => {
describe('createTeam', () => {
it('When workspace is not found, then fail', async () => {
Expand Down
18 changes: 18 additions & 0 deletions src/modules/workspaces/workspaces.usecase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1913,6 +1913,24 @@ export class WorkspacesUsecases {
);
}

async activateWorkspaceUser(
memberId: WorkspaceUserAttributes['memberId'],
workspaceId: WorkspaceAttributes['id'],
) {
const workspaceUser = await this.workspaceRepository.findWorkspaceUser({
memberId,
workspaceId,
});

if (!workspaceUser) {
throw new BadRequestException('This user is not part of workspace');
}

await this.workspaceRepository.updateWorkspaceUser(workspaceUser.id, {
deactivated: false,
});
}

async changeTeamManager(
teamId: WorkspaceTeam['id'],
managerId: User['uuid'],
Expand Down

0 comments on commit 6f11835

Please sign in to comment.