Skip to content

Commit

Permalink
test(domain): test users service remaining cases
Browse files Browse the repository at this point in the history
  • Loading branch information
tericcabrel committed Nov 1, 2023
1 parent 6814a21 commit 07297d8
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 4 deletions.
71 changes: 70 additions & 1 deletion packages/domain/__tests__/services/users/user.service.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { User } from '@sharingan/database';
import SharinganError, { errors } from '@sharingan/utils';
import SharinganError, { errors, generateRandomId } from '@sharingan/utils';

import { roleService, userService } from '../../../index';
import {
Expand Down Expand Up @@ -55,6 +55,49 @@ describe('Test User service', () => {
await deleteTestUsersById([createdUser.id]);
});

it('should create a user with no username', async () => {
// GIVEN
const role = await findTestRole('user');
const createUserDto = await createTestUserDto({ roleId: role.id, username: null });

// WHEN
const createdUser = await userService.create(createUserDto);

// THEN
expect(createdUser).toMatchObject<User>({
createdAt: expect.any(Date),
email: createUserDto.email,
id: createUserDto.toUser().id,
isEnabled: createUserDto.toUser().isEnabled,
name: createUserDto.toUser().name,
oauthProvider: createUserDto.toUser().oauthProvider,
password: null,
pictureUrl: createUserDto.toUser().pictureUrl,
roleId: createUserDto.toUser().roleId,
timezone: createUserDto.toUser().timezone,
updatedAt: expect.any(Date),
username: expect.any(String),
});

await deleteTestUsersById([createdUser.id]);
});

it('should create a user with a username that already exists', async () => {
// GIVEN
const role = await findTestRole('user');
const user = await createTestUser({ username: 'roloto' });

const createUserDto = await createTestUserDto({ roleId: role.id, username: 'roloto' });

// WHEN
const createdUser = await userService.create(createUserDto);

// THEN
expect(createdUser.username).not.toEqual('roloto');

await deleteTestUsersById([user.id, createdUser.id]);
});

it('should create a user - validation check', async () => {
// GIVEN
const role = await findTestRole('user');
Expand Down Expand Up @@ -84,6 +127,21 @@ describe('Test User service', () => {
await deleteTestUsersById([createdUser.id]);
});

it('should fail create a user because the email address already exists', async () => {
// GIVEN
const user = await createTestUser({ email: '[email protected]' });
const role = await findTestRole('user');
const createUserDto = await createTestUserDto({ email: '[email protected]', roleId: role.id });

// WHEN
// THEN
await expect(async () => {
await userService.create(createUserDto);
}).rejects.toThrow(new SharinganError(errors.EMAIL_ALREADY_TAKEN, 'EMAIL_ALREADY_TAKEN'));

await deleteTestUsersById([user.id]);
});

it('should update user information', async () => {
// GIVEN
const currentUser = await createTestUser({});
Expand Down Expand Up @@ -178,4 +236,15 @@ describe('Test User service', () => {

await deleteTestUsersById([user.id]);
});

it('should found no user given the ID provided', async () => {
// GIVEN
const snippetId = generateRandomId();

// WHEN
const user = await userService.findById(snippetId);

// THEN
expect(user).toBeNull();
});
});
14 changes: 11 additions & 3 deletions packages/domain/__tests__/setup/test-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,21 @@ type CreateManyTestFoldersArgs = {
};

type CreateTestUserDtoArgs = {
email?: string;
isEnabled?: boolean;
oauthProvider?: OauthProvider;
password?: string | null;
roleId: string;
username?: string | null;
};

type CreateTestUserArgs = {
email?: string;
isEnabled?: boolean;
oauthProvider?: OauthProvider;
password?: string | null;
roleName?: RoleName;
username?: string | null;
};

export const findTestRole = async (name: RoleName): Promise<Role> => {
Expand All @@ -53,20 +57,22 @@ export const findTestRole = async (name: RoleName): Promise<Role> => {
};

export const createTestUserDto = ({
email,
isEnabled,
oauthProvider,
password,
roleId,
username = randUserName(),
}: CreateTestUserDtoArgs): CreateUserDto => {
const dto = new CreateUserDto({
email: randEmail(),
email: email ?? randEmail(),
name: randFullName(),
oauthProvider: oauthProvider ?? 'github',
password: password ?? null,
pictureUrl: randImg({ category: 'people' }),
roleId,
timezone: randTimeZone(),
username: randUserName(),
username,
});

dto.isEnabled = Boolean(isEnabled);
Expand All @@ -75,14 +81,16 @@ export const createTestUserDto = ({
};

export const createTestUser = async ({
email,
isEnabled,
oauthProvider,
password,
roleName = 'user',
username,
}: CreateTestUserArgs): Promise<User> => {
const role = await findTestRole(roleName);

const createUserDto = createTestUserDto({ isEnabled, oauthProvider, password, roleId: role.id });
const createUserDto = createTestUserDto({ email, isEnabled, oauthProvider, password, roleId: role.id, username });

return dbClient.user.create({ data: createUserDto.toUser() });
};
Expand Down

0 comments on commit 07297d8

Please sign in to comment.