diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 28a74ff33f..93efccf2e1 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 - run: npx playwright test --project=chromium + PLAYWRIGHT_DISABLE_WEBSERVER: true + run: npx playwright test --project=web 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 + env: + CI: true + PLAYWRIGHT_DISABLE_WEBSERVER: true + run: npx playwright test --project=maintenance + 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..032e6affbf 100644 --- a/e2e/playwright.config.ts +++ b/e2e/playwright.config.ts @@ -14,7 +14,8 @@ export const playwrightDisableWebserver = process.env.PLAYWRIGHT_DISABLE_WEBSERV process.env.PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS = '1'; const config: PlaywrightTestConfig = { - testDir: './src/web/specs', + testDir: './src/specs/server', + testMatch: /.*\.e2e-spec\.ts/, fullyParallel: false, forbidOnly: !!process.env.CI, retries: process.env.CI ? 4 : 0, @@ -28,54 +29,28 @@ const config: PlaywrightTestConfig = { }, }, - testMatch: /.*\.e2e-spec\.ts/, - workers: process.env.CI ? 4 : Math.round(cpus().length * 0.75), projects: [ { - name: 'chromium', + name: 'web', use: { ...devices['Desktop Chrome'] }, - testMatch: /.*\.e2e-spec\.ts/, + testDir: './src/specs/web', workers: 1, }, { name: 'ui', use: { ...devices['Desktop Chrome'] }, - testMatch: /.*\.ui-spec\.ts/, + testDir: './src/ui/specs', fullyParallel: true, workers: process.env.CI ? 3 : Math.max(1, Math.round(cpus().length * 0.75) - 1), }, - - // { - // name: 'firefox', - // use: { ...devices['Desktop Firefox'] }, - // }, - - // { - // name: 'webkit', - // use: { ...devices['Desktop Safari'] }, - // }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { ...devices['Desktop Edge'], channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - // }, + { + name: 'maintenance', + use: { ...devices['Desktop Chrome'] }, + testDir: './src/specs/maintenance', + workers: 1, + }, ], /* Run your local dev server before starting the tests */ diff --git a/e2e/src/setup/docker-compose.ts b/e2e/src/docker-compose.ts similarity index 100% rename from e2e/src/setup/docker-compose.ts rename to e2e/src/docker-compose.ts diff --git a/e2e/src/web/specs/database-backups.e2e-spec.ts b/e2e/src/specs/maintenance/database-backups.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/database-backups.e2e-spec.ts rename to e2e/src/specs/maintenance/database-backups.e2e-spec.ts diff --git a/e2e/src/web/specs/maintenance.e2e-spec.ts b/e2e/src/specs/maintenance/maintenance.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/maintenance.e2e-spec.ts rename to e2e/src/specs/maintenance/maintenance.e2e-spec.ts diff --git a/e2e/src/api/specs/activity.e2e-spec.ts b/e2e/src/specs/server/api/activity.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/activity.e2e-spec.ts rename to e2e/src/specs/server/api/activity.e2e-spec.ts diff --git a/e2e/src/api/specs/album.e2e-spec.ts b/e2e/src/specs/server/api/album.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/album.e2e-spec.ts rename to e2e/src/specs/server/api/album.e2e-spec.ts diff --git a/e2e/src/api/specs/api-key.e2e-spec.ts b/e2e/src/specs/server/api/api-key.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/api-key.e2e-spec.ts rename to e2e/src/specs/server/api/api-key.e2e-spec.ts diff --git a/e2e/src/api/specs/asset.e2e-spec.ts b/e2e/src/specs/server/api/asset.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/asset.e2e-spec.ts rename to e2e/src/specs/server/api/asset.e2e-spec.ts diff --git a/e2e/src/api/specs/database-backups.e2e-spec.ts b/e2e/src/specs/server/api/database-backups.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/database-backups.e2e-spec.ts rename to e2e/src/specs/server/api/database-backups.e2e-spec.ts diff --git a/e2e/src/api/specs/download.e2e-spec.ts b/e2e/src/specs/server/api/download.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/download.e2e-spec.ts rename to e2e/src/specs/server/api/download.e2e-spec.ts diff --git a/e2e/src/api/specs/jobs.e2e-spec.ts b/e2e/src/specs/server/api/jobs.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/jobs.e2e-spec.ts rename to e2e/src/specs/server/api/jobs.e2e-spec.ts diff --git a/e2e/src/api/specs/library.e2e-spec.ts b/e2e/src/specs/server/api/library.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/library.e2e-spec.ts rename to e2e/src/specs/server/api/library.e2e-spec.ts diff --git a/e2e/src/api/specs/maintenance.e2e-spec.ts b/e2e/src/specs/server/api/maintenance.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/maintenance.e2e-spec.ts rename to e2e/src/specs/server/api/maintenance.e2e-spec.ts diff --git a/e2e/src/api/specs/map.e2e-spec.ts b/e2e/src/specs/server/api/map.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/map.e2e-spec.ts rename to e2e/src/specs/server/api/map.e2e-spec.ts diff --git a/e2e/src/api/specs/memory.e2e-spec.ts b/e2e/src/specs/server/api/memory.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/memory.e2e-spec.ts rename to e2e/src/specs/server/api/memory.e2e-spec.ts diff --git a/e2e/src/api/specs/oauth.e2e-spec.ts b/e2e/src/specs/server/api/oauth.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/oauth.e2e-spec.ts rename to e2e/src/specs/server/api/oauth.e2e-spec.ts diff --git a/e2e/src/api/specs/partner.e2e-spec.ts b/e2e/src/specs/server/api/partner.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/partner.e2e-spec.ts rename to e2e/src/specs/server/api/partner.e2e-spec.ts diff --git a/e2e/src/api/specs/person.e2e-spec.ts b/e2e/src/specs/server/api/person.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/person.e2e-spec.ts rename to e2e/src/specs/server/api/person.e2e-spec.ts diff --git a/e2e/src/api/specs/search.e2e-spec.ts b/e2e/src/specs/server/api/search.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/search.e2e-spec.ts rename to e2e/src/specs/server/api/search.e2e-spec.ts diff --git a/e2e/src/api/specs/server.e2e-spec.ts b/e2e/src/specs/server/api/server.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/server.e2e-spec.ts rename to e2e/src/specs/server/api/server.e2e-spec.ts diff --git a/e2e/src/api/specs/session.e2e-spec.ts b/e2e/src/specs/server/api/session.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/session.e2e-spec.ts rename to e2e/src/specs/server/api/session.e2e-spec.ts diff --git a/e2e/src/api/specs/shared-link.e2e-spec.ts b/e2e/src/specs/server/api/shared-link.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/shared-link.e2e-spec.ts rename to e2e/src/specs/server/api/shared-link.e2e-spec.ts diff --git a/e2e/src/api/specs/stack.e2e-spec.ts b/e2e/src/specs/server/api/stack.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/stack.e2e-spec.ts rename to e2e/src/specs/server/api/stack.e2e-spec.ts diff --git a/e2e/src/api/specs/system-config.e2e-spec.ts b/e2e/src/specs/server/api/system-config.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/system-config.e2e-spec.ts rename to e2e/src/specs/server/api/system-config.e2e-spec.ts diff --git a/e2e/src/api/specs/system-metadata.e2e-spec.ts b/e2e/src/specs/server/api/system-metadata.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/system-metadata.e2e-spec.ts rename to e2e/src/specs/server/api/system-metadata.e2e-spec.ts diff --git a/e2e/src/api/specs/tag.e2e-spec.ts b/e2e/src/specs/server/api/tag.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/tag.e2e-spec.ts rename to e2e/src/specs/server/api/tag.e2e-spec.ts diff --git a/e2e/src/api/specs/trash.e2e-spec.ts b/e2e/src/specs/server/api/trash.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/trash.e2e-spec.ts rename to e2e/src/specs/server/api/trash.e2e-spec.ts diff --git a/e2e/src/api/specs/user-admin.e2e-spec.ts b/e2e/src/specs/server/api/user-admin.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/user-admin.e2e-spec.ts rename to e2e/src/specs/server/api/user-admin.e2e-spec.ts diff --git a/e2e/src/api/specs/user.e2e-spec.ts b/e2e/src/specs/server/api/user.e2e-spec.ts similarity index 100% rename from e2e/src/api/specs/user.e2e-spec.ts rename to e2e/src/specs/server/api/user.e2e-spec.ts diff --git a/e2e/src/cli/specs/login.e2e-spec.ts b/e2e/src/specs/server/cli/login.e2e-spec.ts similarity index 100% rename from e2e/src/cli/specs/login.e2e-spec.ts rename to e2e/src/specs/server/cli/login.e2e-spec.ts diff --git a/e2e/src/cli/specs/server-info.e2e-spec.ts b/e2e/src/specs/server/cli/server-info.e2e-spec.ts similarity index 100% rename from e2e/src/cli/specs/server-info.e2e-spec.ts rename to e2e/src/specs/server/cli/server-info.e2e-spec.ts diff --git a/e2e/src/cli/specs/upload.e2e-spec.ts b/e2e/src/specs/server/cli/upload.e2e-spec.ts similarity index 100% rename from e2e/src/cli/specs/upload.e2e-spec.ts rename to e2e/src/specs/server/cli/upload.e2e-spec.ts diff --git a/e2e/src/cli/specs/version.e2e-spec.ts b/e2e/src/specs/server/cli/version.e2e-spec.ts similarity index 100% rename from e2e/src/cli/specs/version.e2e-spec.ts rename to e2e/src/specs/server/cli/version.e2e-spec.ts diff --git a/e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts b/e2e/src/specs/server/immich-admin/immich-admin.e2e-spec.ts similarity index 100% rename from e2e/src/immich-admin/specs/immich-admin.e2e-spec.ts rename to e2e/src/specs/server/immich-admin/immich-admin.e2e-spec.ts diff --git a/e2e/src/web/specs/album.e2e-spec.ts b/e2e/src/specs/web/album.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/album.e2e-spec.ts rename to e2e/src/specs/web/album.e2e-spec.ts diff --git a/e2e/src/web/specs/asset-viewer/detail-panel.e2e-spec.ts b/e2e/src/specs/web/asset-viewer/detail-panel.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/asset-viewer/detail-panel.e2e-spec.ts rename to e2e/src/specs/web/asset-viewer/detail-panel.e2e-spec.ts diff --git a/e2e/src/web/specs/asset-viewer/navbar.e2e-spec.ts b/e2e/src/specs/web/asset-viewer/navbar.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/asset-viewer/navbar.e2e-spec.ts rename to e2e/src/specs/web/asset-viewer/navbar.e2e-spec.ts diff --git a/e2e/src/web/specs/asset-viewer/slideshow.e2e-spec.ts b/e2e/src/specs/web/asset-viewer/slideshow.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/asset-viewer/slideshow.e2e-spec.ts rename to e2e/src/specs/web/asset-viewer/slideshow.e2e-spec.ts diff --git a/e2e/src/web/specs/asset-viewer/stack.e2e-spec.ts b/e2e/src/specs/web/asset-viewer/stack.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/asset-viewer/stack.e2e-spec.ts rename to e2e/src/specs/web/asset-viewer/stack.e2e-spec.ts diff --git a/e2e/src/web/specs/auth.e2e-spec.ts b/e2e/src/specs/web/auth.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/auth.e2e-spec.ts rename to e2e/src/specs/web/auth.e2e-spec.ts diff --git a/e2e/src/web/specs/photo-viewer.e2e-spec.ts b/e2e/src/specs/web/photo-viewer.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/photo-viewer.e2e-spec.ts rename to e2e/src/specs/web/photo-viewer.e2e-spec.ts diff --git a/e2e/src/web/specs/shared-link.e2e-spec.ts b/e2e/src/specs/web/shared-link.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/shared-link.e2e-spec.ts rename to e2e/src/specs/web/shared-link.e2e-spec.ts diff --git a/e2e/src/web/specs/user-admin.e2e-spec.ts b/e2e/src/specs/web/user-admin.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/user-admin.e2e-spec.ts rename to e2e/src/specs/web/user-admin.e2e-spec.ts diff --git a/e2e/src/web/specs/websocket.e2e-spec.ts b/e2e/src/specs/web/websocket.e2e-spec.ts similarity index 100% rename from e2e/src/web/specs/websocket.e2e-spec.ts rename to e2e/src/specs/web/websocket.e2e-spec.ts diff --git a/e2e/src/generators/memory.ts b/e2e/src/ui/generators/memory.ts similarity index 100% rename from e2e/src/generators/memory.ts rename to e2e/src/ui/generators/memory.ts diff --git a/e2e/src/generators/memory/model-objects.ts b/e2e/src/ui/generators/memory/model-objects.ts similarity index 89% rename from e2e/src/generators/memory/model-objects.ts rename to e2e/src/ui/generators/memory/model-objects.ts index 1bcc703ed8..f81b2f8896 100644 --- a/e2e/src/generators/memory/model-objects.ts +++ b/e2e/src/ui/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/generators/timeline/rest-response'; +import type { MockTimelineAsset } from 'src/ui/generators/timeline/timeline-config'; +import { SeededRandom, selectRandomMultiple } from 'src/ui/generators/timeline/utils'; export type MemoryConfig = { id?: string; diff --git a/e2e/src/generators/timeline.ts b/e2e/src/ui/generators/timeline.ts similarity index 100% rename from e2e/src/generators/timeline.ts rename to e2e/src/ui/generators/timeline.ts diff --git a/e2e/src/generators/timeline/distribution-patterns.ts b/e2e/src/ui/generators/timeline/distribution-patterns.ts similarity index 98% rename from e2e/src/generators/timeline/distribution-patterns.ts rename to e2e/src/ui/generators/timeline/distribution-patterns.ts index ae621fd9c5..b6f3aab6de 100644 --- a/e2e/src/generators/timeline/distribution-patterns.ts +++ b/e2e/src/ui/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/generators/timeline/model-objects'; +import { SeededRandom, selectRandomDays } from 'src/ui/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/generators/timeline/images.ts similarity index 98% rename from e2e/src/generators/timeline/images.ts rename to e2e/src/ui/generators/timeline/images.ts index 69ec576714..9330cf137d 100644 --- a/e2e/src/generators/timeline/images.ts +++ b/e2e/src/ui/generators/timeline/images.ts @@ -1,5 +1,5 @@ import sharp from 'sharp'; -import { SeededRandom } from 'src/generators/timeline/utils'; +import { SeededRandom } from 'src/ui/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/generators/timeline/model-objects.ts similarity index 99% rename from e2e/src/generators/timeline/model-objects.ts rename to e2e/src/ui/generators/timeline/model-objects.ts index f06596fd1a..e300de1161 100644 --- a/e2e/src/generators/timeline/model-objects.ts +++ b/e2e/src/ui/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/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/generators/timeline/rest-response.ts similarity index 99% rename from e2e/src/generators/timeline/rest-response.ts rename to e2e/src/ui/generators/timeline/rest-response.ts index a193535cd3..0c4bd06dc3 100644 --- a/e2e/src/generators/timeline/rest-response.ts +++ b/e2e/src/ui/generators/timeline/rest-response.ts @@ -15,7 +15,7 @@ import { } from '@immich/sdk'; import { DateTime } from 'luxon'; import { signupDto } from 'src/fixtures'; -import { parseTimeBucketKey } from 'src/generators/timeline/utils'; +import { parseTimeBucketKey } from 'src/ui/generators/timeline/utils'; import type { MockTimelineAsset, MockTimelineData } from './timeline-config'; /** diff --git a/e2e/src/generators/timeline/timeline-config.ts b/e2e/src/ui/generators/timeline/timeline-config.ts similarity index 98% rename from e2e/src/generators/timeline/timeline-config.ts rename to e2e/src/ui/generators/timeline/timeline-config.ts index 8dbe8399b1..992480eef9 100644 --- a/e2e/src/generators/timeline/timeline-config.ts +++ b/e2e/src/ui/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/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/generators/timeline/utils.ts similarity index 98% rename from e2e/src/generators/timeline/utils.ts rename to e2e/src/ui/generators/timeline/utils.ts index 686a8223ef..283f56c6f0 100644 --- a/e2e/src/generators/timeline/utils.ts +++ b/e2e/src/ui/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/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/mock-network/base-network.ts similarity index 100% rename from e2e/src/mock-network/base-network.ts rename to e2e/src/ui/mock-network/base-network.ts diff --git a/e2e/src/mock-network/memory-network.ts b/e2e/src/ui/mock-network/memory-network.ts similarity index 100% rename from e2e/src/mock-network/memory-network.ts rename to e2e/src/ui/mock-network/memory-network.ts diff --git a/e2e/src/mock-network/timeline-network.ts b/e2e/src/ui/mock-network/timeline-network.ts similarity index 98% rename from e2e/src/mock-network/timeline-network.ts rename to e2e/src/ui/mock-network/timeline-network.ts index 8780409657..b20a812eb1 100644 --- a/e2e/src/mock-network/timeline-network.ts +++ b/e2e/src/ui/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/generators/timeline'; +import { sleep } from 'src/ui/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/specs/asset-viewer/asset-viewer.e2e-spec.ts similarity index 98% rename from e2e/src/web/specs/asset-viewer/asset-viewer.ui-spec.ts rename to e2e/src/ui/specs/asset-viewer/asset-viewer.e2e-spec.ts index 669f1b815c..082ff1f7a1 100644 --- a/e2e/src/web/specs/asset-viewer/asset-viewer.ui-spec.ts +++ b/e2e/src/ui/specs/asset-viewer/asset-viewer.e2e-spec.ts @@ -8,11 +8,11 @@ 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'; +} from 'src/ui/generators/timeline'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/mock-network/timeline-network'; import { utils } from 'src/utils'; -import { assetViewerUtils } from 'src/web/specs/timeline/utils'; +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/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/specs/memory/memory-viewer.e2e-spec.ts index 11e73fbe25..dbc21ad1c9 100644 --- a/e2e/src/web/specs/memory/memory-viewer.ui-spec.ts +++ b/e2e/src/ui/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/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/generators/timeline'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; +import { MemoryChanges, setupMemoryMockApiRoutes } from 'src/ui/mock-network/memory-network'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/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/specs/memory/utils.ts similarity index 100% rename from e2e/src/web/specs/memory/utils.ts rename to e2e/src/ui/specs/memory/utils.ts diff --git a/e2e/src/web/specs/search/search-gallery.ui-spec.ts b/e2e/src/ui/specs/search/search-gallery.e2e-spec.ts similarity index 95% rename from e2e/src/web/specs/search/search-gallery.ui-spec.ts rename to e2e/src/ui/specs/search/search-gallery.e2e-spec.ts index e358bed154..c3721b1c54 100644 --- a/e2e/src/web/specs/search/search-gallery.ui-spec.ts +++ b/e2e/src/ui/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/generators/timeline'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; +import { setupTimelineMockApiRoutes, TimelineTestContext } from 'src/ui/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/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/specs/timeline/timeline.e2e-spec.ts index 47026e2cd4..9408f6079a 100644 --- a/e2e/src/web/specs/timeline/timeline.ui-spec.ts +++ b/e2e/src/ui/specs/timeline/timeline.e2e-spec.ts @@ -12,18 +12,15 @@ 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/generators/timeline'; +import { setupBaseMockApiRoutes } from 'src/ui/mock-network/base-network'; import { - assetViewerUtils, - padYearMonth, - pageUtils, - poll, - thumbnailUtils, - timelineUtils, -} from 'src/web/specs/timeline/utils'; + pageRoutePromise, + setupTimelineMockApiRoutes, + TimelineTestContext, +} from 'src/ui/mock-network/timeline-network'; +import { utils } from 'src/utils'; +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/specs/timeline/utils.ts similarity index 99% rename from e2e/src/web/specs/timeline/utils.ts rename to e2e/src/ui/specs/timeline/utils.ts index 0f04bf9361..774839b174 100644 --- a/e2e/src/web/specs/timeline/utils.ts +++ b/e2e/src/ui/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/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..953273a930 100644 --- a/e2e/vitest.config.ts +++ b/e2e/vitest.config.ts @@ -3,14 +3,14 @@ import { defineConfig } from 'vitest/config'; // skip `docker compose up` if `make e2e` was already run const globalSetup: string[] = []; try { - await fetch('http://127.0.0.1:2285/api/server-info/ping'); + await fetch('http://127.0.0.1:2285/api/server/ping'); } catch { - globalSetup.push('src/setup/docker-compose.ts'); + globalSetup.push('src/docker-compose.ts'); } export default defineConfig({ test: { - include: ['src/{api,cli,immich-admin}/specs/*.e2e-spec.ts'], + include: ['src/specs/server/**/*.e2e-spec.ts'], globalSetup, testTimeout: 15_000, pool: 'threads',