test: test case added for removeUsersAsAdmin findNonAdminUsersByIds removeUsersAsAdmin
This commit is contained in:
committed by
Andrew Bastin
parent
fd5abd59fb
commit
9543369ff3
@@ -13,12 +13,15 @@ import { PrismaService } from 'src/prisma/prisma.service';
|
|||||||
import {
|
import {
|
||||||
DUPLICATE_EMAIL,
|
DUPLICATE_EMAIL,
|
||||||
INVALID_EMAIL,
|
INVALID_EMAIL,
|
||||||
|
ONLY_ONE_ADMIN_ACCOUNT,
|
||||||
USER_ALREADY_INVITED,
|
USER_ALREADY_INVITED,
|
||||||
USER_INVITATION_NOT_FOUND,
|
USER_INVITATION_NOT_FOUND,
|
||||||
|
USER_NOT_FOUND,
|
||||||
} from '../errors';
|
} from '../errors';
|
||||||
import { ShortcodeService } from 'src/shortcode/shortcode.service';
|
import { ShortcodeService } from 'src/shortcode/shortcode.service';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { OffsetPaginationArgs } from 'src/types/input-types.args';
|
import { OffsetPaginationArgs } from 'src/types/input-types.args';
|
||||||
|
import * as E from 'fp-ts/Either';
|
||||||
|
|
||||||
const mockPrisma = mockDeep<PrismaService>();
|
const mockPrisma = mockDeep<PrismaService>();
|
||||||
const mockPubSub = mockDeep<PubSubService>();
|
const mockPubSub = mockDeep<PubSubService>();
|
||||||
@@ -187,6 +190,30 @@ describe('AdminService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('removeUsersAsAdmin', () => {
|
||||||
|
test('should resolve right and make admins to users', async () => {
|
||||||
|
mockUserService.fetchAdminUsers.mockResolvedValueOnce([
|
||||||
|
{ uid: '123' } as any,
|
||||||
|
]);
|
||||||
|
mockUserService.removeUsersAsAdmin.mockResolvedValueOnce(E.right(true));
|
||||||
|
|
||||||
|
return expect(
|
||||||
|
await adminService.removeUsersAsAdmin(['123456']),
|
||||||
|
).toEqualRight(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should resolve left and return error if only one admin in the infra', async () => {
|
||||||
|
mockUserService.fetchAdminUsers.mockResolvedValueOnce([
|
||||||
|
{ uid: '123' } as any,
|
||||||
|
]);
|
||||||
|
mockUserService.removeUsersAsAdmin.mockResolvedValueOnce(E.right(true));
|
||||||
|
|
||||||
|
return expect(await adminService.removeUsersAsAdmin(['123'])).toEqualLeft(
|
||||||
|
ONLY_ONE_ADMIN_ACCOUNT,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('getUsersCount', () => {
|
describe('getUsersCount', () => {
|
||||||
test('should return count of all users in the organization', async () => {
|
test('should return count of all users in the organization', async () => {
|
||||||
mockUserService.getUsersCount.mockResolvedValueOnce(10);
|
mockUserService.getUsersCount.mockResolvedValueOnce(10);
|
||||||
|
|||||||
@@ -513,10 +513,10 @@ export class AdminService {
|
|||||||
async removeUsersAsAdmin(userUIDs: string[]) {
|
async removeUsersAsAdmin(userUIDs: string[]) {
|
||||||
const adminUsers = await this.userService.fetchAdminUsers();
|
const adminUsers = await this.userService.fetchAdminUsers();
|
||||||
|
|
||||||
const adminsNotInArray = adminUsers.filter(
|
const remainingAdmins = adminUsers.filter(
|
||||||
(adminUser) => !userUIDs.includes(adminUser.uid),
|
(adminUser) => !userUIDs.includes(adminUser.uid),
|
||||||
);
|
);
|
||||||
if (adminsNotInArray.length < 1) {
|
if (remainingAdmins.length < 1) {
|
||||||
return E.left(ONLY_ONE_ADMIN_ACCOUNT);
|
return E.left(ONLY_ONE_ADMIN_ACCOUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -176,6 +176,26 @@ describe('UserService', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('findNonAdminUsersByIds', () => {
|
||||||
|
test('should successfully return valid (non-admin) users given valid user UIDs', async () => {
|
||||||
|
mockPrisma.user.findMany.mockResolvedValueOnce(users);
|
||||||
|
|
||||||
|
const result = await userService.findNonAdminUsersByIds([
|
||||||
|
'123344',
|
||||||
|
'5555',
|
||||||
|
'6666',
|
||||||
|
]);
|
||||||
|
expect(result).toEqual(users);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return empty array of users given a invalid user UIDs', async () => {
|
||||||
|
mockPrisma.user.findMany.mockResolvedValueOnce([]);
|
||||||
|
|
||||||
|
const result = await userService.findNonAdminUsersByIds(['sdcvbdbr']);
|
||||||
|
expect(result).toEqual([]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('createUserViaMagicLink', () => {
|
describe('createUserViaMagicLink', () => {
|
||||||
test('should successfully create user and account for magic-link given valid inputs', async () => {
|
test('should successfully create user and account for magic-link given valid inputs', async () => {
|
||||||
mockPrisma.user.create.mockResolvedValueOnce(user);
|
mockPrisma.user.create.mockResolvedValueOnce(user);
|
||||||
@@ -621,4 +641,12 @@ describe('UserService', () => {
|
|||||||
expect(result).toEqual(10);
|
expect(result).toEqual(10);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('removeUsersAsAdmin', () => {
|
||||||
|
test('should resolve right and return true for valid user UIDs', async () => {
|
||||||
|
mockPrisma.user.updateMany.mockResolvedValueOnce({ count: 1 });
|
||||||
|
const result = await userService.removeUsersAsAdmin(['123344']);
|
||||||
|
expect(result).toEqualRight(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -546,14 +546,10 @@ export class UserService {
|
|||||||
* @returns a Either of true or error
|
* @returns a Either of true or error
|
||||||
*/
|
*/
|
||||||
async removeUsersAsAdmin(userUIDs: string[]) {
|
async removeUsersAsAdmin(userUIDs: string[]) {
|
||||||
try {
|
await this.prisma.user.updateMany({
|
||||||
await this.prisma.user.updateMany({
|
where: { uid: { in: userUIDs } },
|
||||||
where: { uid: { in: userUIDs } },
|
data: { isAdmin: false },
|
||||||
data: { isAdmin: false },
|
});
|
||||||
});
|
return E.right(true);
|
||||||
return E.right(true);
|
|
||||||
} catch (error) {
|
|
||||||
return E.left(USER_NOT_FOUND);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2635
pnpm-lock.yaml
generated
2635
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user