diff --git a/.github/workflows/test-webapp.yaml b/.github/workflows/test-webapp.yaml
new file mode 100644
index 000000000..8497ae47a
--- /dev/null
+++ b/.github/workflows/test-webapp.yaml
@@ -0,0 +1,29 @@
+name: NPM Test
+on: [push]
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: recursive
+ fetch-depth: 0
+
+ - uses: DeterminateSystems/nix-installer-action@main
+ - uses: DeterminateSystems/magic-nix-cache-action@main
+
+ - run: nix develop -c '(cd packages/webapp && npm run test)'
+
+
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: recursive
+ fetch-depth: 0
+
+ - uses: DeterminateSystems/nix-installer-action@main
+ - uses: DeterminateSystems/magic-nix-cache-action@main
+ - run: nix develop -c '(cd packages/webapp && npm run svelte-lint-format-check)'
diff --git a/packages/webapp/package.json b/packages/webapp/package.json
index 98c62b165..71e152eab 100644
--- a/packages/webapp/package.json
+++ b/packages/webapp/package.json
@@ -4,14 +4,18 @@
"type": "module",
"scripts": {
"dev": "vite dev",
- "build": "vite build",
+ "build": "vite build && npm run package",
"preview": "vite preview",
+ "package": "svelte-kit sync && svelte-package && publint",
+ "prepublishOnly": "npm run package",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"format": "prettier --write .",
- "lint": "prettier --check . && eslint .",
+ "lint": "prettier --list-different . && eslint .",
"test:unit": "vitest",
- "test": "npm run test:unit -- --run"
+ "test": "npm run test:unit -- --run",
+ "format-check": "prettier --list-different src",
+ "svelte-lint-format-check": "npm run lint && npm run check"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
@@ -35,6 +39,6 @@
"vitest": "^2.0.4"
},
"dependencies": {
- "@rainlanguage/ui-components": "*"
- }
+ "@rainlanguage/ui-components": "*"
+ }
}
diff --git a/packages/webapp/src/routes/+page.svelte b/packages/webapp/src/routes/+page.svelte
index 4e019e419..0bc94fefd 100644
--- a/packages/webapp/src/routes/+page.svelte
+++ b/packages/webapp/src/routes/+page.svelte
@@ -2,12 +2,14 @@
import { CardProperty } from '@rainlanguage/ui-components';
-
Welcome to SvelteKit
-
- Visit svelte.dev/docs/kit to read the documentation...
-
+
+
Welcome to SvelteKit
+
+ Visit svelte.dev/docs/kit to read the documentation...
+
-
- Vault ID
- {100000}
-
+
+ Vault ID
+ {100000}
+
+
diff --git a/packages/webapp/src/routes/page.test.ts b/packages/webapp/src/routes/page.test.ts
new file mode 100644
index 000000000..2c7b56eb6
--- /dev/null
+++ b/packages/webapp/src/routes/page.test.ts
@@ -0,0 +1,10 @@
+import { render, screen } from '@testing-library/svelte';
+import { describe, it, expect } from 'vitest';
+import Page from './+page.svelte';
+
+describe('Page Component', () => {
+ it('should load the page', async () => {
+ render(Page);
+ expect(screen.getByTestId('page-container')).toBeInTheDocument();
+ });
+});
diff --git a/packages/webapp/test-setup.ts b/packages/webapp/test-setup.ts
new file mode 100644
index 000000000..bb02c60cd
--- /dev/null
+++ b/packages/webapp/test-setup.ts
@@ -0,0 +1 @@
+import '@testing-library/jest-dom/vitest';
diff --git a/packages/webapp/tsconfig.json b/packages/webapp/tsconfig.json
index 0b2d8865f..1abeca84d 100644
--- a/packages/webapp/tsconfig.json
+++ b/packages/webapp/tsconfig.json
@@ -9,11 +9,8 @@
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
- "moduleResolution": "bundler"
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "types": ["vitest/globals", "@testing-library/jest-dom", "vitest/importMeta"]
}
- // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
- // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
- //
- // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
- // from the referenced tsconfig.json - TypeScript does not merge them in
}
diff --git a/packages/webapp/vite.config.ts b/packages/webapp/vite.config.ts
index d76fc8a56..704fe5ec9 100644
--- a/packages/webapp/vite.config.ts
+++ b/packages/webapp/vite.config.ts
@@ -1,10 +1,26 @@
import { defineConfig } from 'vitest/config';
import { sveltekit } from '@sveltejs/kit/vite';
+import { loadEnv } from 'vite';
-export default defineConfig({
+export default defineConfig(({ mode }) => ({
plugins: [sveltekit()],
-
+ resolve: {
+ conditions: mode === 'test' ? ['browser'] : []
+ },
+ define: {
+ 'process.env': {},
+ 'import.meta.vitest': 'undefined'
+ },
test: {
- include: ['src/**/*.{test,spec}.{js,ts}']
+ // Jest like globals
+ includeSource: ['src/**/*.{js,ts}'],
+ globals: true,
+ environment: 'jsdom',
+ include: ['src/**/*.{test,spec}.ts'],
+ // Extend jest-dom matchers
+ setupFiles: ['./test-setup.ts'],
+ // load env vars
+ env: loadEnv('', process.cwd(), ''),
+ testTimeout: 10000
}
-});
+}));