From c9195632dd1ceac0d808561bca5561e9bd9c9dcd Mon Sep 17 00:00:00 2001 From: midzelis Date: Tue, 3 Feb 2026 15:12:30 +0000 Subject: [PATCH] feat: run maintance tests in isolation, share containers between all serial test suites --- .github/workflows/test.yml | 30 +++++++++++++++++-- e2e/playwright.config.ts | 14 ++++++--- .../{ => e2e}/api/specs/activity.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/api/specs/album.e2e-spec.ts | 6 ++-- .../{ => e2e}/api/specs/api-key.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/api/specs/asset.e2e-spec.ts | 8 ++--- .../api/specs/database-backups.e2e-spec.ts | 4 +-- .../{ => e2e}/api/specs/download.e2e-spec.ts | 2 +- e2e/src/{ => e2e}/api/specs/jobs.e2e-spec.ts | 4 +-- .../{ => e2e}/api/specs/library.e2e-spec.ts | 6 ++-- .../api/specs/maintenance.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/api/specs/map.e2e-spec.ts | 4 +-- .../{ => e2e}/api/specs/memory.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/api/specs/oauth.e2e-spec.ts | 4 +-- .../{ => e2e}/api/specs/partner.e2e-spec.ts | 6 ++-- .../{ => e2e}/api/specs/person.e2e-spec.ts | 6 ++-- .../{ => e2e}/api/specs/search.e2e-spec.ts | 2 +- .../{ => e2e}/api/specs/server.e2e-spec.ts | 6 ++-- .../{ => e2e}/api/specs/session.e2e-spec.ts | 6 ++-- .../api/specs/shared-link.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/api/specs/stack.e2e-spec.ts | 6 ++-- .../api/specs/system-config.e2e-spec.ts | 4 +-- .../api/specs/system-metadata.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/api/specs/tag.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/api/specs/trash.e2e-spec.ts | 4 +-- .../api/specs/user-admin.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/api/specs/user.e2e-spec.ts | 6 ++-- e2e/src/{ => e2e}/cli/specs/login.e2e-spec.ts | 2 +- .../cli/specs/server-info.e2e-spec.ts | 2 +- .../{ => e2e}/cli/specs/upload.e2e-spec.ts | 2 +- .../{ => e2e}/cli/specs/version.e2e-spec.ts | 2 +- e2e/src/{ => e2e}/fixtures.ts | 0 e2e/src/{ => e2e}/generators.ts | 0 .../specs/immich-admin.e2e-spec.ts | 2 +- e2e/src/{ => e2e}/responses.ts | 0 e2e/src/{ => e2e}/setup/docker-compose.ts | 0 e2e/src/{ => e2e}/utils.ts | 8 ++--- e2e/src/{ => e2e}/web/specs/album.e2e-spec.ts | 2 +- .../asset-viewer/detail-panel.e2e-spec.ts | 2 +- .../web/specs/asset-viewer/navbar.e2e-spec.ts | 2 +- .../specs/asset-viewer/slideshow.e2e-spec.ts | 2 +- .../web/specs/asset-viewer/stack.e2e-spec.ts | 2 +- e2e/src/{ => e2e}/web/specs/auth.e2e-spec.ts | 2 +- .../web/specs/photo-viewer.e2e-spec.ts | 2 +- .../web/specs/shared-link.e2e-spec.ts | 2 +- .../web/specs/user-admin.e2e-spec.ts | 2 +- .../{ => e2e}/web/specs/websocket.e2e-spec.ts | 2 +- .../web/specs/database-backups.e2e-spec.ts | 2 +- .../web/specs/maintenance.e2e-spec.ts | 2 +- e2e/src/{ => ui-tests}/generators/memory.ts | 0 .../generators/memory/model-objects.ts | 6 ++-- e2e/src/{ => ui-tests}/generators/timeline.ts | 0 .../timeline/distribution-patterns.ts | 4 +-- .../generators/timeline/images.ts | 2 +- .../generators/timeline/model-objects.ts | 2 +- .../generators/timeline/rest-response.ts | 4 +-- .../generators/timeline/timeline-config.ts | 2 +- .../generators/timeline/utils.ts | 2 +- .../mock-network/base-network.ts | 0 .../mock-network/memory-network.ts | 0 .../mock-network/timeline-network.ts | 4 +-- .../asset-viewer/asset-viewer.e2e-spec.ts} | 10 +++---- .../specs/memory/memory-viewer.e2e-spec.ts} | 12 ++++---- .../{ => ui-tests}/web/specs/memory/utils.ts | 0 .../specs/search/search-gallery.e2e-spec.ts} | 8 ++--- .../web/specs/timeline/timeline.e2e-spec.ts} | 19 +++++------- .../web/specs/timeline/utils.ts | 2 +- e2e/tsconfig.json | 1 - e2e/vitest.config.ts | 4 +-- 69 files changed, 163 insertions(+), 137 deletions(-) rename e2e/src/{ => e2e}/api/specs/activity.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/api/specs/album.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/api-key.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/api/specs/asset.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/database-backups.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/download.e2e-spec.ts (97%) rename e2e/src/{ => e2e}/api/specs/jobs.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/api/specs/library.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/maintenance.e2e-spec.ts (97%) rename e2e/src/{ => e2e}/api/specs/map.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/api/specs/memory.e2e-spec.ts (97%) rename e2e/src/{ => e2e}/api/specs/oauth.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/partner.e2e-spec.ts (96%) rename e2e/src/{ => e2e}/api/specs/person.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/api/specs/search.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/server.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/api/specs/session.e2e-spec.ts (93%) rename e2e/src/{ => e2e}/api/specs/shared-link.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/stack.e2e-spec.ts (97%) rename e2e/src/{ => e2e}/api/specs/system-config.e2e-spec.ts (94%) rename e2e/src/{ => e2e}/api/specs/system-metadata.e2e-spec.ts (94%) rename e2e/src/{ => e2e}/api/specs/tag.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/trash.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/api/specs/user-admin.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/api/specs/user.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/cli/specs/login.e2e-spec.ts (97%) rename e2e/src/{ => e2e}/cli/specs/server-info.e2e-spec.ts (94%) rename e2e/src/{ => e2e}/cli/specs/upload.e2e-spec.ts (99%) rename e2e/src/{ => e2e}/cli/specs/version.e2e-spec.ts (94%) rename e2e/src/{ => e2e}/fixtures.ts (100%) rename e2e/src/{ => e2e}/generators.ts (100%) rename e2e/src/{ => e2e}/immich-admin/specs/immich-admin.e2e-spec.ts (97%) rename e2e/src/{ => e2e}/responses.ts (100%) rename e2e/src/{ => e2e}/setup/docker-compose.ts (100%) rename e2e/src/{ => e2e}/utils.ts (98%) rename e2e/src/{ => e2e}/web/specs/album.e2e-spec.ts (95%) rename e2e/src/{ => e2e}/web/specs/asset-viewer/detail-panel.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/web/specs/asset-viewer/navbar.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/web/specs/asset-viewer/slideshow.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/web/specs/asset-viewer/stack.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/web/specs/auth.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/web/specs/photo-viewer.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/web/specs/shared-link.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/web/specs/user-admin.e2e-spec.ts (98%) rename e2e/src/{ => e2e}/web/specs/websocket.e2e-spec.ts (95%) rename e2e/src/{ => maintenance-tests}/web/specs/database-backups.e2e-spec.ts (99%) rename e2e/src/{ => maintenance-tests}/web/specs/maintenance.e2e-spec.ts (98%) rename e2e/src/{ => ui-tests}/generators/memory.ts (100%) rename e2e/src/{ => ui-tests}/generators/memory/model-objects.ts (88%) rename e2e/src/{ => ui-tests}/generators/timeline.ts (100%) rename e2e/src/{ => ui-tests}/generators/timeline/distribution-patterns.ts (98%) rename e2e/src/{ => ui-tests}/generators/timeline/images.ts (98%) rename e2e/src/{ => ui-tests}/generators/timeline/model-objects.ts (99%) rename e2e/src/{ => ui-tests}/generators/timeline/rest-response.ts (99%) rename e2e/src/{ => ui-tests}/generators/timeline/timeline-config.ts (98%) rename e2e/src/{ => ui-tests}/generators/timeline/utils.ts (97%) rename e2e/src/{ => ui-tests}/mock-network/base-network.ts (100%) rename e2e/src/{ => ui-tests}/mock-network/memory-network.ts (100%) rename e2e/src/{ => ui-tests}/mock-network/timeline-network.ts (98%) rename e2e/src/{web/specs/asset-viewer/asset-viewer.ui-spec.ts => ui-tests/web/specs/asset-viewer/asset-viewer.e2e-spec.ts} (97%) rename e2e/src/{web/specs/memory/memory-viewer.ui-spec.ts => ui-tests/web/specs/memory/memory-viewer.e2e-spec.ts} (96%) rename e2e/src/{ => ui-tests}/web/specs/memory/utils.ts (100%) rename e2e/src/{web/specs/search/search-gallery.ui-spec.ts => ui-tests/web/specs/search/search-gallery.e2e-spec.ts} (94%) rename e2e/src/{web/specs/timeline/timeline.ui-spec.ts => ui-tests/web/specs/timeline/timeline.e2e-spec.ts} (99%) rename e2e/src/{ => ui-tests}/web/specs/timeline/utils.ts (99%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 28a74ff33f..50465e4191 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -497,14 +497,15 @@ jobs: run: npx playwright install chromium --only-shell if: ${{ !cancelled() }} - name: Docker build - run: docker compose build + run: docker compose up -d --build --renew-anon-volumes --force-recreate --remove-orphans --wait --wait-timeout 300 if: ${{ !cancelled() }} - name: Run e2e tests (web) env: CI: true + PLAYWRIGHT_DISABLE_WEBSERVER: true run: npx playwright test --project=chromium if: ${{ !cancelled() }} - - name: Archive web results + - name: Archive e2e test (web) results uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 if: success() || failure() with: @@ -513,14 +514,37 @@ jobs: - name: Run ui tests (web) env: CI: true + PLAYWRIGHT_DISABLE_WEBSERVER: true run: npx playwright test --project=ui if: ${{ !cancelled() }} - - name: Archive ui results + - name: Archive ui test (web) results uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 if: success() || failure() with: name: e2e-ui-test-results-${{ matrix.runner }} path: e2e/playwright-report/ + - name: Run maintenance tests (web) + env: + CI: true + PLAYWRIGHT_DISABLE_WEBSERVER: true + run: npx playwright test --project=maintenance-isolated + if: ${{ !cancelled() }} + - name: Archive maintenance tests (web) results + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + if: success() || failure() + with: + name: e2e-maintenance-isolated-test-results-${{ matrix.runner }} + path: e2e/playwright-report/ + - name: Capture Docker logs + if: always() + run: docker compose logs --no-color > docker-compose-logs.txt + working-directory: ./e2e + - name: Archive Docker logs + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + if: always() + with: + name: docker-compose-logs-${{ matrix.runner }} + path: e2e/docker-compose-logs.txt success-check-e2e: name: End-to-End Tests Success needs: [e2e-tests-server-cli, e2e-tests-web] diff --git a/e2e/playwright.config.ts b/e2e/playwright.config.ts index 58f5997343..b86b3d65fd 100644 --- a/e2e/playwright.config.ts +++ b/e2e/playwright.config.ts @@ -14,7 +14,6 @@ export const playwrightDisableWebserver = process.env.PLAYWRIGHT_DISABLE_WEBSERV process.env.PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS = '1'; const config: PlaywrightTestConfig = { - testDir: './src/web/specs', fullyParallel: false, forbidOnly: !!process.env.CI, retries: process.env.CI ? 4 : 0, @@ -28,24 +27,31 @@ const config: PlaywrightTestConfig = { }, }, - testMatch: /.*\.e2e-spec\.ts/, - workers: process.env.CI ? 4 : Math.round(cpus().length * 0.75), projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] }, + testDir: './src/e2e/web/specs', testMatch: /.*\.e2e-spec\.ts/, workers: 1, }, { name: 'ui', use: { ...devices['Desktop Chrome'] }, - testMatch: /.*\.ui-spec\.ts/, + testDir: './src/ui-tests/web/specs', + testMatch: /.*\.e2e-spec\.ts/, fullyParallel: true, workers: process.env.CI ? 3 : Math.max(1, Math.round(cpus().length * 0.75) - 1), }, + { + name: 'maintenance-isolated', + use: { ...devices['Desktop Chrome'] }, + testDir: './src/maintenance-tests/web/specs', + testMatch: /.*\.e2e-spec\.ts/, + workers: 1, + }, // { // name: 'firefox', diff --git a/e2e/src/api/specs/activity.e2e-spec.ts b/e2e/src/e2e/api/specs/activity.e2e-spec.ts similarity index 98% rename from e2e/src/api/specs/activity.e2e-spec.ts rename to e2e/src/e2e/api/specs/activity.e2e-spec.ts index 9ce9b4b916..ee3c052701 100644 --- a/e2e/src/api/specs/activity.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/activity.e2e-spec.ts @@ -9,9 +9,9 @@ import { createAlbum, removeAssetFromAlbum, } from '@immich/sdk'; -import { createUserDto, uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto, uuidDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/album.e2e-spec.ts b/e2e/src/e2e/api/specs/album.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/album.e2e-spec.ts rename to e2e/src/e2e/api/specs/album.e2e-spec.ts index c4f06edd93..4dee986d0d 100644 --- a/e2e/src/api/specs/album.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/album.e2e-spec.ts @@ -9,9 +9,9 @@ import { LoginResponseDto, SharedLinkType, } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/api-key.e2e-spec.ts b/e2e/src/e2e/api/specs/api-key.e2e-spec.ts similarity index 98% rename from e2e/src/api/specs/api-key.e2e-spec.ts rename to e2e/src/e2e/api/specs/api-key.e2e-spec.ts index 28d134a664..214d12a782 100644 --- a/e2e/src/api/specs/api-key.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/api-key.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, Permission, createApiKey } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/asset.e2e-spec.ts b/e2e/src/e2e/api/specs/asset.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/asset.e2e-spec.ts rename to e2e/src/e2e/api/specs/asset.e2e-spec.ts index ab3252c40b..3c116240aa 100644 --- a/e2e/src/api/specs/asset.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/asset.e2e-spec.ts @@ -16,10 +16,10 @@ import { randomBytes } from 'node:crypto'; import { readFile, writeFile } from 'node:fs/promises'; import { basename, join } from 'node:path'; import { Socket } from 'socket.io-client'; -import { createUserDto, uuidDto } from 'src/fixtures'; -import { makeRandomImage } from 'src/generators'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, tempDir, TEN_TIMES, testAssetDir, utils } from 'src/utils'; +import { createUserDto, uuidDto } from 'src/e2e/fixtures'; +import { makeRandomImage } from 'src/e2e/generators'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, tempDir, TEN_TIMES, testAssetDir, utils } from 'src/e2e/utils'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/database-backups.e2e-spec.ts b/e2e/src/e2e/api/specs/database-backups.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/database-backups.e2e-spec.ts rename to e2e/src/e2e/api/specs/database-backups.e2e-spec.ts index 2b0f6ae61a..9581873143 100644 --- a/e2e/src/api/specs/database-backups.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/database-backups.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto, ManualJobName } from '@immich/sdk'; -import { errorDto } from 'src/responses'; -import { app, utils } from 'src/utils'; +import { errorDto } from 'src/e2e/responses'; +import { app, utils } from 'src/e2e/utils'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/download.e2e-spec.ts b/e2e/src/e2e/api/specs/download.e2e-spec.ts similarity index 97% rename from e2e/src/api/specs/download.e2e-spec.ts rename to e2e/src/e2e/api/specs/download.e2e-spec.ts index 4dcb6934af..6af5c1e286 100644 --- a/e2e/src/api/specs/download.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/download.e2e-spec.ts @@ -1,6 +1,6 @@ import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk'; import { readFile, writeFile } from 'node:fs/promises'; -import { app, tempDir, utils } from 'src/utils'; +import { app, tempDir, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/jobs.e2e-spec.ts b/e2e/src/e2e/api/specs/jobs.e2e-spec.ts similarity index 98% rename from e2e/src/api/specs/jobs.e2e-spec.ts rename to e2e/src/e2e/api/specs/jobs.e2e-spec.ts index be7984404b..119223b61b 100644 --- a/e2e/src/api/specs/jobs.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/jobs.e2e-spec.ts @@ -2,8 +2,8 @@ import { LoginResponseDto, QueueCommand, QueueName, updateConfig } from '@immich import { cpSync, rmSync } from 'node:fs'; import { readFile } from 'node:fs/promises'; import { basename } from 'node:path'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, testAssetDir, utils } from 'src/utils'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, testAssetDir, utils } from 'src/e2e/utils'; import request from 'supertest'; import { afterEach, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/library.e2e-spec.ts b/e2e/src/e2e/api/specs/library.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/library.e2e-spec.ts rename to e2e/src/e2e/api/specs/library.e2e-spec.ts index 4d67a84647..ed70af0631 100644 --- a/e2e/src/api/specs/library.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/library.e2e-spec.ts @@ -1,9 +1,9 @@ import { LibraryResponseDto, LoginResponseDto, getAllLibraries } from '@immich/sdk'; import { cpSync, existsSync, rmSync, unlinkSync } from 'node:fs'; import { Socket } from 'socket.io-client'; -import { userDto, uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, testAssetDir, testAssetDirInternal, utils } from 'src/utils'; +import { userDto, uuidDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, testAssetDir, testAssetDirInternal, utils } from 'src/e2e/utils'; import request from 'supertest'; import { utimes } from 'utimes'; import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/maintenance.e2e-spec.ts b/e2e/src/e2e/api/specs/maintenance.e2e-spec.ts similarity index 97% rename from e2e/src/api/specs/maintenance.e2e-spec.ts rename to e2e/src/e2e/api/specs/maintenance.e2e-spec.ts index 8e4e154328..9acebbdd8e 100644 --- a/e2e/src/api/specs/maintenance.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/maintenance.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, utils } from 'src/utils'; +import { createUserDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/map.e2e-spec.ts b/e2e/src/e2e/api/specs/map.e2e-spec.ts similarity index 98% rename from e2e/src/api/specs/map.e2e-spec.ts rename to e2e/src/e2e/api/specs/map.e2e-spec.ts index 977638aa24..3b2ea79271 100644 --- a/e2e/src/api/specs/map.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/map.e2e-spec.ts @@ -2,8 +2,8 @@ import { AssetVisibility, LoginResponseDto } from '@immich/sdk'; import { readFile } from 'node:fs/promises'; import { basename, join } from 'node:path'; import { Socket } from 'socket.io-client'; -import { errorDto } from 'src/responses'; -import { app, testAssetDir, utils } from 'src/utils'; +import { errorDto } from 'src/e2e/responses'; +import { app, testAssetDir, utils } from 'src/e2e/utils'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/memory.e2e-spec.ts b/e2e/src/e2e/api/specs/memory.e2e-spec.ts similarity index 97% rename from e2e/src/api/specs/memory.e2e-spec.ts rename to e2e/src/e2e/api/specs/memory.e2e-spec.ts index e5e2351738..3053b720d4 100644 --- a/e2e/src/api/specs/memory.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/memory.e2e-spec.ts @@ -6,9 +6,9 @@ import { createMemory, getMemory, } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/oauth.e2e-spec.ts b/e2e/src/e2e/api/specs/oauth.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/oauth.e2e-spec.ts rename to e2e/src/e2e/api/specs/oauth.e2e-spec.ts index cbd68c003a..9fae9c63d5 100644 --- a/e2e/src/api/specs/oauth.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/oauth.e2e-spec.ts @@ -8,8 +8,8 @@ import { updateConfig, } from '@immich/sdk'; import { createHash, randomBytes } from 'node:crypto'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, baseUrl, utils } from 'src/utils'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, baseUrl, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/partner.e2e-spec.ts b/e2e/src/e2e/api/specs/partner.e2e-spec.ts similarity index 96% rename from e2e/src/api/specs/partner.e2e-spec.ts rename to e2e/src/e2e/api/specs/partner.e2e-spec.ts index 9047a97055..50a7251692 100644 --- a/e2e/src/api/specs/partner.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/partner.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, createPartner } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/person.e2e-spec.ts b/e2e/src/e2e/api/specs/person.e2e-spec.ts similarity index 98% rename from e2e/src/api/specs/person.e2e-spec.ts rename to e2e/src/e2e/api/specs/person.e2e-spec.ts index 20290cd941..d65049ed02 100644 --- a/e2e/src/api/specs/person.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/person.e2e-spec.ts @@ -1,7 +1,7 @@ import { getPerson, LoginResponseDto, PersonResponseDto } from '@immich/sdk'; -import { uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { uuidDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/search.e2e-spec.ts b/e2e/src/e2e/api/specs/search.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/search.e2e-spec.ts rename to e2e/src/e2e/api/specs/search.e2e-spec.ts index 2f6ea75f77..0f599e4d85 100644 --- a/e2e/src/api/specs/search.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/search.e2e-spec.ts @@ -10,7 +10,7 @@ import { DateTime } from 'luxon'; import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import { Socket } from 'socket.io-client'; -import { app, asBearerAuth, TEN_TIMES, testAssetDir, utils } from 'src/utils'; +import { app, asBearerAuth, TEN_TIMES, testAssetDir, utils } from 'src/e2e/utils'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; const today = DateTime.now(); diff --git a/e2e/src/api/specs/server.e2e-spec.ts b/e2e/src/e2e/api/specs/server.e2e-spec.ts similarity index 98% rename from e2e/src/api/specs/server.e2e-spec.ts rename to e2e/src/e2e/api/specs/server.e2e-spec.ts index 3dd6f15e71..d130531280 100644 --- a/e2e/src/api/specs/server.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/server.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, utils } from 'src/utils'; +import { createUserDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/session.e2e-spec.ts b/e2e/src/e2e/api/specs/session.e2e-spec.ts similarity index 93% rename from e2e/src/api/specs/session.e2e-spec.ts rename to e2e/src/e2e/api/specs/session.e2e-spec.ts index 0b632f78ba..8f6ff2474b 100644 --- a/e2e/src/api/specs/session.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/session.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, getSessions, login, signUpAdmin } from '@immich/sdk'; -import { loginDto, signupDto, uuidDto } from 'src/fixtures'; -import { deviceDto, errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { loginDto, signupDto, uuidDto } from 'src/e2e/fixtures'; +import { deviceDto, errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/shared-link.e2e-spec.ts b/e2e/src/e2e/api/specs/shared-link.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/shared-link.e2e-spec.ts rename to e2e/src/e2e/api/specs/shared-link.e2e-spec.ts index 8c15a14da5..d4dbc07bd3 100644 --- a/e2e/src/api/specs/shared-link.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/shared-link.e2e-spec.ts @@ -7,9 +7,9 @@ import { createAlbum, deleteUserAdmin, } from '@immich/sdk'; -import { createUserDto, uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, baseUrl, shareUrl, utils } from 'src/utils'; +import { createUserDto, uuidDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, baseUrl, shareUrl, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/stack.e2e-spec.ts b/e2e/src/e2e/api/specs/stack.e2e-spec.ts similarity index 97% rename from e2e/src/api/specs/stack.e2e-spec.ts rename to e2e/src/e2e/api/specs/stack.e2e-spec.ts index 91dd0d2a8e..9cc05e9315 100644 --- a/e2e/src/api/specs/stack.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/stack.e2e-spec.ts @@ -1,7 +1,7 @@ import { AssetMediaResponseDto, LoginResponseDto, searchStacks } from '@immich/sdk'; -import { createUserDto, uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto, uuidDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/system-config.e2e-spec.ts b/e2e/src/e2e/api/specs/system-config.e2e-spec.ts similarity index 94% rename from e2e/src/api/specs/system-config.e2e-spec.ts rename to e2e/src/e2e/api/specs/system-config.e2e-spec.ts index 1bd7bdc489..3eb594e417 100644 --- a/e2e/src/api/specs/system-config.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/system-config.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto, getConfig } from '@immich/sdk'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/system-metadata.e2e-spec.ts b/e2e/src/e2e/api/specs/system-metadata.e2e-spec.ts similarity index 94% rename from e2e/src/api/specs/system-metadata.e2e-spec.ts rename to e2e/src/e2e/api/specs/system-metadata.e2e-spec.ts index bd17bf2524..310fbc06bf 100644 --- a/e2e/src/api/specs/system-metadata.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/system-metadata.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, getServerConfig } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, utils } from 'src/utils'; +import { createUserDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/tag.e2e-spec.ts b/e2e/src/e2e/api/specs/tag.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/tag.e2e-spec.ts rename to e2e/src/e2e/api/specs/tag.e2e-spec.ts index d69536f3a3..e044ade54e 100644 --- a/e2e/src/api/specs/tag.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/tag.e2e-spec.ts @@ -9,9 +9,9 @@ import { tagAssets, upsertTags, } from '@immich/sdk'; -import { createUserDto, uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto, uuidDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/trash.e2e-spec.ts b/e2e/src/e2e/api/specs/trash.e2e-spec.ts similarity index 99% rename from e2e/src/api/specs/trash.e2e-spec.ts rename to e2e/src/e2e/api/specs/trash.e2e-spec.ts index 7a1a61f946..2976536e42 100644 --- a/e2e/src/api/specs/trash.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/trash.e2e-spec.ts @@ -1,8 +1,8 @@ import { LoginResponseDto, getAssetInfo, getAssetStatistics } from '@immich/sdk'; import { existsSync } from 'node:fs'; import { Socket } from 'socket.io-client'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, testAssetDir, testAssetDirInternal, utils } from 'src/utils'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, testAssetDir, testAssetDirInternal, utils } from 'src/e2e/utils'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/user-admin.e2e-spec.ts b/e2e/src/e2e/api/specs/user-admin.e2e-spec.ts similarity index 98% rename from e2e/src/api/specs/user-admin.e2e-spec.ts rename to e2e/src/e2e/api/specs/user-admin.e2e-spec.ts index 793c508a36..65da3eefdc 100644 --- a/e2e/src/api/specs/user-admin.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/user-admin.e2e-spec.ts @@ -9,9 +9,9 @@ import { login, } from '@immich/sdk'; import { Socket } from 'socket.io-client'; -import { createUserDto, uuidDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto, uuidDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/api/specs/user.e2e-spec.ts b/e2e/src/e2e/api/specs/user.e2e-spec.ts similarity index 98% rename from e2e/src/api/specs/user.e2e-spec.ts rename to e2e/src/e2e/api/specs/user.e2e-spec.ts index 3f280dddf5..863fb17e62 100644 --- a/e2e/src/api/specs/user.e2e-spec.ts +++ b/e2e/src/e2e/api/specs/user.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, SharedLinkType, deleteUserAdmin, getMyPreferences, getMyUser, login } from '@immich/sdk'; -import { createUserDto } from 'src/fixtures'; -import { errorDto } from 'src/responses'; -import { app, asBearerAuth, utils } from 'src/utils'; +import { createUserDto } from 'src/e2e/fixtures'; +import { errorDto } from 'src/e2e/responses'; +import { app, asBearerAuth, utils } from 'src/e2e/utils'; import request from 'supertest'; import { beforeAll, describe, expect, it } from 'vitest'; diff --git a/e2e/src/cli/specs/login.e2e-spec.ts b/e2e/src/e2e/cli/specs/login.e2e-spec.ts similarity index 97% rename from e2e/src/cli/specs/login.e2e-spec.ts rename to e2e/src/e2e/cli/specs/login.e2e-spec.ts index 3bc3ebc9c2..f05e426244 100644 --- a/e2e/src/cli/specs/login.e2e-spec.ts +++ b/e2e/src/e2e/cli/specs/login.e2e-spec.ts @@ -1,6 +1,6 @@ import { Permission } from '@immich/sdk'; import { stat } from 'node:fs/promises'; -import { app, immichCli, utils } from 'src/utils'; +import { app, immichCli, utils } from 'src/e2e/utils'; import { beforeEach, describe, expect, it } from 'vitest'; describe(`immich login`, () => { diff --git a/e2e/src/cli/specs/server-info.e2e-spec.ts b/e2e/src/e2e/cli/specs/server-info.e2e-spec.ts similarity index 94% rename from e2e/src/cli/specs/server-info.e2e-spec.ts rename to e2e/src/e2e/cli/specs/server-info.e2e-spec.ts index 96c45c8cc0..2df8907d8d 100644 --- a/e2e/src/cli/specs/server-info.e2e-spec.ts +++ b/e2e/src/e2e/cli/specs/server-info.e2e-spec.ts @@ -1,4 +1,4 @@ -import { immichCli, utils } from 'src/utils'; +import { immichCli, utils } from 'src/e2e/utils'; import { beforeAll, describe, expect, it } from 'vitest'; describe(`immich server-info`, () => { diff --git a/e2e/src/cli/specs/upload.e2e-spec.ts b/e2e/src/e2e/cli/specs/upload.e2e-spec.ts similarity index 99% rename from e2e/src/cli/specs/upload.e2e-spec.ts rename to e2e/src/e2e/cli/specs/upload.e2e-spec.ts index b53b4403f8..527d4337f4 100644 --- a/e2e/src/cli/specs/upload.e2e-spec.ts +++ b/e2e/src/e2e/cli/specs/upload.e2e-spec.ts @@ -1,7 +1,7 @@ import { LoginResponseDto, getAllAlbums, getAssetStatistics } from '@immich/sdk'; import { cpSync, readFileSync } from 'node:fs'; import { mkdir, readdir, rm, symlink } from 'node:fs/promises'; -import { asKeyAuth, immichCli, specialCharStrings, testAssetDir, utils } from 'src/utils'; +import { asKeyAuth, immichCli, specialCharStrings, testAssetDir, utils } from 'src/e2e/utils'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; interface Test { diff --git a/e2e/src/cli/specs/version.e2e-spec.ts b/e2e/src/e2e/cli/specs/version.e2e-spec.ts similarity index 94% rename from e2e/src/cli/specs/version.e2e-spec.ts rename to e2e/src/e2e/cli/specs/version.e2e-spec.ts index 56a0d8b0b1..ffb245316b 100644 --- a/e2e/src/cli/specs/version.e2e-spec.ts +++ b/e2e/src/e2e/cli/specs/version.e2e-spec.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'node:fs'; -import { immichCli } from 'src/utils'; +import { immichCli } from 'src/e2e/utils'; import { describe, expect, it } from 'vitest'; const pkg = JSON.parse(readFileSync('../cli/package.json', 'utf8')); diff --git a/e2e/src/fixtures.ts b/e2e/src/e2e/fixtures.ts similarity index 100% rename from e2e/src/fixtures.ts rename to e2e/src/e2e/fixtures.ts diff --git a/e2e/src/generators.ts b/e2e/src/e2e/generators.ts similarity index 100% rename from e2e/src/generators.ts rename to e2e/src/e2e/generators.ts diff --git a/e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts b/e2e/src/e2e/immich-admin/specs/immich-admin.e2e-spec.ts similarity index 97% rename from e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts rename to e2e/src/e2e/immich-admin/specs/immich-admin.e2e-spec.ts index 24699cda30..e0c0ad0f90 100644 --- a/e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts +++ b/e2e/src/e2e/immich-admin/specs/immich-admin.e2e-spec.ts @@ -1,4 +1,4 @@ -import { immichAdmin, utils } from 'src/utils'; +import { immichAdmin, utils } from 'src/e2e/utils'; import { beforeAll, describe, expect, it } from 'vitest'; describe(`immich-admin`, () => { diff --git a/e2e/src/responses.ts b/e2e/src/e2e/responses.ts similarity index 100% rename from e2e/src/responses.ts rename to e2e/src/e2e/responses.ts diff --git a/e2e/src/setup/docker-compose.ts b/e2e/src/e2e/setup/docker-compose.ts similarity index 100% rename from e2e/src/setup/docker-compose.ts rename to e2e/src/e2e/setup/docker-compose.ts diff --git a/e2e/src/utils.ts b/e2e/src/e2e/utils.ts similarity index 98% rename from e2e/src/utils.ts rename to e2e/src/e2e/utils.ts index 7307f87854..62b12647f3 100644 --- a/e2e/src/utils.ts +++ b/e2e/src/e2e/utils.ts @@ -68,10 +68,10 @@ import { promisify } from 'node:util'; import { createGzip } from 'node:zlib'; import pg from 'pg'; import { io, type Socket } from 'socket.io-client'; -import { loginDto, signupDto } from 'src/fixtures'; -import { makeRandomImage } from 'src/generators'; +import { loginDto, signupDto } from 'src/e2e/fixtures'; +import { makeRandomImage } from 'src/e2e/generators'; import request from 'supertest'; -import { playwrightDbHost, playwrightHost, playwriteBaseUrl } from '../playwright.config'; +import { playwrightDbHost, playwrightHost, playwriteBaseUrl } from '../../playwright.config'; export type { Emitter } from '@socket.io/component-emitter'; @@ -86,7 +86,7 @@ export const baseUrl = playwriteBaseUrl; export const shareUrl = `${baseUrl}/share`; export const app = `${baseUrl}/api`; // TODO move test assets into e2e/assets -export const testAssetDir = resolve(import.meta.dirname, '../test-assets'); +export const testAssetDir = resolve(import.meta.dirname, '../../test-assets'); export const testAssetDirInternal = '/test-assets'; export const tempDir = tmpdir(); export const asBearerAuth = (accessToken: string) => ({ Authorization: `Bearer ${accessToken}` }); diff --git a/e2e/src/web/specs/album.e2e-spec.ts b/e2e/src/e2e/web/specs/album.e2e-spec.ts similarity index 95% rename from e2e/src/web/specs/album.e2e-spec.ts rename to e2e/src/e2e/web/specs/album.e2e-spec.ts index 953c7d00ae..4f46eaf244 100644 --- a/e2e/src/web/specs/album.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/album.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; import { test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; test.describe('Album', () => { let admin: LoginResponseDto; diff --git a/e2e/src/web/specs/asset-viewer/detail-panel.e2e-spec.ts b/e2e/src/e2e/web/specs/asset-viewer/detail-panel.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/asset-viewer/detail-panel.e2e-spec.ts rename to e2e/src/e2e/web/specs/asset-viewer/detail-panel.e2e-spec.ts index 2f90e4e3d8..b73dac33ef 100644 --- a/e2e/src/web/specs/asset-viewer/detail-panel.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/asset-viewer/detail-panel.e2e-spec.ts @@ -1,7 +1,7 @@ import { AssetMediaResponseDto, LoginResponseDto, SharedLinkType } from '@immich/sdk'; import { expect, test } from '@playwright/test'; import type { Socket } from 'socket.io-client'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; test.describe('Detail Panel', () => { let admin: LoginResponseDto; diff --git a/e2e/src/web/specs/asset-viewer/navbar.e2e-spec.ts b/e2e/src/e2e/web/specs/asset-viewer/navbar.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/asset-viewer/navbar.e2e-spec.ts rename to e2e/src/e2e/web/specs/asset-viewer/navbar.e2e-spec.ts index 8fcd1bbdb4..42ffa2ab8e 100644 --- a/e2e/src/web/specs/asset-viewer/navbar.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/asset-viewer/navbar.e2e-spec.ts @@ -1,6 +1,6 @@ import { AssetMediaResponseDto, LoginResponseDto, SharedLinkType } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; test.describe('Asset Viewer Navbar', () => { let admin: LoginResponseDto; diff --git a/e2e/src/web/specs/asset-viewer/slideshow.e2e-spec.ts b/e2e/src/e2e/web/specs/asset-viewer/slideshow.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/asset-viewer/slideshow.e2e-spec.ts rename to e2e/src/e2e/web/specs/asset-viewer/slideshow.e2e-spec.ts index c8cbc21588..e8cb8aa217 100644 --- a/e2e/src/web/specs/asset-viewer/slideshow.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/asset-viewer/slideshow.e2e-spec.ts @@ -1,6 +1,6 @@ import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk'; import { expect, type Page, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; test.describe('Slideshow', () => { let admin: LoginResponseDto; diff --git a/e2e/src/web/specs/asset-viewer/stack.e2e-spec.ts b/e2e/src/e2e/web/specs/asset-viewer/stack.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/asset-viewer/stack.e2e-spec.ts rename to e2e/src/e2e/web/specs/asset-viewer/stack.e2e-spec.ts index cb40f82c0a..51ef593abf 100644 --- a/e2e/src/web/specs/asset-viewer/stack.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/asset-viewer/stack.e2e-spec.ts @@ -1,6 +1,6 @@ import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk'; import { expect, Page, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; async function ensureDetailPanelVisible(page: Page) { await page.waitForSelector('#immich-asset-viewer'); diff --git a/e2e/src/web/specs/auth.e2e-spec.ts b/e2e/src/e2e/web/specs/auth.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/auth.e2e-spec.ts rename to e2e/src/e2e/web/specs/auth.e2e-spec.ts index a14a177917..b967575b23 100644 --- a/e2e/src/web/specs/auth.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/auth.e2e-spec.ts @@ -1,5 +1,5 @@ import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; test.describe('Registration', () => { test.beforeAll(() => { diff --git a/e2e/src/web/specs/photo-viewer.e2e-spec.ts b/e2e/src/e2e/web/specs/photo-viewer.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/photo-viewer.e2e-spec.ts rename to e2e/src/e2e/web/specs/photo-viewer.e2e-spec.ts index 3f9bb4237a..be562ffddc 100644 --- a/e2e/src/web/specs/photo-viewer.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/photo-viewer.e2e-spec.ts @@ -1,6 +1,6 @@ import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk'; import { Page, expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; function imageLocator(page: Page) { return page.getByAltText('Image taken').locator('visible=true'); diff --git a/e2e/src/web/specs/shared-link.e2e-spec.ts b/e2e/src/e2e/web/specs/shared-link.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/shared-link.e2e-spec.ts rename to e2e/src/e2e/web/specs/shared-link.e2e-spec.ts index 017bc0fcb2..8d52d010d4 100644 --- a/e2e/src/web/specs/shared-link.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/shared-link.e2e-spec.ts @@ -7,7 +7,7 @@ import { createAlbum, } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { asBearerAuth, utils } from 'src/utils'; +import { asBearerAuth, utils } from 'src/e2e/utils'; test.describe('Shared Links', () => { let admin: LoginResponseDto; diff --git a/e2e/src/web/specs/user-admin.e2e-spec.ts b/e2e/src/e2e/web/specs/user-admin.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/user-admin.e2e-spec.ts rename to e2e/src/e2e/web/specs/user-admin.e2e-spec.ts index 67a537ba9d..e16d42e912 100644 --- a/e2e/src/web/specs/user-admin.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/user-admin.e2e-spec.ts @@ -1,6 +1,6 @@ import { getUserAdmin } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { asBearerAuth, utils } from 'src/utils'; +import { asBearerAuth, utils } from 'src/e2e/utils'; test.describe('User Administration', () => { test.beforeAll(() => { diff --git a/e2e/src/web/specs/websocket.e2e-spec.ts b/e2e/src/e2e/web/specs/websocket.e2e-spec.ts similarity index 95% rename from e2e/src/web/specs/websocket.e2e-spec.ts rename to e2e/src/e2e/web/specs/websocket.e2e-spec.ts index a929c6467f..67deef17c8 100644 --- a/e2e/src/web/specs/websocket.e2e-spec.ts +++ b/e2e/src/e2e/web/specs/websocket.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; test.describe('Websocket', () => { let admin: LoginResponseDto; diff --git a/e2e/src/web/specs/database-backups.e2e-spec.ts b/e2e/src/maintenance-tests/web/specs/database-backups.e2e-spec.ts similarity index 99% rename from e2e/src/web/specs/database-backups.e2e-spec.ts rename to e2e/src/maintenance-tests/web/specs/database-backups.e2e-spec.ts index d101215ceb..da0dac2af2 100644 --- a/e2e/src/web/specs/database-backups.e2e-spec.ts +++ b/e2e/src/maintenance-tests/web/specs/database-backups.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; test.describe.configure({ mode: 'serial' }); diff --git a/e2e/src/web/specs/maintenance.e2e-spec.ts b/e2e/src/maintenance-tests/web/specs/maintenance.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/maintenance.e2e-spec.ts rename to e2e/src/maintenance-tests/web/specs/maintenance.e2e-spec.ts index 8b1631f0bf..de17cdfc02 100644 --- a/e2e/src/web/specs/maintenance.e2e-spec.ts +++ b/e2e/src/maintenance-tests/web/specs/maintenance.e2e-spec.ts @@ -1,6 +1,6 @@ import { LoginResponseDto } from '@immich/sdk'; import { expect, test } from '@playwright/test'; -import { utils } from 'src/utils'; +import { utils } from 'src/e2e/utils'; test.describe.configure({ mode: 'serial' }); diff --git a/e2e/src/generators/memory.ts b/e2e/src/ui-tests/generators/memory.ts similarity index 100% rename from e2e/src/generators/memory.ts rename to e2e/src/ui-tests/generators/memory.ts diff --git a/e2e/src/generators/memory/model-objects.ts b/e2e/src/ui-tests/generators/memory/model-objects.ts similarity index 88% rename from e2e/src/generators/memory/model-objects.ts rename to e2e/src/ui-tests/generators/memory/model-objects.ts index 1bcc703ed8..6579fe213c 100644 --- a/e2e/src/generators/memory/model-objects.ts +++ b/e2e/src/ui-tests/generators/memory/model-objects.ts @@ -1,9 +1,9 @@ import { faker } from '@faker-js/faker'; import { MemoryType, type MemoryResponseDto, type OnThisDayDto } from '@immich/sdk'; import { DateTime } from 'luxon'; -import { toAssetResponseDto } from 'src/generators/timeline/rest-response'; -import type { MockTimelineAsset } from 'src/generators/timeline/timeline-config'; -import { SeededRandom, selectRandomMultiple } from 'src/generators/timeline/utils'; +import { toAssetResponseDto } from 'src/ui-tests/generators/timeline/rest-response'; +import type { MockTimelineAsset } from 'src/ui-tests/generators/timeline/timeline-config'; +import { SeededRandom, selectRandomMultiple } from 'src/ui-tests/generators/timeline/utils'; export type MemoryConfig = { id?: string; diff --git a/e2e/src/generators/timeline.ts b/e2e/src/ui-tests/generators/timeline.ts similarity index 100% rename from e2e/src/generators/timeline.ts rename to e2e/src/ui-tests/generators/timeline.ts diff --git a/e2e/src/generators/timeline/distribution-patterns.ts b/e2e/src/ui-tests/generators/timeline/distribution-patterns.ts similarity index 98% rename from e2e/src/generators/timeline/distribution-patterns.ts rename to e2e/src/ui-tests/generators/timeline/distribution-patterns.ts index ae621fd9c5..c5fcb6072c 100644 --- a/e2e/src/generators/timeline/distribution-patterns.ts +++ b/e2e/src/ui-tests/generators/timeline/distribution-patterns.ts @@ -1,5 +1,5 @@ -import { generateConsecutiveDays, generateDayAssets } from 'src/generators/timeline/model-objects'; -import { SeededRandom, selectRandomDays } from 'src/generators/timeline/utils'; +import { generateConsecutiveDays, generateDayAssets } from 'src/ui-tests/generators/timeline/model-objects'; +import { SeededRandom, selectRandomDays } from 'src/ui-tests/generators/timeline/utils'; import type { MockTimelineAsset } from './timeline-config'; import { GENERATION_CONSTANTS } from './timeline-config'; diff --git a/e2e/src/generators/timeline/images.ts b/e2e/src/ui-tests/generators/timeline/images.ts similarity index 98% rename from e2e/src/generators/timeline/images.ts rename to e2e/src/ui-tests/generators/timeline/images.ts index 69ec576714..95da2f5df8 100644 --- a/e2e/src/generators/timeline/images.ts +++ b/e2e/src/ui-tests/generators/timeline/images.ts @@ -1,5 +1,5 @@ import sharp from 'sharp'; -import { SeededRandom } from 'src/generators/timeline/utils'; +import { SeededRandom } from 'src/ui-tests/generators/timeline/utils'; export const randomThumbnail = async (seed: string, ratio: number) => { const height = 235; diff --git a/e2e/src/generators/timeline/model-objects.ts b/e2e/src/ui-tests/generators/timeline/model-objects.ts similarity index 99% rename from e2e/src/generators/timeline/model-objects.ts rename to e2e/src/ui-tests/generators/timeline/model-objects.ts index f06596fd1a..9867087308 100644 --- a/e2e/src/generators/timeline/model-objects.ts +++ b/e2e/src/ui-tests/generators/timeline/model-objects.ts @@ -6,7 +6,7 @@ import { faker } from '@faker-js/faker'; import { AssetVisibility } from '@immich/sdk'; import { DateTime } from 'luxon'; import { writeFileSync } from 'node:fs'; -import { SeededRandom } from 'src/generators/timeline/utils'; +import { SeededRandom } from 'src/ui-tests/generators/timeline/utils'; import type { DayPattern, MonthDistribution } from './distribution-patterns'; import { ASSET_DISTRIBUTION, DAY_DISTRIBUTION } from './distribution-patterns'; import type { MockTimelineAsset, MockTimelineData, SerializedTimelineData, TimelineConfig } from './timeline-config'; diff --git a/e2e/src/generators/timeline/rest-response.ts b/e2e/src/ui-tests/generators/timeline/rest-response.ts similarity index 99% rename from e2e/src/generators/timeline/rest-response.ts rename to e2e/src/ui-tests/generators/timeline/rest-response.ts index a193535cd3..9b0bd04531 100644 --- a/e2e/src/generators/timeline/rest-response.ts +++ b/e2e/src/ui-tests/generators/timeline/rest-response.ts @@ -14,8 +14,8 @@ import { type UserResponseDto, } from '@immich/sdk'; import { DateTime } from 'luxon'; -import { signupDto } from 'src/fixtures'; -import { parseTimeBucketKey } from 'src/generators/timeline/utils'; +import { signupDto } from 'src/e2e/fixtures'; +import { parseTimeBucketKey } from 'src/ui-tests/generators/timeline/utils'; import type { MockTimelineAsset, MockTimelineData } from './timeline-config'; /** diff --git a/e2e/src/generators/timeline/timeline-config.ts b/e2e/src/ui-tests/generators/timeline/timeline-config.ts similarity index 98% rename from e2e/src/generators/timeline/timeline-config.ts rename to e2e/src/ui-tests/generators/timeline/timeline-config.ts index 8dbe8399b1..0ba990e420 100644 --- a/e2e/src/generators/timeline/timeline-config.ts +++ b/e2e/src/ui-tests/generators/timeline/timeline-config.ts @@ -1,5 +1,5 @@ import type { AssetVisibility } from '@immich/sdk'; -import { DayPattern, MonthDistribution } from 'src/generators/timeline/distribution-patterns'; +import { DayPattern, MonthDistribution } from 'src/ui-tests/generators/timeline/distribution-patterns'; // Constants for generation parameters export const GENERATION_CONSTANTS = { diff --git a/e2e/src/generators/timeline/utils.ts b/e2e/src/ui-tests/generators/timeline/utils.ts similarity index 97% rename from e2e/src/generators/timeline/utils.ts rename to e2e/src/ui-tests/generators/timeline/utils.ts index 686a8223ef..10eb946e06 100644 --- a/e2e/src/generators/timeline/utils.ts +++ b/e2e/src/ui-tests/generators/timeline/utils.ts @@ -1,5 +1,5 @@ import { DateTime } from 'luxon'; -import { GENERATION_CONSTANTS, MockTimelineAsset } from 'src/generators/timeline/timeline-config'; +import { GENERATION_CONSTANTS, MockTimelineAsset } from 'src/ui-tests/generators/timeline/timeline-config'; /** * Linear Congruential Generator for deterministic pseudo-random numbers diff --git a/e2e/src/mock-network/base-network.ts b/e2e/src/ui-tests/mock-network/base-network.ts similarity index 100% rename from e2e/src/mock-network/base-network.ts rename to e2e/src/ui-tests/mock-network/base-network.ts diff --git a/e2e/src/mock-network/memory-network.ts b/e2e/src/ui-tests/mock-network/memory-network.ts similarity index 100% rename from e2e/src/mock-network/memory-network.ts rename to e2e/src/ui-tests/mock-network/memory-network.ts diff --git a/e2e/src/mock-network/timeline-network.ts b/e2e/src/ui-tests/mock-network/timeline-network.ts similarity index 98% rename from e2e/src/mock-network/timeline-network.ts rename to e2e/src/ui-tests/mock-network/timeline-network.ts index 8780409657..8494d51637 100644 --- a/e2e/src/mock-network/timeline-network.ts +++ b/e2e/src/ui-tests/mock-network/timeline-network.ts @@ -10,8 +10,8 @@ import { randomPreview, randomThumbnail, TimelineData, -} from 'src/generators/timeline'; -import { sleep } from 'src/web/specs/timeline/utils'; +} from 'src/ui-tests/generators/timeline'; +import { sleep } from 'src/ui-tests/web/specs/timeline/utils'; export class TimelineTestContext { slowBucket = false; diff --git a/e2e/src/web/specs/asset-viewer/asset-viewer.ui-spec.ts b/e2e/src/ui-tests/web/specs/asset-viewer/asset-viewer.e2e-spec.ts similarity index 97% rename from e2e/src/web/specs/asset-viewer/asset-viewer.ui-spec.ts rename to e2e/src/ui-tests/web/specs/asset-viewer/asset-viewer.e2e-spec.ts index 669f1b815c..301c825b62 100644 --- a/e2e/src/web/specs/asset-viewer/asset-viewer.ui-spec.ts +++ b/e2e/src/ui-tests/web/specs/asset-viewer/asset-viewer.e2e-spec.ts @@ -1,5 +1,6 @@ import { faker } from '@faker-js/faker'; import { expect, test } from '@playwright/test'; +import { utils } from 'src/e2e/utils'; import { Changes, createDefaultTimelineConfig, @@ -8,11 +9,10 @@ import { selectRandom, TimelineAssetConfig, TimelineData, -} from 'src/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/mock-network/base-network'; -import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/mock-network/timeline-network'; -import { utils } from 'src/utils'; -import { assetViewerUtils } from 'src/web/specs/timeline/utils'; +} from 'src/ui-tests/generators/timeline'; +import { setupBaseMockApiRoutes } from 'src/ui-tests/mock-network/base-network'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui-tests/mock-network/timeline-network'; +import { assetViewerUtils } from '../timeline/utils'; test.describe.configure({ mode: 'parallel' }); test.describe('asset-viewer', () => { diff --git a/e2e/src/web/specs/memory/memory-viewer.ui-spec.ts b/e2e/src/ui-tests/web/specs/memory/memory-viewer.e2e-spec.ts similarity index 96% rename from e2e/src/web/specs/memory/memory-viewer.ui-spec.ts rename to e2e/src/ui-tests/web/specs/memory/memory-viewer.e2e-spec.ts index 11e73fbe25..74951db519 100644 --- a/e2e/src/web/specs/memory/memory-viewer.ui-spec.ts +++ b/e2e/src/ui-tests/web/specs/memory/memory-viewer.e2e-spec.ts @@ -1,18 +1,18 @@ import { faker } from '@faker-js/faker'; import type { MemoryResponseDto } from '@immich/sdk'; import { test } from '@playwright/test'; -import { generateMemoriesFromTimeline } from 'src/generators/memory'; +import { generateMemoriesFromTimeline } from 'src/ui-tests/generators/memory'; import { Changes, createDefaultTimelineConfig, generateTimelineData, TimelineAssetConfig, TimelineData, -} from 'src/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/mock-network/base-network'; -import { MemoryChanges, setupMemoryMockApiRoutes } from 'src/mock-network/memory-network'; -import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/mock-network/timeline-network'; -import { memoryAssetViewerUtils, memoryGalleryUtils, memoryViewerUtils } from 'src/web/specs/memory/utils'; +} from 'src/ui-tests/generators/timeline'; +import { setupBaseMockApiRoutes } from 'src/ui-tests/mock-network/base-network'; +import { MemoryChanges, setupMemoryMockApiRoutes } from 'src/ui-tests/mock-network/memory-network'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui-tests/mock-network/timeline-network'; +import { memoryAssetViewerUtils, memoryGalleryUtils, memoryViewerUtils } from './utils'; test.describe.configure({ mode: 'parallel' }); diff --git a/e2e/src/web/specs/memory/utils.ts b/e2e/src/ui-tests/web/specs/memory/utils.ts similarity index 100% rename from e2e/src/web/specs/memory/utils.ts rename to e2e/src/ui-tests/web/specs/memory/utils.ts diff --git a/e2e/src/web/specs/search/search-gallery.ui-spec.ts b/e2e/src/ui-tests/web/specs/search/search-gallery.e2e-spec.ts similarity index 94% rename from e2e/src/web/specs/search/search-gallery.ui-spec.ts rename to e2e/src/ui-tests/web/specs/search/search-gallery.e2e-spec.ts index e358bed154..7e58f8d1ca 100644 --- a/e2e/src/web/specs/search/search-gallery.ui-spec.ts +++ b/e2e/src/ui-tests/web/specs/search/search-gallery.e2e-spec.ts @@ -6,10 +6,10 @@ import { generateTimelineData, TimelineAssetConfig, TimelineData, -} from 'src/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/mock-network/base-network'; -import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/mock-network/timeline-network'; -import { assetViewerUtils } from 'src/web/specs/timeline/utils'; +} from 'src/ui-tests/generators/timeline'; +import { setupBaseMockApiRoutes } from 'src/ui-tests/mock-network/base-network'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui-tests/mock-network/timeline-network'; +import { assetViewerUtils } from '../timeline/utils'; const buildSearchUrl = (assetId: string) => { const searchQuery = encodeURIComponent(JSON.stringify({ originalFileName: 'test' })); diff --git a/e2e/src/web/specs/timeline/timeline.ui-spec.ts b/e2e/src/ui-tests/web/specs/timeline/timeline.e2e-spec.ts similarity index 99% rename from e2e/src/web/specs/timeline/timeline.ui-spec.ts rename to e2e/src/ui-tests/web/specs/timeline/timeline.e2e-spec.ts index 47026e2cd4..cd9b3acef5 100644 --- a/e2e/src/web/specs/timeline/timeline.ui-spec.ts +++ b/e2e/src/ui-tests/web/specs/timeline/timeline.e2e-spec.ts @@ -1,6 +1,7 @@ import { faker } from '@faker-js/faker'; import { expect, test } from '@playwright/test'; import { DateTime } from 'luxon'; +import { utils } from 'src/e2e/utils'; import { Changes, createDefaultTimelineConfig, @@ -12,18 +13,14 @@ import { selectRandomMultiple, TimelineAssetConfig, TimelineData, -} from 'src/generators/timeline'; -import { setupBaseMockApiRoutes } from 'src/mock-network/base-network'; -import { pageRoutePromise, setupTimelineMockApiRoutes, TimelineTestContext } from 'src/mock-network/timeline-network'; -import { utils } from 'src/utils'; +} from 'src/ui-tests/generators/timeline'; +import { setupBaseMockApiRoutes } from 'src/ui-tests/mock-network/base-network'; import { - assetViewerUtils, - padYearMonth, - pageUtils, - poll, - thumbnailUtils, - timelineUtils, -} from 'src/web/specs/timeline/utils'; + pageRoutePromise, + setupTimelineMockApiRoutes, + TimelineTestContext, +} from 'src/ui-tests/mock-network/timeline-network'; +import { assetViewerUtils, padYearMonth, pageUtils, poll, thumbnailUtils, timelineUtils } from './utils'; test.describe.configure({ mode: 'parallel' }); test.describe('Timeline', () => { diff --git a/e2e/src/web/specs/timeline/utils.ts b/e2e/src/ui-tests/web/specs/timeline/utils.ts similarity index 99% rename from e2e/src/web/specs/timeline/utils.ts rename to e2e/src/ui-tests/web/specs/timeline/utils.ts index 0f04bf9361..3ededcb703 100644 --- a/e2e/src/web/specs/timeline/utils.ts +++ b/e2e/src/ui-tests/web/specs/timeline/utils.ts @@ -1,6 +1,6 @@ import { BrowserContext, expect, Page } from '@playwright/test'; import { DateTime } from 'luxon'; -import { TimelineAssetConfig } from 'src/generators/timeline'; +import { TimelineAssetConfig } from 'src/ui-tests/generators/timeline'; export const sleep = (ms: number) => { return new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json index 1c7388b6ec..bfad377089 100644 --- a/e2e/tsconfig.json +++ b/e2e/tsconfig.json @@ -15,7 +15,6 @@ "incremental": true, "skipLibCheck": true, "esModuleInterop": true, - "rootDirs": ["src"], "baseUrl": "./" }, "include": ["src/**/*.ts"], diff --git a/e2e/vitest.config.ts b/e2e/vitest.config.ts index 48433eb830..ead6f73f2b 100644 --- a/e2e/vitest.config.ts +++ b/e2e/vitest.config.ts @@ -5,12 +5,12 @@ const globalSetup: string[] = []; try { await fetch('http://127.0.0.1:2285/api/server-info/ping'); } catch { - globalSetup.push('src/setup/docker-compose.ts'); + globalSetup.push('src/e2e/setup/docker-compose.ts'); } export default defineConfig({ test: { - include: ['src/{api,cli,immich-admin}/specs/*.e2e-spec.ts'], + include: ['src/e2e/{api,cli,immich-admin}/specs/*.e2e-spec.ts'], globalSetup, testTimeout: 15_000, pool: 'threads',