mirror of
https://github.com/immich-app/immich.git
synced 2024-12-29 15:11:58 +00:00
Fix test instance cannot clear database after each test" (#354)
* Update test * Fixed test cannot initialize database * Added a separate network to test containers group to run test while in development mode
This commit is contained in:
parent
d8b26c6da8
commit
5d03e9bda8
7 changed files with 35 additions and 24 deletions
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
|
@ -15,4 +15,4 @@ jobs:
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Run Immich Server 2E2 Test
|
- name: Run Immich Server 2E2 Test
|
||||||
run: docker-compose -f ./docker/docker-compose.test.yml --env-file ./docker/.env.test up --abort-on-container-exit --exit-code-from immich_server_test
|
run: docker-compose -f ./docker/docker-compose.test.yml --env-file ./docker/.env.test up --abort-on-container-exit --exit-code-from immich-server-test
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -11,7 +11,7 @@ stage:
|
||||||
docker-compose -f ./docker/docker-compose.staging.yml up --build -V --remove-orphans
|
docker-compose -f ./docker/docker-compose.staging.yml up --build -V --remove-orphans
|
||||||
|
|
||||||
test-e2e:
|
test-e2e:
|
||||||
docker-compose -f ./docker/docker-compose.test.yml --env-file ./docker/.env.test up --renew-anon-volumes --abort-on-container-exit --exit-code-from immich_server_test --remove-orphans
|
docker-compose -f ./docker/docker-compose.test.yml --env-file ./docker/.env.test -p immich-test-e2e up --renew-anon-volumes --abort-on-container-exit --exit-code-from immich-server-test --remove-orphans --build
|
||||||
|
|
||||||
prod:
|
prod:
|
||||||
docker-compose -f ./docker/docker-compose.yml up --build -V --remove-orphans
|
docker-compose -f ./docker/docker-compose.yml up --build -V --remove-orphans
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Database
|
# Database
|
||||||
DB_HOSTNAME=immich_postgres_test
|
DB_HOSTNAME=immich-database-test
|
||||||
DB_USERNAME=postgres
|
DB_USERNAME=postgres
|
||||||
DB_PASSWORD=postgres
|
DB_PASSWORD=postgres
|
||||||
DB_DATABASE_NAME=e2e_test
|
DB_DATABASE_NAME=e2e_test
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
version: "3.8"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
immich_server_test:
|
immich-server-test:
|
||||||
image: immich-server-dev:latest
|
image: immich-server-test
|
||||||
build:
|
build:
|
||||||
context: ../server
|
context: ../server
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
|
@ -17,15 +17,17 @@ services:
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=development
|
- NODE_ENV=development
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- immich-redis-test
|
||||||
- database
|
- immich-database-test
|
||||||
|
networks:
|
||||||
redis:
|
- immich-test-network
|
||||||
container_name: immich_redis_test
|
immich-redis-test:
|
||||||
|
container_name: immich-redis-test
|
||||||
image: redis:6.2
|
image: redis:6.2
|
||||||
|
networks:
|
||||||
database:
|
- immich-test-network
|
||||||
container_name: immich_postgres_test
|
immich-database-test:
|
||||||
|
container_name: immich-database-test
|
||||||
image: postgres:14
|
image: postgres:14
|
||||||
env_file:
|
env_file:
|
||||||
- .env.test
|
- .env.test
|
||||||
|
@ -36,5 +38,8 @@ services:
|
||||||
PG_DATA: /var/lib/postgresql/data
|
PG_DATA: /var/lib/postgresql/data
|
||||||
volumes:
|
volumes:
|
||||||
- /var/lib/postgresql/data
|
- /var/lib/postgresql/data
|
||||||
ports:
|
networks:
|
||||||
- 5432:5432
|
- immich-test-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
immich-test-network:
|
||||||
|
|
|
@ -10,6 +10,7 @@ import { ImmichJwtModule } from '../src/modules/immich-jwt/immich-jwt.module';
|
||||||
import { AuthUserDto } from '../src/decorators/auth-user.decorator';
|
import { AuthUserDto } from '../src/decorators/auth-user.decorator';
|
||||||
import { UserService } from '../src/api-v1/user/user.service';
|
import { UserService } from '../src/api-v1/user/user.service';
|
||||||
import { UserModule } from '../src/api-v1/user/user.module';
|
import { UserModule } from '../src/api-v1/user/user.module';
|
||||||
|
import { DataSource } from 'typeorm';
|
||||||
|
|
||||||
function _createAlbum(app: INestApplication, data: CreateAlbumDto) {
|
function _createAlbum(app: INestApplication, data: CreateAlbumDto) {
|
||||||
return request(app.getHttpServer()).post('/album').send(data);
|
return request(app.getHttpServer()).post('/album').send(data);
|
||||||
|
@ -17,9 +18,10 @@ function _createAlbum(app: INestApplication, data: CreateAlbumDto) {
|
||||||
|
|
||||||
describe('Album', () => {
|
describe('Album', () => {
|
||||||
let app: INestApplication;
|
let app: INestApplication;
|
||||||
|
let database: DataSource;
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
await clearDb();
|
await clearDb(database);
|
||||||
await app.close();
|
await app.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -30,6 +32,7 @@ describe('Album', () => {
|
||||||
}).compile();
|
}).compile();
|
||||||
|
|
||||||
app = moduleFixture.createNestApplication();
|
app = moduleFixture.createNestApplication();
|
||||||
|
database = app.get(DataSource);
|
||||||
await app.init();
|
await app.init();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -56,12 +59,14 @@ describe('Album', () => {
|
||||||
|
|
||||||
app = moduleFixture.createNestApplication();
|
app = moduleFixture.createNestApplication();
|
||||||
userService = app.get(UserService);
|
userService = app.get(UserService);
|
||||||
|
database = app.get(DataSource);
|
||||||
|
|
||||||
await app.init();
|
await app.init();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('with empty DB', () => {
|
describe('with empty DB', () => {
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await clearDb();
|
await clearDb(database);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('creates an album', async () => {
|
it('creates an album', async () => {
|
||||||
|
@ -91,13 +96,13 @@ describe('Album', () => {
|
||||||
// setup users
|
// setup users
|
||||||
const result = await Promise.all([
|
const result = await Promise.all([
|
||||||
userService.createUser({
|
userService.createUser({
|
||||||
email: 'one1@test.com',
|
email: 'one@test.com',
|
||||||
password: '1234',
|
password: '1234',
|
||||||
firstName: 'one',
|
firstName: 'one',
|
||||||
lastName: 'test',
|
lastName: 'test',
|
||||||
}),
|
}),
|
||||||
userService.createUser({
|
userService.createUser({
|
||||||
email: 'two2@test.com',
|
email: 'two@test.com',
|
||||||
password: '1234',
|
password: '1234',
|
||||||
firstName: 'two',
|
firstName: 'two',
|
||||||
lastName: 'test',
|
lastName: 'test',
|
||||||
|
|
|
@ -3,13 +3,10 @@ import { CanActivate, ExecutionContext } from '@nestjs/common';
|
||||||
import { TestingModuleBuilder } from '@nestjs/testing';
|
import { TestingModuleBuilder } from '@nestjs/testing';
|
||||||
import { AuthUserDto } from '../src/decorators/auth-user.decorator';
|
import { AuthUserDto } from '../src/decorators/auth-user.decorator';
|
||||||
import { JwtAuthGuard } from '../src/modules/immich-jwt/guards/jwt-auth.guard';
|
import { JwtAuthGuard } from '../src/modules/immich-jwt/guards/jwt-auth.guard';
|
||||||
import { databaseConfig } from '@app/database/config/database.config';
|
|
||||||
|
|
||||||
type CustomAuthCallback = () => AuthUserDto;
|
type CustomAuthCallback = () => AuthUserDto;
|
||||||
|
|
||||||
export async function clearDb() {
|
export async function clearDb(db: DataSource) {
|
||||||
const db = new DataSource(databaseConfig);
|
|
||||||
|
|
||||||
const entities = db.entityMetadatas;
|
const entities = db.entityMetadatas;
|
||||||
for (const entity of entities) {
|
for (const entity of entities) {
|
||||||
const repository = db.getRepository(entity.name);
|
const repository = db.getRepository(entity.name);
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { ImmichJwtModule } from '../src/modules/immich-jwt/immich-jwt.module';
|
||||||
import { UserService } from '../src/api-v1/user/user.service';
|
import { UserService } from '../src/api-v1/user/user.service';
|
||||||
import { CreateUserDto } from '../src/api-v1/user/dto/create-user.dto';
|
import { CreateUserDto } from '../src/api-v1/user/dto/create-user.dto';
|
||||||
import { UserResponseDto } from '../src/api-v1/user/response-dto/user-response.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) {
|
||||||
return userService.createUser(data);
|
return userService.createUser(data);
|
||||||
|
@ -16,9 +17,10 @@ function _createUser(userService: UserService, data: CreateUserDto) {
|
||||||
|
|
||||||
describe('User', () => {
|
describe('User', () => {
|
||||||
let app: INestApplication;
|
let app: INestApplication;
|
||||||
|
let database: DataSource;
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
await clearDb();
|
await clearDb(database);
|
||||||
await app.close();
|
await app.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -29,6 +31,7 @@ describe('User', () => {
|
||||||
}).compile();
|
}).compile();
|
||||||
|
|
||||||
app = moduleFixture.createNestApplication();
|
app = moduleFixture.createNestApplication();
|
||||||
|
database = app.get(DataSource);
|
||||||
await app.init();
|
await app.init();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -54,6 +57,7 @@ describe('User', () => {
|
||||||
|
|
||||||
app = moduleFixture.createNestApplication();
|
app = moduleFixture.createNestApplication();
|
||||||
userService = app.get(UserService);
|
userService = app.get(UserService);
|
||||||
|
database = app.get(DataSource);
|
||||||
await app.init();
|
await app.init();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue