From f2378be125ca4b13806ee502aa275f9874ebda06 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Sun, 1 Feb 2026 20:18:54 +0000 Subject: [PATCH 1/5] test: move nuxt unit tests to `test/nuxt` We need this to resolve types correctly amongst other things. --- .../composables/useStructuredFilters.spec.ts} | 2 +- test/{unit => nuxt}/server/utils/dependency-analysis.spec.ts | 0 test/{unit => nuxt}/server/utils/dependency-resolver.spec.ts | 0 test/{unit => nuxt}/server/utils/file-tree.spec.ts | 0 test/{unit => nuxt}/server/utils/readme.spec.ts | 0 5 files changed, 1 insertion(+), 1 deletion(-) rename test/{unit/search-operators.spec.ts => nuxt/composables/useStructuredFilters.spec.ts} (99%) rename test/{unit => nuxt}/server/utils/dependency-analysis.spec.ts (100%) rename test/{unit => nuxt}/server/utils/dependency-resolver.spec.ts (100%) rename test/{unit => nuxt}/server/utils/file-tree.spec.ts (100%) rename test/{unit => nuxt}/server/utils/readme.spec.ts (100%) diff --git a/test/unit/search-operators.spec.ts b/test/nuxt/composables/useStructuredFilters.spec.ts similarity index 99% rename from test/unit/search-operators.spec.ts rename to test/nuxt/composables/useStructuredFilters.spec.ts index 327470eef..da4f72d29 100644 --- a/test/unit/search-operators.spec.ts +++ b/test/nuxt/composables/useStructuredFilters.spec.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest' import { hasSearchOperators, parseSearchOperators, -} from '../../app/composables/useStructuredFilters' +} from '../../../app/composables/useStructuredFilters' describe('parseSearchOperators', () => { describe('basic operator parsing', () => { diff --git a/test/unit/server/utils/dependency-analysis.spec.ts b/test/nuxt/server/utils/dependency-analysis.spec.ts similarity index 100% rename from test/unit/server/utils/dependency-analysis.spec.ts rename to test/nuxt/server/utils/dependency-analysis.spec.ts diff --git a/test/unit/server/utils/dependency-resolver.spec.ts b/test/nuxt/server/utils/dependency-resolver.spec.ts similarity index 100% rename from test/unit/server/utils/dependency-resolver.spec.ts rename to test/nuxt/server/utils/dependency-resolver.spec.ts diff --git a/test/unit/server/utils/file-tree.spec.ts b/test/nuxt/server/utils/file-tree.spec.ts similarity index 100% rename from test/unit/server/utils/file-tree.spec.ts rename to test/nuxt/server/utils/file-tree.spec.ts diff --git a/test/unit/server/utils/readme.spec.ts b/test/nuxt/server/utils/readme.spec.ts similarity index 100% rename from test/unit/server/utils/readme.spec.ts rename to test/nuxt/server/utils/readme.spec.ts From e6ff285c1015e4b58f2d5f21a36d4ab94e3f08f2 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Sun, 1 Feb 2026 20:47:01 +0000 Subject: [PATCH 2/5] chore: simplify import specifier --- test/nuxt/composables/useStructuredFilters.spec.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/nuxt/composables/useStructuredFilters.spec.ts b/test/nuxt/composables/useStructuredFilters.spec.ts index da4f72d29..aa37df432 100644 --- a/test/nuxt/composables/useStructuredFilters.spec.ts +++ b/test/nuxt/composables/useStructuredFilters.spec.ts @@ -1,8 +1,5 @@ import { describe, expect, it } from 'vitest' -import { - hasSearchOperators, - parseSearchOperators, -} from '../../../app/composables/useStructuredFilters' +import { hasSearchOperators, parseSearchOperators } from '~/composables/useStructuredFilters' describe('parseSearchOperators', () => { describe('basic operator parsing', () => { From 4e299081cfe1cf3c6f654505075f2ef8a0192b78 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Sun, 1 Feb 2026 21:29:50 +0000 Subject: [PATCH 3/5] chore: add non-null assertion to tests --- test/nuxt/server/utils/dependency-analysis.spec.ts | 7 ++++--- test/nuxt/server/utils/readme.spec.ts | 14 +++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/test/nuxt/server/utils/dependency-analysis.spec.ts b/test/nuxt/server/utils/dependency-analysis.spec.ts index a70abad4e..703a245c3 100644 --- a/test/nuxt/server/utils/dependency-analysis.spec.ts +++ b/test/nuxt/server/utils/dependency-analysis.spec.ts @@ -2,7 +2,8 @@ import { describe, expect, it, vi, beforeEach } from 'vitest' // Mock Nitro globals before importing the module vi.stubGlobal('defineCachedFunction', (fn: Function) => fn) -vi.stubGlobal('$fetch', vi.fn()) +const $fetchMock = vi.fn() +vi.stubGlobal('$fetch', $fetchMock) // Import module under test const { analyzeDependencyTree } = await import('../../../../server/utils/dependency-analysis') @@ -26,7 +27,7 @@ function mockOsvApi( batchResults: Array<{ vulns?: Array<{ id: string; modified: string }> }>, detailResults: Map> }> = new Map(), ) { - vi.mocked($fetch).mockImplementation(async (url: string, options?: { body?: unknown }) => { + $fetchMock.mockImplementation(async (url: string, options?: { body?: unknown }) => { if (url === 'https://api.osv.dev/v1/querybatch') { return { results: batchResults } } @@ -102,7 +103,7 @@ describe('dependency-analysis', () => { vi.mocked(resolveDependencyTree).mockResolvedValue(mockResolved) // Batch query fails entirely - vi.mocked($fetch).mockRejectedValue(new Error('OSV API error')) + $fetchMock.mockRejectedValue(new Error('OSV API error')) const result = await analyzeDependencyTree('test-pkg', '1.0.0') diff --git a/test/nuxt/server/utils/readme.spec.ts b/test/nuxt/server/utils/readme.spec.ts index 76e97875a..4a15bf940 100644 --- a/test/nuxt/server/utils/readme.spec.ts +++ b/test/nuxt/server/utils/readme.spec.ts @@ -47,7 +47,7 @@ describe('Playground Link Extraction', () => { const result = await renderReadmeHtml(markdown, 'test-pkg') expect(result.playgroundLinks).toHaveLength(1) - expect(result.playgroundLinks[0].provider).toBe('codesandbox') + expect(result.playgroundLinks[0]!.provider).toBe('codesandbox') }) }) @@ -56,21 +56,21 @@ describe('Playground Link Extraction', () => { const markdown = `[Pen](https://codepen.io/user/pen/abc123)` const result = await renderReadmeHtml(markdown, 'test-pkg') - expect(result.playgroundLinks[0].provider).toBe('codepen') + expect(result.playgroundLinks[0]!.provider).toBe('codepen') }) it('extracts Replit links', async () => { const markdown = `[Repl](https://replit.com/@user/project)` const result = await renderReadmeHtml(markdown, 'test-pkg') - expect(result.playgroundLinks[0].provider).toBe('replit') + expect(result.playgroundLinks[0]!.provider).toBe('replit') }) it('extracts Gitpod links', async () => { const markdown = `[Open in Gitpod](https://gitpod.io/#https://github.com/user/repo)` const result = await renderReadmeHtml(markdown, 'test-pkg') - expect(result.playgroundLinks[0].provider).toBe('gitpod') + expect(result.playgroundLinks[0]!.provider).toBe('gitpod') }) }) @@ -83,8 +83,8 @@ describe('Playground Link Extraction', () => { const result = await renderReadmeHtml(markdown, 'test-pkg') expect(result.playgroundLinks).toHaveLength(2) - expect(result.playgroundLinks[0].provider).toBe('stackblitz') - expect(result.playgroundLinks[1].provider).toBe('codesandbox') + expect(result.playgroundLinks[0]!.provider).toBe('stackblitz') + expect(result.playgroundLinks[1]!.provider).toBe('codesandbox') }) it('deduplicates same URL', async () => { @@ -127,7 +127,7 @@ describe('Playground Link Extraction', () => { const result = await renderReadmeHtml(markdown, 'test-pkg') expect(result.playgroundLinks).toHaveLength(1) - expect(result.playgroundLinks[0].provider).toBe('stackblitz') + expect(result.playgroundLinks[0]!.provider).toBe('stackblitz') }) }) }) From 85f3f4e009cb148d0704dc5ce33edc7b44965a1a Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Mon, 2 Feb 2026 00:04:59 +0000 Subject: [PATCH 4/5] chore: use some nuxt magic --- nuxt.config.ts | 5 +++++ test/tsconfig.tsbuildinfo | 1 + test/{nuxt => unit}/server/utils/dependency-analysis.spec.ts | 0 test/{nuxt => unit}/server/utils/dependency-resolver.spec.ts | 0 test/{nuxt => unit}/server/utils/file-tree.spec.ts | 0 test/{nuxt => unit}/server/utils/readme.spec.ts | 0 6 files changed, 6 insertions(+) create mode 100644 test/tsconfig.tsbuildinfo rename test/{nuxt => unit}/server/utils/dependency-analysis.spec.ts (100%) rename test/{nuxt => unit}/server/utils/dependency-resolver.spec.ts (100%) rename test/{nuxt => unit}/server/utils/file-tree.spec.ts (100%) rename test/{nuxt => unit}/server/utils/readme.spec.ts (100%) diff --git a/nuxt.config.ts b/nuxt.config.ts index a21fc498f..846e1b8f6 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -163,6 +163,11 @@ export default defineNuxtConfig({ base: './.cache/atproto-oauth/session', }, }, + typescript: { + tsConfig: { + include: ['../test/unit/server/**/*.ts'], + }, + }, }, fonts: { diff --git a/test/tsconfig.tsbuildinfo b/test/tsconfig.tsbuildinfo new file mode 100644 index 000000000..051687231 --- /dev/null +++ b/test/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./unit/a11y-component-coverage.spec.ts","./unit/index.spec.ts","./unit/repo-meta.spec.ts","./unit/uno-preset-rtl.spec.ts","./unit/app/utils/install-command.spec.ts","./unit/app/utils/install-scripts.spec.ts","./unit/app/utils/npm.spec.ts","./unit/app/utils/package-name.spec.ts","./unit/app/utils/platform-packages.spec.ts","./unit/app/utils/run-command.spec.ts","./unit/app/utils/versions.spec.ts","./unit/cli/npm-client.spec.ts","./unit/cli/schemas.spec.ts","./unit/cli/server.spec.ts","./unit/server/utils/import-resolver.spec.ts","./unit/server/utils/shiki.spec.ts","./unit/server/utils/docs/text.spec.ts","./unit/shared/types/index.spec.ts","./unit/shared/types/preferences.spec.ts","./unit/shared/utils/async.spec.ts","./unit/shared/utils/git-providers.spec.ts","./unit/shared/utils/package-analysis.spec.ts","./unit/shared/utils/parse-package-param.spec.ts","./unit/shared/utils/severity.spec.ts","./unit/shared/utils/spdx.spec.ts","./unit/shared/utils/url.spec.ts","./e2e/badge.spec.ts","./e2e/create-command.spec.ts","./e2e/docs.spec.ts","./e2e/interactions.spec.ts","./e2e/og-image.spec.ts","./e2e/package-manager-select.spec.ts","./e2e/url-compatibility.spec.ts","./e2e/vulnerabilities.spec.ts"],"errors":true,"version":"5.9.3"} \ No newline at end of file diff --git a/test/nuxt/server/utils/dependency-analysis.spec.ts b/test/unit/server/utils/dependency-analysis.spec.ts similarity index 100% rename from test/nuxt/server/utils/dependency-analysis.spec.ts rename to test/unit/server/utils/dependency-analysis.spec.ts diff --git a/test/nuxt/server/utils/dependency-resolver.spec.ts b/test/unit/server/utils/dependency-resolver.spec.ts similarity index 100% rename from test/nuxt/server/utils/dependency-resolver.spec.ts rename to test/unit/server/utils/dependency-resolver.spec.ts diff --git a/test/nuxt/server/utils/file-tree.spec.ts b/test/unit/server/utils/file-tree.spec.ts similarity index 100% rename from test/nuxt/server/utils/file-tree.spec.ts rename to test/unit/server/utils/file-tree.spec.ts diff --git a/test/nuxt/server/utils/readme.spec.ts b/test/unit/server/utils/readme.spec.ts similarity index 100% rename from test/nuxt/server/utils/readme.spec.ts rename to test/unit/server/utils/readme.spec.ts From c42d4b64cab3e607e92ae85f882d1a528005f836 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Mon, 2 Feb 2026 00:08:51 +0000 Subject: [PATCH 5/5] chore: drop tsbuildinfo --- test/tsconfig.tsbuildinfo | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test/tsconfig.tsbuildinfo diff --git a/test/tsconfig.tsbuildinfo b/test/tsconfig.tsbuildinfo deleted file mode 100644 index 051687231..000000000 --- a/test/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["./unit/a11y-component-coverage.spec.ts","./unit/index.spec.ts","./unit/repo-meta.spec.ts","./unit/uno-preset-rtl.spec.ts","./unit/app/utils/install-command.spec.ts","./unit/app/utils/install-scripts.spec.ts","./unit/app/utils/npm.spec.ts","./unit/app/utils/package-name.spec.ts","./unit/app/utils/platform-packages.spec.ts","./unit/app/utils/run-command.spec.ts","./unit/app/utils/versions.spec.ts","./unit/cli/npm-client.spec.ts","./unit/cli/schemas.spec.ts","./unit/cli/server.spec.ts","./unit/server/utils/import-resolver.spec.ts","./unit/server/utils/shiki.spec.ts","./unit/server/utils/docs/text.spec.ts","./unit/shared/types/index.spec.ts","./unit/shared/types/preferences.spec.ts","./unit/shared/utils/async.spec.ts","./unit/shared/utils/git-providers.spec.ts","./unit/shared/utils/package-analysis.spec.ts","./unit/shared/utils/parse-package-param.spec.ts","./unit/shared/utils/severity.spec.ts","./unit/shared/utils/spdx.spec.ts","./unit/shared/utils/url.spec.ts","./e2e/badge.spec.ts","./e2e/create-command.spec.ts","./e2e/docs.spec.ts","./e2e/interactions.spec.ts","./e2e/og-image.spec.ts","./e2e/package-manager-select.spec.ts","./e2e/url-compatibility.spec.ts","./e2e/vulnerabilities.spec.ts"],"errors":true,"version":"5.9.3"} \ No newline at end of file