diff --git a/bun.lockb b/bun.lockb index 8b3679c..553dff2 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 0000000..986e271 --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,2 @@ +[test] +preload = "./happydom.ts" \ No newline at end of file diff --git a/happydom.ts b/happydom.ts new file mode 100644 index 0000000..7f712d0 --- /dev/null +++ b/happydom.ts @@ -0,0 +1,3 @@ +import { GlobalRegistrator } from "@happy-dom/global-registrator"; + +GlobalRegistrator.register(); diff --git a/package.json b/package.json index 485891c..8e86c1d 100644 --- a/package.json +++ b/package.json @@ -8,56 +8,65 @@ "preview": "vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "test": "vitest", + "test": "vitest run", + "test:ui": "vitest --ui", + "test:watch": "vitest", "lint": "prettier --check . && eslint .", "format": "prettier --write .", "generate": "npx drizzle-kit generate", "migrate": "npx drizzle-kit migrate" }, "devDependencies": { - "@iconify/json": "^2.2.214", + "@happy-dom/global-registrator": "^14.12.3", + "@iconify/json": "^2.2.230", "@iconify/types": "^2.0.0", - "@libsql/client": "0.6.0", + "@libsql/client": "0.7.0", "@lucia-auth/adapter-postgresql": "3.1.2", - "@lucia-auth/adapter-sqlite": "3.0.1", - "@sveltejs/adapter-auto": "3.2.1", - "@sveltejs/adapter-vercel": "5.3.0", - "@sveltejs/enhanced-img": "^0.2.1", - "@sveltejs/kit": "2.5.10", - "@sveltejs/vite-plugin-svelte": "3.1.0", + "@lucia-auth/adapter-sqlite": "3.0.2", + "@sveltejs/adapter-auto": "3.2.2", + "@sveltejs/adapter-vercel": "5.4.1", + "@sveltejs/enhanced-img": "^0.3.0", + "@sveltejs/kit": "2.5.18", + "@sveltejs/vite-plugin-svelte": "3.1.1", "@tailwindcss/typography": "0.5.13", - "@types/eslint": "8.56.10", - "@typescript-eslint/eslint-plugin": "7.10.0", - "@typescript-eslint/parser": "7.10.0", + "@testing-library/jest-dom": "^6.4.7", + "@testing-library/svelte": "^5.2.0", + "@types/eslint": "9.6.0", + "@typescript-eslint/eslint-plugin": "7.17.0", + "@typescript-eslint/parser": "7.17.0", "@vercel/analytics": "^1.3.1", - "@vite-pwa/sveltekit": "^0.5.0", - "arctic": "1.9.0", + "@vite-pwa/sveltekit": "^0.6.0", + "@vitest/coverage-v8": "^2.0.4", + "@vitest/ui": "^2.0.4", + "@zerodevx/svelte-toast": "^0.9.5", + "arctic": "1.9.2", "autoprefixer": "10.4.19", - "cypress": "^13.12.0", + "cypress": "^13.13.1", "date-fns": "3.6.0", "dotenv": "16.4.5", - "drizzle-kit": "0.21.4", - "drizzle-orm": "0.30.10", - "eslint": "8.57.0", + "drizzle-kit": "0.23.0", + "drizzle-orm": "0.32.0", + "eslint": "9.7.0", "eslint-config-prettier": "9.1.0", - "eslint-plugin-svelte": "2.39.0", + "eslint-plugin-svelte": "2.43.0", "lucia": "3.2.0", - "openai": "4.47.1", - "postcss": "8.4.38", + "msw": "^2.3.2", + "openai": "4.53.0", + "postcss": "8.4.39", "postgres": "3.4.4", - "posthog-js": "^1.141.4", - "prettier": "3.2.5", - "prettier-plugin-svelte": "3.2.3", - "prettier-plugin-tailwindcss": "0.5.14", - "svelte": "5.0.0-next.142", - "svelte-check": "3.7.1", - "sveltekit-device-detector": "^1.1.2", - "sveltekit-superforms": "2.14.0", - "tailwindcss": "3.4.3", - "tslib": "2.6.2", - "typescript": "5.4.5", + "posthog-js": "^1.148.2", + "prettier": "3.3.3", + "prettier-plugin-svelte": "3.2.6", + "prettier-plugin-tailwindcss": "0.6.5", + "svelte": "5.0.0-next.195", + "svelte-check": "3.8.4", + "sveltekit-device-detector": "^1.1.3", + "sveltekit-superforms": "2.16.1", + "tailwindcss": "3.4.6", + "tslib": "2.6.3", + "typescript": "5.5.4", "unplugin-icons": "^0.19.0", - "vite": "5.2.11", + "vite": "5.3.4", "vite-plugin-pwa": "^0.20.0", "vitest": "1.6.0", "zod": "3.23.8" diff --git a/src/mocks/handlers.ts b/src/mocks/handlers.ts new file mode 100644 index 0000000..ff9734d --- /dev/null +++ b/src/mocks/handlers.ts @@ -0,0 +1,10 @@ +import { http, HttpResponse } from 'msw' + +export const handlers = [ + http.post('/review', () => { + return HttpResponse.json({ success: true }); + }), + http.post('/delete', () => { + return HttpResponse.json({ success: true }); + }) +] \ No newline at end of file diff --git a/src/mocks/mockData.ts b/src/mocks/mockData.ts new file mode 100644 index 0000000..6ad5415 --- /dev/null +++ b/src/mocks/mockData.ts @@ -0,0 +1,4 @@ +export const mockCards = [ + { id: '1', front: 'Question 1', back: 'Answer 1', nextPractice: new Date(), createdAt: new Date() }, + { id: '2', front: 'Question 2', back: 'Answer 2', nextPractice: new Date(), createdAt: new Date() }, +]; diff --git a/src/mocks/node.ts b/src/mocks/node.ts new file mode 100644 index 0000000..abbedd7 --- /dev/null +++ b/src/mocks/node.ts @@ -0,0 +1,4 @@ +import { setupServer } from 'msw/node' +import { handlers } from './handlers' + +export const server = setupServer(...handlers) \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 0ef499e..af25489 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "sourceMap": true, "strict": true, "moduleResolution": "bundler", - "types": ["unplugin-icons/types/svelte"] + "types": ["unplugin-icons/types/svelte", "@testing-library/jest-dom"] } // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias // diff --git a/vite.config.ts b/vite.config.ts index 80bdeee..3c6fd5d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,17 +3,21 @@ import { defineConfig } from 'vitest/config'; import Icons from 'unplugin-icons/vite' import { enhancedImages } from '@sveltejs/enhanced-img'; import { SvelteKitPWA } from '@vite-pwa/sveltekit' +import { svelteTesting } from '@testing-library/svelte/vite' export default defineConfig({ plugins: [ enhancedImages(), sveltekit(), + svelteTesting(), Icons({ compiler: 'svelte', }), - SvelteKitPWA({/* pwa options */ }) + SvelteKitPWA({/* pwa options */ }), ], test: { - include: ['src/**/*.{test,spec}.{js,ts}'] + environment: 'happy-dom', + include: ['src/**/*.{test,spec}.{js,ts}'], + setupFiles: ['./vitest-setup.ts'], } }); diff --git a/vitest-setup.ts b/vitest-setup.ts new file mode 100644 index 0000000..e8ee517 --- /dev/null +++ b/vitest-setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom/vitest' \ No newline at end of file