test: test case added for removeUsersAsAdmin findNonAdminUsersByIds removeUsersAsAdmin

This commit is contained in:
mirarifhasan
2024-01-31 11:23:10 +06:00
committed by Andrew Bastin
parent fd5abd59fb
commit 9543369ff3
5 changed files with 822 additions and 1886 deletions

View File

@@ -13,12 +13,15 @@ import { PrismaService } from 'src/prisma/prisma.service';
import {
DUPLICATE_EMAIL,
INVALID_EMAIL,
ONLY_ONE_ADMIN_ACCOUNT,
USER_ALREADY_INVITED,
USER_INVITATION_NOT_FOUND,
USER_NOT_FOUND,
} from '../errors';
import { ShortcodeService } from 'src/shortcode/shortcode.service';
import { ConfigService } from '@nestjs/config';
import { OffsetPaginationArgs } from 'src/types/input-types.args';
import * as E from 'fp-ts/Either';
const mockPrisma = mockDeep<PrismaService>();
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', () => {
test('should return count of all users in the organization', async () => {
mockUserService.getUsersCount.mockResolvedValueOnce(10);

View File

@@ -513,10 +513,10 @@ export class AdminService {
async removeUsersAsAdmin(userUIDs: string[]) {
const adminUsers = await this.userService.fetchAdminUsers();
const adminsNotInArray = adminUsers.filter(
const remainingAdmins = adminUsers.filter(
(adminUser) => !userUIDs.includes(adminUser.uid),
);
if (adminsNotInArray.length < 1) {
if (remainingAdmins.length < 1) {
return E.left(ONLY_ONE_ADMIN_ACCOUNT);
}

View File

@@ -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', () => {
test('should successfully create user and account for magic-link given valid inputs', async () => {
mockPrisma.user.create.mockResolvedValueOnce(user);
@@ -621,4 +641,12 @@ describe('UserService', () => {
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);
});
});
});

View File

@@ -546,14 +546,10 @@ export class UserService {
* @returns a Either of true or error
*/
async removeUsersAsAdmin(userUIDs: string[]) {
try {
await this.prisma.user.updateMany({
where: { uid: { in: userUIDs } },
data: { isAdmin: false },
});
return E.right(true);
} catch (error) {
return E.left(USER_NOT_FOUND);
}
await this.prisma.user.updateMany({
where: { uid: { in: userUIDs } },
data: { isAdmin: false },
});
return E.right(true);
}
}