From 9934ae6481d29c2c7a1abc9590cb2e9b7abb527c Mon Sep 17 00:00:00 2001 From: Lukas Lanzner Date: Wed, 30 Oct 2024 12:56:58 +0100 Subject: [PATCH 1/8] feat(test): Add frontend tests --- .github/workflows/validate.yml | 5 +- nuxt.config.ts | 2 +- package-lock.json | 761 ++++++++++++++++++++++++++++++++- package.json | 11 +- tests/ProviderButton.test.ts | 15 + vitest.config.mts | 7 + 6 files changed, 775 insertions(+), 26 deletions(-) create mode 100644 tests/ProviderButton.test.ts create mode 100644 vitest.config.mts diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 832b8ee..2db4ca8 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -19,4 +19,7 @@ jobs: run: npm install - name: Run ESLint - run: npx eslint \ No newline at end of file + run: npx eslint + + - name: Run Vitest + run: npm run test \ No newline at end of file diff --git a/nuxt.config.ts b/nuxt.config.ts index e3d0745..9c175d1 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -2,7 +2,7 @@ export default defineNuxtConfig({ compatibilityDate: '2024-04-03', devtools: {enabled: false}, - modules: ['@nuxtjs/tailwindcss', '@nuxt/eslint', '@nuxtjs/supabase', '@nuxt/image'], + modules: ['@nuxtjs/tailwindcss', '@nuxt/eslint', '@nuxtjs/supabase', '@nuxt/image', '@nuxt/test-utils/module'], supabase: { redirectOptions: { login: '/login', diff --git a/package-lock.json b/package-lock.json index b80a5ec..50875eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,13 @@ }, "devDependencies": { "@nuxt/eslint": "^0.5.7", - "eslint": "^9.11.1" + "@nuxt/test-utils": "^3.14.4", + "@vue/test-utils": "^2.4.6", + "eslint": "^9.11.1", + "happy-dom": "^15.7.4", + "nitro-test-utils": "^0.9.0", + "playwright-core": "^1.48.1", + "vitest": "^2.1.3" } }, "node_modules/@alloc/quick-lru": { @@ -2609,6 +2615,154 @@ "nuxt-telemetry": "bin/nuxt-telemetry.mjs" } }, + "node_modules/@nuxt/test-utils": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/@nuxt/test-utils/-/test-utils-3.14.4.tgz", + "integrity": "sha512-1rSYMXjN651t+c8zSaPAoP78YE1WVcI3baPC2cic9my+J5FIsT1IuTU6M9XwDFBUnwGL6/sV5pPsyEumkIl3eA==", + "dev": true, + "dependencies": { + "@nuxt/kit": "^3.13.2", + "@nuxt/schema": "^3.13.2", + "c12": "^2.0.1", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.3", + "estree-walker": "^3.0.3", + "fake-indexeddb": "^6.0.0", + "get-port-please": "^3.1.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.12", + "node-fetch-native": "^1.6.4", + "ofetch": "^1.4.1", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "radix3": "^1.1.2", + "scule": "^1.3.0", + "std-env": "^3.7.0", + "tinyexec": "^0.3.1", + "ufo": "^1.5.4", + "unenv": "^1.10.0", + "unplugin": "^1.14.1", + "vitest-environment-nuxt": "^1.0.1" + }, + "engines": { + "node": ">=18.20.4" + }, + "peerDependencies": { + "@cucumber/cucumber": "^10.3.1 || ^11.0.0", + "@jest/globals": "^29.5.0", + "@playwright/test": "^1.43.1", + "@testing-library/vue": "^7.0.0 || ^8.0.1", + "@vitest/ui": "^0.34.6 || ^1.0.0 || ^2.0.0", + "@vue/test-utils": "^2.4.2", + "h3": "*", + "happy-dom": "^9.10.9 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0", + "jsdom": "^22.0.0 || ^23.0.0 || ^24.0.0 || ^25.0.0", + "nitropack": "*", + "playwright-core": "^1.43.1", + "vite": "*", + "vitest": "^0.34.6 || ^1.0.0 || ^2.0.0", + "vue": "^3.3.4", + "vue-router": "^4.0.0" + }, + "peerDependenciesMeta": { + "@cucumber/cucumber": { + "optional": true + }, + "@jest/globals": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "@testing-library/vue": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "@vue/test-utils": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright-core": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@nuxt/test-utils/node_modules/c12": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.1.tgz", + "integrity": "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==", + "dev": true, + "dependencies": { + "chokidar": "^4.0.1", + "confbox": "^0.1.7", + "defu": "^6.1.4", + "dotenv": "^16.4.5", + "giget": "^1.2.3", + "jiti": "^2.3.0", + "mlly": "^1.7.1", + "ohash": "^1.1.4", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/@nuxt/test-utils/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nuxt/test-utils/node_modules/jiti": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.3.3.tgz", + "integrity": "sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==", + "dev": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@nuxt/test-utils/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nuxt/vite-builder": { "version": "3.13.2", "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.13.2.tgz", @@ -2687,6 +2841,12 @@ "unctx": "^2.3.1" } }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true + }, "node_modules/@panva/hkdf": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.2.1.tgz", @@ -4020,6 +4180,113 @@ "vue": "^3.0.0" } }, + "node_modules/@vitest/expect": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", + "integrity": "sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.1.3", + "@vitest/utils": "2.1.3", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz", + "integrity": "sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.1.3", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.11" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/spy": "2.1.3", + "msw": "^2.3.5", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", + "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "dev": true, + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz", + "integrity": "sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==", + "dev": true, + "dependencies": { + "@vitest/utils": "2.1.3", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz", + "integrity": "sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "2.1.3", + "magic-string": "^0.30.11", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz", + "integrity": "sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", + "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "2.1.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@voxpelli/config-array-find-files": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@voxpelli/config-array-find-files/-/config-array-find-files-0.1.2.tgz", @@ -4324,6 +4591,16 @@ "integrity": "sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==", "license": "MIT" }, + "node_modules/@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", + "dev": true, + "dependencies": { + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" + } + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -4639,6 +4916,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/ast-kit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.2.0.tgz", @@ -5127,6 +5413,22 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5150,6 +5452,15 @@ "node": ">=0.8.0" } }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "engines": { + "node": ">= 16" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -5490,6 +5801,22 @@ "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", "license": "MIT" }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/consola": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", @@ -5928,6 +6255,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", @@ -6186,6 +6522,48 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -7003,6 +7381,15 @@ "ufo": "^1.1.2" } }, + "node_modules/fake-indexeddb": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-6.0.0.tgz", + "integrity": "sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7521,6 +7908,29 @@ "unenv": "^1.9.0" } }, + "node_modules/happy-dom": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-15.7.4.tgz", + "integrity": "sha512-r1vadDYGMtsHAAsqhDuk4IpPvr6N8MGKy5ntBo7tSdim+pWDxus2PNqOcOt8LuDZ4t3KJHE+gCuzupcx/GKnyQ==", + "dev": true, + "dependencies": { + "entities": "^4.5.0", + "webidl-conversions": "^7.0.0", + "whatwg-mimetype": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/happy-dom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -8185,6 +8595,104 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/js-beautify": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "dev": true, + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-beautify/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/js-beautify/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/js-beautify/node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8591,27 +9099,26 @@ "license": "MIT" }, "node_modules/listhen": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.7.2.tgz", - "integrity": "sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==", - "license": "MIT", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", + "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", "dependencies": { "@parcel/watcher": "^2.4.1", "@parcel/watcher-wasm": "^2.4.1", "citty": "^0.1.6", "clipboardy": "^4.0.0", "consola": "^3.2.3", - "crossws": "^0.2.0", + "crossws": ">=0.2.0 <0.4.0", "defu": "^6.1.4", "get-port-please": "^3.1.2", - "h3": "^1.10.2", + "h3": "^1.12.0", "http-shutdown": "^1.2.2", - "jiti": "^1.21.0", - "mlly": "^1.6.1", + "jiti": "^2.1.2", + "mlly": "^1.7.1", "node-forge": "^1.3.1", "pathe": "^1.1.2", "std-env": "^3.7.0", - "ufo": "^1.4.0", + "ufo": "^1.5.4", "untun": "^0.1.3", "uqr": "^0.1.2" }, @@ -8620,6 +9127,14 @@ "listhen": "bin/listhen.mjs" } }, + "node_modules/listhen/node_modules/jiti": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.3.3.tgz", + "integrity": "sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/load-tsconfig": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", @@ -8699,6 +9214,12 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "license": "MIT" }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -8709,10 +9230,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", - "license": "MIT", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } @@ -9067,6 +9587,23 @@ "node": ">= 0.6" } }, + "node_modules/nitro-test-utils": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/nitro-test-utils/-/nitro-test-utils-0.9.0.tgz", + "integrity": "sha512-UUIhLu1wH2yhy81p5jPQBs5q3GzvG+XlnVOW683+dPqkueTEurjcy449JQRtsVQoN04KgsKWk/GPbqDk3KZDhw==", + "dev": true, + "dependencies": { + "dotenv": "^16.4.5", + "listhen": "^1.8.0", + "ofetch": "^1.4.0", + "pathe": "^1.1.2", + "ufo": "^1.5.4" + }, + "peerDependencies": { + "nitropack": "^2", + "vitest": "^2" + } + }, "node_modules/nitropack": { "version": "2.9.7", "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.9.7.tgz", @@ -9966,10 +10503,9 @@ } }, "node_modules/ofetch": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.0.tgz", - "integrity": "sha512-MuHgsEhU6zGeX+EMh+8mSMrYTnsqJQQrpM00Q6QHMKNqQ0bKy0B43tk8tL1wg+CnsSTy1kg4Ir2T5Ig6rD+dfQ==", - "license": "MIT", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", "dependencies": { "destr": "^2.0.3", "node-fetch-native": "^1.6.4", @@ -10340,6 +10876,15 @@ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "license": "MIT" }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "engines": { + "node": ">= 14.16" + } + }, "node_modules/perfect-debounce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", @@ -10393,6 +10938,18 @@ "pathe": "^1.1.2" } }, + "node_modules/playwright-core": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.1.tgz", + "integrity": "sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -11203,6 +11760,12 @@ "node": ">= 6" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "node_modules/protocols": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", @@ -12188,6 +12751,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -12418,6 +12987,12 @@ "dev": true, "license": "MIT" }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, "node_modules/standard-as-callback": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", @@ -13034,6 +13609,18 @@ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "license": "MIT" }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "dev": true + }, "node_modules/tinyglobby": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.6.tgz", @@ -13073,6 +13660,33 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/tinypool": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", + "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -13687,10 +14301,9 @@ } }, "node_modules/vite-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", - "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", - "license": "MIT", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz", + "integrity": "sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.6", @@ -14351,6 +14964,79 @@ "@esbuild/win32-x64": "0.21.5" } }, + "node_modules/vitest": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz", + "integrity": "sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==", + "dev": true, + "dependencies": { + "@vitest/expect": "2.1.3", + "@vitest/mocker": "2.1.3", + "@vitest/pretty-format": "^2.1.3", + "@vitest/runner": "2.1.3", + "@vitest/snapshot": "2.1.3", + "@vitest/spy": "2.1.3", + "@vitest/utils": "2.1.3", + "chai": "^5.1.1", + "debug": "^4.3.6", + "magic-string": "^0.30.11", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.0", + "tinypool": "^1.0.0", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.3", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.3", + "@vitest/ui": "2.1.3", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest-environment-nuxt": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vitest-environment-nuxt/-/vitest-environment-nuxt-1.0.1.tgz", + "integrity": "sha512-eBCwtIQriXW5/M49FjqNKfnlJYlG2LWMSNFsRVKomc8CaMqmhQPBS5LZ9DlgYL9T8xIVsiA6RZn2lk7vxov3Ow==", + "dev": true, + "dependencies": { + "@nuxt/test-utils": ">=3.13.1" + } + }, "node_modules/vscode-jsonrpc": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", @@ -14466,6 +15152,12 @@ "ufo": "^1.5.4" } }, + "node_modules/vue-component-type-helpers": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.6.tgz", + "integrity": "sha512-ng11B8B/ZADUMMOsRbqv0arc442q7lifSubD0v8oDXIFoMg/mXwAPUunrroIDkY+mcD0dHKccdaznSVp8EoX3w==", + "dev": true + }, "node_modules/vue-devtools-stub": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz", @@ -14583,6 +15275,15 @@ "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "license": "MIT" }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -14608,6 +15309,22 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", diff --git a/package.json b/package.json index dcf7fd2..3191d23 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "nuxt dev", "generate": "nuxt generate", "preview": "nuxt preview", - "postinstall": "nuxt prepare" + "postinstall": "nuxt prepare", + "test": "vitest" }, "dependencies": { "@hebilicious/authjs-nuxt": "^0.3.5", @@ -20,6 +21,12 @@ }, "devDependencies": { "@nuxt/eslint": "^0.5.7", - "eslint": "^9.11.1" + "@nuxt/test-utils": "^3.14.4", + "@vue/test-utils": "^2.4.6", + "eslint": "^9.11.1", + "happy-dom": "^15.7.4", + "nitro-test-utils": "^0.9.0", + "playwright-core": "^1.48.1", + "vitest": "^2.1.3" } } diff --git a/tests/ProviderButton.test.ts b/tests/ProviderButton.test.ts new file mode 100644 index 0000000..5e36153 --- /dev/null +++ b/tests/ProviderButton.test.ts @@ -0,0 +1,15 @@ +import { describe, it, expect } from 'vitest'; +import { mountSuspended } from '@nuxt/test-utils/runtime'; +import ProviderButton from "~/components/login/ProviderButton.vue"; + + +describe('ProviderButton', () => { + const provider = {id: 'spotify', name: 'Spotify'}; + + it('renders the message correctly', async () => { + const wrapper = await mountSuspended(ProviderButton,{props: {provider: provider.id, name: provider.name}}); + expect(wrapper.text()).toContain('Sign in with ' + provider.name); + }); + + +}); \ No newline at end of file diff --git a/vitest.config.mts b/vitest.config.mts new file mode 100644 index 0000000..54c050e --- /dev/null +++ b/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineVitestConfig } from '@nuxt/test-utils/config' + +export default defineVitestConfig({ + test: { + environment: 'nuxt' + } +}) From 4b2126f972f260d1f9f6a5c0621958e574949f59 Mon Sep 17 00:00:00 2001 From: Lukas Lanzner Date: Wed, 30 Oct 2024 14:21:17 +0100 Subject: [PATCH 2/8] feat(test): Add frontend tests --- {tests => components/__tests__/login}/ProviderButton.test.ts | 0 vitest.config.mts | 2 ++ 2 files changed, 2 insertions(+) rename {tests => components/__tests__/login}/ProviderButton.test.ts (100%) diff --git a/tests/ProviderButton.test.ts b/components/__tests__/login/ProviderButton.test.ts similarity index 100% rename from tests/ProviderButton.test.ts rename to components/__tests__/login/ProviderButton.test.ts diff --git a/vitest.config.mts b/vitest.config.mts index 54c050e..c56bab9 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -2,6 +2,8 @@ import { defineVitestConfig } from '@nuxt/test-utils/config' export default defineVitestConfig({ test: { + globals: true, + include: ['**/*.test.ts'], environment: 'nuxt' } }) From ee9db4454a214ba783e4b775493d81d1ef87a5a6 Mon Sep 17 00:00:00 2001 From: Lukas Lanzner Date: Thu, 31 Oct 2024 08:07:17 +0100 Subject: [PATCH 3/8] chore(eslint): fix eslint errors --- pages/index.vue | 6 ++---- public/icons/Spotify_Full_Logo_RGB_Green.png | Bin 0 -> 51035 bytes server/api/v1/user/[uid].get.ts | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 public/icons/Spotify_Full_Logo_RGB_Green.png diff --git a/pages/index.vue b/pages/index.vue index eb9c65c..f070c2e 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -5,11 +5,9 @@ useSeoMeta({ description: "A fun music quiz game" }) -const session = useSupabaseSession() +// const session = useSupabaseSession() \ No newline at end of file diff --git a/public/icons/Spotify_Full_Logo_RGB_Green.png b/public/icons/Spotify_Full_Logo_RGB_Green.png new file mode 100644 index 0000000000000000000000000000000000000000..5b07b5c37a40836f55592d1a1d984044ee708781 GIT binary patch literal 51035 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%0ArSeCH)&WuNkOfk3Y`)n<%Yw-;8 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 tcPEZ~x}yKba4*kO+~@y)`#*}~ { const userId = getRouterParam(event, 'uid') - return; + return {user: userId}; }) \ No newline at end of file From 3c66019636766f1961c0074959a91abfb7af3608 Mon Sep 17 00:00:00 2001 From: synan798 Date: Sun, 22 Dec 2024 01:40:16 +0100 Subject: [PATCH 4/8] added totalgames --- components/profile/ProfileInformation.vue | 11 ++++++++--- composables/useUser.ts | 20 +++++++++++++++++++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/components/profile/ProfileInformation.vue b/components/profile/ProfileInformation.vue index 47bde48..50a1159 100644 --- a/components/profile/ProfileInformation.vue +++ b/components/profile/ProfileInformation.vue @@ -1,11 +1,16 @@