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 } -}); +}));