chore(nx/server): set up e2e

This commit is contained in:
Elian Doran 2025-04-28 22:58:00 +03:00
parent 546bb52abe
commit e18613148b
No known key found for this signature in database
33 changed files with 40 additions and 172 deletions

View File

@ -24,7 +24,7 @@
"client:coverage": "cross-env TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db TRILIUM_INTEGRATION_TEST=memory vitest --root src/public/app --coverage", "client:coverage": "cross-env TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db TRILIUM_INTEGRATION_TEST=memory vitest --root src/public/app --coverage",
"test:playwright": "playwright test --workers 1", "test:playwright": "playwright test --workers 1",
"test:integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "test:integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts",
"test:integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "test:integration-mem-db": "cross-env nodemon src/main.ts",
"test:integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "test:integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts",
"dev:watch-dist": "tsx ./bin/watch-dist.ts", "dev:watch-dist": "tsx ./bin/watch-dist.ts",
"dev:format-check": "eslint -c eslint.format.config.js .", "dev:format-check": "eslint -c eslint.format.config.js .",

View File

@ -27,9 +27,6 @@ export default defineConfig({
reporter: "html", reporter: "html",
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: { use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: SERVER_URL,
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: "on-first-retry" trace: "on-first-retry"
}, },

View File

@ -1,8 +0,0 @@
import { test, expect } from '@playwright/test';
test('has title', async ({ page }) => {
await page.goto('/');
// Expect h1 to contain a substring.
expect(await page.locator('h1').innerText()).toContain('Welcome');
});

View File

@ -1,22 +0,0 @@
{
"jsc": {
"target": "es2017",
"parser": {
"syntax": "typescript",
"decorators": true,
"dynamicImport": true
},
"transform": {
"decoratorMetadata": true,
"legacyDecorator": true
},
"keepClassNames": true,
"externalHelpers": true,
"loose": true
},
"module": {
"type": "es6"
},
"sourceMaps": true,
"exclude": []
}

View File

@ -1,5 +0,0 @@
import baseConfig from "../../eslint.config.mjs";
export default [
...baseConfig
];

View File

@ -1,24 +0,0 @@
/* eslint-disable */
import { readFileSync } from 'fs';
// Reading the SWC compilation config for the spec files
const swcJestConfig = JSON.parse(
readFileSync(`${__dirname}/.spec.swcrc`, 'utf-8')
);
// Disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves
swcJestConfig.swcrc = false;
export default {
displayName: '@triliumnext/desktop-e2e',
preset: '../../jest.preset.js',
globalSetup: '<rootDir>/src/support/global-setup.ts',
globalTeardown: '<rootDir>/src/support/global-teardown.ts',
setupFiles: ['<rootDir>/src/support/test-setup.ts'],
testEnvironment: 'node',
transform: {
'^.+\\.[tj]s$': ['@swc/jest', swcJestConfig],
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: 'test-output/jest/coverage',
};

View File

@ -1,25 +0,0 @@
{
"name": "@triliumnext/desktop-e2e",
"version": "0.0.1",
"private": true,
"nx": {
"implicitDependencies": [
"@triliumnext/desktop"
],
"targets": {
"e2e": {
"executor": "@nx/jest:jest",
"outputs": [
"{projectRoot}/test-output/jest/coverage"
],
"options": {
"jestConfig": "apps/desktop-e2e/jest.config.ts",
"passWithNoTests": true
},
"dependsOn": [
"@triliumnext/desktop:build"
]
}
}
}
}

View File

@ -1,10 +0,0 @@
import axios from 'axios';
describe('GET /', () => {
it('should return a message', async () => {
const res = await axios.get(`/`);
expect(res.status).toBe(200);
expect(res.data).toEqual({ message: 'Hello API' });
});
})

View File

@ -1,11 +0,0 @@
/* eslint-disable */
var __TEARDOWN_MESSAGE__: string;
module.exports = async function() {
// Start services that that the app needs to run (e.g. database, docker-compose, etc.).
console.log('\nSetting up...\n');
// Hint: Use `globalThis` to pass variables to global teardown.
globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n';
};

View File

@ -1,7 +0,0 @@
/* eslint-disable */
module.exports = async function() {
// Put clean up logic here (e.g. stopping services, docker-compose, etc.).
// Hint: `globalThis` is shared between setup and teardown.
console.log(globalThis.__TEARDOWN_MESSAGE__);
};

View File

@ -1,9 +0,0 @@
/* eslint-disable */
import axios from 'axios';
module.exports = async function() {
// Configure axios for tests to use.
const host = process.env.HOST ?? 'localhost';
const port = process.env.PORT ?? '3000';
axios.defaults.baseURL = `http://${host}:${port}`;
};

View File

@ -1,14 +0,0 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"outDir": "out-tsc/@triliumnext/desktop-e2e",
"esModuleInterop": true,
"noUnusedLocals": false,
"noImplicitAny": false
},
"include": [
"jest.config.ts",
"src/**/*.ts"
],
"references": []
}

3
apps/server-e2e/.env Normal file
View File

@ -0,0 +1,3 @@
TRILIUM_INTEGRATION_TEST=memory
TRILIUM_PORT=8082
TRILIUM_DATA_DIR=apps/server/spec/db

View File

@ -1,10 +1,11 @@
{ {
"name": "@triliumnext/client-e2e", "name": "@triliumnext/server-e2e",
"version": "0.0.1", "version": "0.0.1",
"private": true, "private": true,
"nx": { "nx": {
"implicitDependencies": [ "implicitDependencies": [
"@triliumnext/client" "@triliumnext/client",
"@triliumnext/server"
] ]
} }
} }

View File

@ -3,7 +3,8 @@ import { nxE2EPreset } from '@nx/playwright/preset';
import { workspaceRoot } from '@nx/devkit'; import { workspaceRoot } from '@nx/devkit';
// For CI, you may want to set BASE_URL to the deployed application. // For CI, you may want to set BASE_URL to the deployed application.
const baseURL = process.env['BASE_URL'] || 'http://localhost:4200'; const port = process.env['TRILIUM_PORT'];
const baseURL = process.env['BASE_URL'] || `http://localhost:${port}`;
/** /**
* Read environment variables from file. * Read environment variables from file.
@ -24,8 +25,8 @@ export default defineConfig({
}, },
/* Run your local dev server before starting the tests */ /* Run your local dev server before starting the tests */
webServer: { webServer: {
command: 'npx nx run @triliumnext/client:serve-static', command: 'pnpm server:start-prod',
url: 'http://localhost:4200', url: baseURL,
reuseExistingServer: !process.env.CI, reuseExistingServer: !process.env.CI,
cwd: workspaceRoot cwd: workspaceRoot
}, },
@ -35,15 +36,15 @@ export default defineConfig({
use: { ...devices["Desktop Chrome"] }, use: { ...devices["Desktop Chrome"] },
}, },
{ // {
name: "firefox", // name: "firefox",
use: { ...devices["Desktop Firefox"] }, // use: { ...devices["Desktop Firefox"] },
}, // },
{ // {
name: "webkit", // name: "webkit",
use: { ...devices["Desktop Safari"] }, // use: { ...devices["Desktop Safari"] },
}, // },
// Uncomment for mobile browsers support // Uncomment for mobile browsers support
/* { /* {

View File

@ -0,0 +1,2 @@
TRILIUM_ENV=production
TRILIUM_DATA_DIR=./apps/server/data

View File

@ -150,6 +150,10 @@
"dependsOn": [ "build" ], "dependsOn": [ "build" ],
"command": "bash apps/server/scripts/build-server.sh" "command": "bash apps/server/scripts/build-server.sh"
}, },
"start-prod": {
"dependsOn": [ "build" ],
"command": "node apps/server/dist/main.js"
},
"docker-build": { "docker-build": {
"dependsOn": [ "dependsOn": [
"build" "build"

View File

@ -54,7 +54,7 @@ class IndexService {
return; return;
} }
const aiEnabled = await options.getOptionBool('aiEnabled'); const aiEnabled = options.getOptionOrNull('aiEnabled') === "true";
if (!aiEnabled) { if (!aiEnabled) {
log.info("Index service: AI features disabled, skipping initialization"); log.info("Index service: AI features disabled, skipping initialization");
return; return;

View File

@ -9,7 +9,7 @@
"client:build": "nx build client", "client:build": "nx build client",
"server:build": "nx build server", "server:build": "nx build server",
"server:start": "nx run-many --target=serve --projects=client,server --parallel", "server:start": "nx run-many --target=serve --projects=client,server --parallel",
"server:start-prod": "pnpm server:build && cross-env TRILIUM_DATA_DIR=apps/server/data node apps/server/dist/main.js", "server:start-prod": "nx run @triliumnext/server:start-prod",
"electron:build": "nx build desktop", "electron:build": "nx build desktop",
"chore:ci-update-nightly-version": "tsx ./scripts/update-nightly-version.ts", "chore:ci-update-nightly-version": "tsx ./scripts/update-nightly-version.ts",
"chore:update-build-info": "tsx ./scripts/update-build-info.ts", "chore:update-build-info": "tsx ./scripts/update-build-info.ts",

24
pnpm-lock.yaml generated
View File

@ -287,8 +287,6 @@ importers:
specifier: 0.7.2 specifier: 0.7.2
version: 0.7.2 version: 0.7.2
apps/client-e2e: {}
apps/desktop: apps/desktop:
dependencies: dependencies:
'@electron/remote': '@electron/remote':
@ -351,7 +349,7 @@ importers:
version: 1.0.2 version: 1.0.2
copy-webpack-plugin: copy-webpack-plugin:
specifier: 13.0.0 specifier: 13.0.0
version: 13.0.0(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0))) version: 13.0.0(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4))
electron: electron:
specifier: 35.1.5 specifier: 35.1.5
version: 35.1.5 version: 35.1.5
@ -359,8 +357,6 @@ importers:
specifier: ^7.1.1 specifier: ^7.1.1
version: 7.1.3 version: 7.1.3
apps/desktop-e2e: {}
apps/server: apps/server:
dependencies: dependencies:
'@highlightjs/cdn-assets': '@highlightjs/cdn-assets':
@ -531,7 +527,7 @@ importers:
version: 1.4.7 version: 1.4.7
copy-webpack-plugin: copy-webpack-plugin:
specifier: 13.0.0 specifier: 13.0.0
version: 13.0.0(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0))) version: 13.0.0(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4))
csrf-csrf: csrf-csrf:
specifier: 3.1.0 specifier: 3.1.0
version: 3.1.0 version: 3.1.0
@ -702,7 +698,7 @@ importers:
version: 1.0.1 version: 1.0.1
webpack: webpack:
specifier: 5.99.6 specifier: 5.99.6
version: 5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0)) version: 5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4)
ws: ws:
specifier: 8.18.1 specifier: 8.18.1
version: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) version: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@ -713,6 +709,8 @@ importers:
specifier: 3.2.0 specifier: 3.2.0
version: 3.2.0 version: 3.2.0
apps/server-e2e: {}
packages/commons: packages/commons:
dependencies: dependencies:
'@swc/helpers': '@swc/helpers':
@ -15284,14 +15282,14 @@ snapshots:
serialize-javascript: 6.0.2 serialize-javascript: 6.0.2
webpack: 5.98.0(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4) webpack: 5.98.0(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4)
copy-webpack-plugin@13.0.0(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0))): copy-webpack-plugin@13.0.0(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4)):
dependencies: dependencies:
glob-parent: 6.0.2 glob-parent: 6.0.2
normalize-path: 3.0.0 normalize-path: 3.0.0
schema-utils: 4.3.2 schema-utils: 4.3.2
serialize-javascript: 6.0.2 serialize-javascript: 6.0.2
tinyglobby: 0.2.13 tinyglobby: 0.2.13
webpack: 5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0)) webpack: 5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4)
core-js-compat@3.41.0: core-js-compat@3.41.0:
dependencies: dependencies:
@ -20550,14 +20548,14 @@ snapshots:
'@swc/core': 1.5.29(@swc/helpers@0.5.17) '@swc/core': 1.5.29(@swc/helpers@0.5.17)
esbuild: 0.19.12 esbuild: 0.19.12
terser-webpack-plugin@5.3.14(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0))): terser-webpack-plugin@5.3.14(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4)):
dependencies: dependencies:
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
jest-worker: 27.5.1 jest-worker: 27.5.1
schema-utils: 4.3.2 schema-utils: 4.3.2
serialize-javascript: 6.0.2 serialize-javascript: 6.0.2
terser: 5.39.0 terser: 5.39.0
webpack: 5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0)) webpack: 5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4)
optionalDependencies: optionalDependencies:
'@swc/core': 1.5.29(@swc/helpers@0.5.17) '@swc/core': 1.5.29(@swc/helpers@0.5.17)
esbuild: 0.19.12 esbuild: 0.19.12
@ -21232,7 +21230,7 @@ snapshots:
- esbuild - esbuild
- uglify-js - uglify-js
webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0)): webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4):
dependencies: dependencies:
'@types/eslint-scope': 3.7.7 '@types/eslint-scope': 3.7.7
'@types/estree': 1.0.7 '@types/estree': 1.0.7
@ -21254,7 +21252,7 @@ snapshots:
neo-async: 2.6.2 neo-async: 2.6.2
schema-utils: 4.3.2 schema-utils: 4.3.2
tapable: 2.2.1 tapable: 2.2.1
terser-webpack-plugin: 5.3.14(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4(webpack-dev-server@5.2.1)(webpack@5.98.0))) terser-webpack-plugin: 5.3.14(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack@5.99.6(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(webpack-cli@5.1.4))
watchpack: 2.4.2 watchpack: 2.4.2
webpack-sources: 3.2.3 webpack-sources: 3.2.3
optionalDependencies: optionalDependencies:

View File

@ -16,16 +16,13 @@
"path": "./packages/turndown-plugin-gfm" "path": "./packages/turndown-plugin-gfm"
}, },
{ {
"path": "./apps/client-e2e" "path": "./apps/server-e2e"
}, },
{ {
"path": "./apps/client" "path": "./apps/client"
}, },
{ {
"path": "./apps/desktop" "path": "./apps/desktop"
},
{
"path": "./apps/desktop-e2e"
} }
] ]
} }