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 { 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);

View File

@@ -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);
} }

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', () => { 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);
});
});
}); });

View File

@@ -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

File diff suppressed because it is too large Load Diff