Make user business logic reusable (#1114)

- Refactor user business logic from `user.service` into `user.domain`
  Make user business logic reusable by using `user.domain` from other services than `user.service`

- Add `jest-when` lib to make testing easier and use it in `userService`
  Using when helps from coupling tests to order of mock implementations execution

- Move all user business logic from user-repository to user.service

- Fix user.service tests not awaiting promises leaking state between tests

- Presentation logic for `getUserProfileImage` moved from UserService to UserController

- Fix `user.e2e` test logic. Pending fixing the configuration of the test itself
This commit is contained in:
Jaime Baez
2022-12-23 21:08:50 +01:00
committed by GitHub
parent bf921a41f9
commit 20c5578470
20 changed files with 577 additions and 972 deletions

View File

@@ -7,8 +7,15 @@
"^.+\\.(t|j)s$": "ts-jest"
},
"moduleNameMapper": {
"@app/common/(.*)": "<rootDir>../../../libs/common/src/$1",
"^@app/database(|/.*)$": "<rootDir>../../../libs/database/src/$1",
"@app/database/config": "<rootDir>../../../libs/database/src/config",
"@app/database/config/(.*)": "<rootDir>../../../libs/database/src/config/$1",
"@app/database/entities/(.*)": "<rootDir>../../../libs/database/src/entities/$1"
"@app/database/entities/(.*)": "<rootDir>../../../libs/database/src/entities/$1",
"@app/common": "<rootDir>../../../libs/common/src",
"@app/common/(.*)": "<rootDir>../../../libs/common/src/$1",
"^@app/job(|/.*)$": "<rootDir>../../../libs/job/src/$1",
"@app/job": "<rootDir>../../../libs/job/src",
"^@app/immich-config(|/.*)$": "<rootDir>../../../libs/immich-config/src/$1",
"^@app/storage(|/.*)$": "<rootDir>../../../libs/storage/src/$1"
}
}

View File

@@ -33,6 +33,7 @@ export function getAuthUser(): AuthUserDto {
return {
id: '3108ac14-8afb-4b7e-87fd-39ebb6b79750',
email: 'test@email.com',
isAdmin: false,
};
}

View File

@@ -7,11 +7,11 @@ import { databaseConfig } from '@app/database/config/database.config';
import { UserModule } from '../src/api-v1/user/user.module';
import { ImmichJwtModule } from '../src/modules/immich-jwt/immich-jwt.module';
import { UserService } from '../src/api-v1/user/user.service';
import { CreateUserDto } from '../src/api-v1/user/dto/create-user.dto';
import { CreateAdminDto, CreateUserDto } from '../src/api-v1/user/dto/create-user.dto';
import { UserResponseDto } from '../src/api-v1/user/response-dto/user-response.dto';
import { DataSource } from 'typeorm';
function _createUser(userService: UserService, data: CreateUserDto) {
function _createUser(userService: UserService, data: CreateUserDto | CreateAdminDto) {
return userService.createUser(data);
}
@@ -67,13 +67,15 @@ describe('User', () => {
const userTwoEmail = 'two@test.com';
beforeAll(async () => {
// first user must be admin
authUser = await _createUser(userService, {
firstName: 'auth-user',
lastName: 'test',
email: authUserEmail,
password: '1234',
isAdmin: true,
});
await Promise.allSettled([
_createUser(userService, {
firstName: 'auth-user',
lastName: 'test',
email: authUserEmail,
password: '1234',
}).then((user) => (authUser = user)),
_createUser(userService, {
firstName: 'one',
lastName: 'test',