boredgame/src/lib/server/api/tests/users.service.test.ts

131 lines
6.5 KiB
TypeScript
Raw Normal View History

import 'reflect-metadata'
import { CredentialsType } from '$lib/server/api/databases/tables'
2024-09-14 00:21:22 +00:00
import { faker } from '@faker-js/faker'
import { Argon2id } from 'oslo/password'
import { container } from 'tsyringe'
2024-09-14 00:21:22 +00:00
import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'
import { CredentialsRepository } from '../repositories/credentials.repository'
import { UsersRepository } from '../repositories/users.repository'
import { CollectionsService } from '../services/collections.service'
import { TokensService } from '../services/tokens.service'
import { UserRolesService } from '../services/user_roles.service'
import { UsersService } from '../services/users.service'
import { WishlistsService } from '../services/wishlists.service'
describe('UsersService', () => {
let service: UsersService
const credentialsRepository = vi.mocked(CredentialsRepository.prototype)
const tokensService = vi.mocked(TokensService.prototype)
const usersRepository = vi.mocked(UsersRepository.prototype)
const userRolesService = vi.mocked(UserRolesService.prototype)
const wishlistsService = vi.mocked(WishlistsService.prototype)
const collectionsService = vi.mocked(CollectionsService.prototype)
beforeAll(() => {
service = container
.register<CredentialsRepository>(CredentialsRepository, { useValue: credentialsRepository })
.register<TokensService>(TokensService, { useValue: tokensService })
.register<UsersRepository>(UsersRepository, { useValue: usersRepository })
.register<UserRolesService>(UserRolesService, { useValue: userRolesService })
.register<WishlistsService>(WishlistsService, { useValue: wishlistsService })
.register<CollectionsService>(CollectionsService, { useValue: collectionsService })
.resolve(UsersService)
})
afterAll(() => {
vi.resetAllMocks()
})
2024-09-14 00:21:22 +00:00
const timeStampDate = new Date()
const dbUser = {
id: faker.string.uuid(),
cuid: 'ciglo1j8q0000t9j4xq8d6p5e',
first_name: faker.person.firstName(),
last_name: faker.person.lastName(),
email: faker.internet.email(),
username: faker.internet.userName(),
verified: false,
receive_email: false,
mfa_enabled: false,
theme: 'system',
createdAt: timeStampDate,
updatedAt: timeStampDate,
}
const dbCredentials = {
id: faker.string.uuid(),
user_id: dbUser.id,
type: CredentialsType.PASSWORD,
secret_data: 'hashedPassword',
createdAt: timeStampDate,
updatedAt: timeStampDate,
}
2024-09-14 00:21:22 +00:00
describe('Create User', () => {
it('should resolve', async () => {
2024-09-14 00:21:22 +00:00
const hashedPassword = new Argon2id().hash('111')
tokensService.createHashedToken = vi.fn().mockResolvedValue(hashedPassword)
usersRepository.create = vi.fn().mockResolvedValue(dbUser satisfies Awaited<ReturnType<typeof usersRepository.create>>)
credentialsRepository.create = vi.fn().mockResolvedValue(dbCredentials satisfies Awaited<ReturnType<typeof credentialsRepository.create>>)
userRolesService.addRoleToUser = vi.fn().mockResolvedValue(undefined)
wishlistsService.createEmptyNoName = vi.fn().mockResolvedValue(undefined)
collectionsService.createEmptyNoName = vi.fn().mockResolvedValue(undefined)
const spy_tokensService_createHashToken = vi.spyOn(tokensService, 'createHashedToken')
const spy_usersRepository_create = vi.spyOn(usersRepository, 'create')
const spy_credentialsRepository_create = vi.spyOn(credentialsRepository, 'create')
const spy_userRolesService_addRoleToUser = vi.spyOn(userRolesService, 'addRoleToUser')
const spy_wishlistsService_createEmptyNoName = vi.spyOn(wishlistsService, 'createEmptyNoName')
const spy_collectionsService_createEmptyNoName = vi.spyOn(collectionsService, 'createEmptyNoName')
await expect(
service.create({
2024-09-14 00:21:22 +00:00
firstName: faker.person.firstName(),
lastName: faker.person.lastName(),
email: faker.internet.email(),
username: faker.internet.userName(),
password: faker.string.alphanumeric(10),
confirm_password: faker.string.alphanumeric(10),
}),
2024-09-14 00:21:22 +00:00
).resolves.toEqual(dbUser)
expect(spy_tokensService_createHashToken).toBeCalledTimes(1)
expect(spy_usersRepository_create).toBeCalledTimes(1)
expect(spy_credentialsRepository_create).toBeCalledTimes(1)
expect(spy_userRolesService_addRoleToUser).toBeCalledTimes(1)
expect(spy_wishlistsService_createEmptyNoName).toBeCalledTimes(1)
expect(spy_collectionsService_createEmptyNoName).toBeCalledTimes(1)
})
})
2024-09-14 00:21:22 +00:00
describe('Update User', () => {
it('should resolve Password Exiting Credentials', async () => {
const hashedPassword = new Argon2id().hash('111')
tokensService.createHashedToken = vi.fn().mockResolvedValue(hashedPassword)
credentialsRepository.update = vi.fn().mockResolvedValue(dbCredentials satisfies Awaited<ReturnType<typeof credentialsRepository.update>>)
credentialsRepository.findPasswordCredentialsByUserId = vi
.fn()
.mockResolvedValue(dbCredentials satisfies Awaited<ReturnType<typeof credentialsRepository.findPasswordCredentialsByUserId>>)
const spy_tokensService_createHashToken = vi.spyOn(tokensService, 'createHashedToken')
const spy_credentialsRepository_findPasswordCredentialsByUserId = vi.spyOn(credentialsRepository, 'findPasswordCredentialsByUserId')
const spy_credentialsRepository_update = vi.spyOn(credentialsRepository, 'update')
await expect(service.updatePassword(dbUser.id, faker.string.alphanumeric(10))).resolves.toBeUndefined()
expect(spy_tokensService_createHashToken).toBeCalledTimes(1)
expect(spy_credentialsRepository_findPasswordCredentialsByUserId).toBeCalledTimes(1)
expect(spy_credentialsRepository_update).toBeCalledTimes(1)
})
2024-09-14 00:21:22 +00:00
it('Should Create User Password No Existing Credentials', async () => {
const hashedPassword = new Argon2id().hash('111')
tokensService.createHashedToken = vi.fn().mockResolvedValue(hashedPassword)
credentialsRepository.findPasswordCredentialsByUserId = vi.fn().mockResolvedValue(null)
credentialsRepository.create = vi.fn().mockResolvedValue(dbCredentials satisfies Awaited<ReturnType<typeof credentialsRepository.create>>)
2024-09-14 00:21:22 +00:00
const spy_tokensService_createHashToken = vi.spyOn(tokensService, 'createHashedToken')
const spy_credentialsRepository_create = vi.spyOn(credentialsRepository, 'create')
const spy_credentialsRepository_findPasswordCredentialsByUserId = vi.spyOn(credentialsRepository, 'findPasswordCredentialsByUserId')
2024-09-14 00:21:22 +00:00
await expect(service.updatePassword(dbUser.id, faker.string.alphanumeric(10))).resolves.not.toThrow()
expect(spy_tokensService_createHashToken).toBeCalledTimes(1)
expect(spy_credentialsRepository_findPasswordCredentialsByUserId).toBeCalledTimes(1)
expect(spy_credentialsRepository_create).toHaveBeenCalledTimes(1)
})
})
})