Notifications inbox (M489), Discover taste-arm fix, web tooling majors #151

Merged
bvandeusen merged 26 commits from dev into main 2026-10-08 11:11:09 -04:00
38 changed files with 48 additions and 53 deletions
Showing only changes of commit ca9917d8cd - Show all commits
+2 -1
View File
@@ -33,6 +33,7 @@
"lucide-svelte": "^1.0.1" "lucide-svelte": "^1.0.1"
}, },
"imports": { "imports": {
"#lib/*": "./src/lib/*" "#lib/*": "./src/lib/*",
"#test-utils/*": "./src/test-utils/*"
} }
} }
@@ -1,7 +1,7 @@
import { describe, expect, test, vi } from 'vitest'; import { describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent, waitFor } from '@testing-library/svelte'; import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { readable } from 'svelte/store'; import { readable } from 'svelte/store';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const playlistsData = vi.hoisted(() => ({ const playlistsData = vi.hoisted(() => ({
owned: [ owned: [
+1 -1
View File
@@ -1,6 +1,6 @@
import { describe, expect, test, vi } from 'vitest'; import { describe, expect, test, vi } from 'vitest';
import { render, screen } from '@testing-library/svelte'; import { render, screen } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
const state = vi.hoisted(() => ({ const state = vi.hoisted(() => ({
pageUrl: new URL('http://localhost/admin') pageUrl: new URL('http://localhost/admin')
+1 -1
View File
@@ -4,7 +4,7 @@ import type { AlbumRef, AlbumDetail, TrackRef } from '#lib/api/types.js';
import { FALLBACK_COVER } from '#lib/media/covers.js'; import { FALLBACK_COVER } from '#lib/media/covers.js';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { apiClientMock } from '../../test-utils/mocks/client'; import { apiClientMock } from '../../test-utils/mocks/client';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/api/client.js', () => apiClientMock()); vi.mock('#lib/api/client.js', () => apiClientMock());
vi.mock('#lib/player/store.svelte.js', () => ({ vi.mock('#lib/player/store.svelte.js', () => ({
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists'; import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTracks } from '$test-utils/fixtures/track'; import { makeTracks } from '#test-utils/fixtures/track.js';
vi.mock('$app/navigation', () => ({ goto: vi.fn() })); vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { apiClientMock } from '../../test-utils/mocks/client'; import { apiClientMock } from '../../test-utils/mocks/client';
import type { ArtistRef, TrackRef } from '#lib/api/types.js'; import type { ArtistRef, TrackRef } from '#lib/api/types.js';
import { makeTrack, makeTracks } from '$test-utils/fixtures/track'; import { makeTrack, makeTracks } from '#test-utils/fixtures/track.js';
vi.mock('#lib/api/client.js', () => apiClientMock()); vi.mock('#lib/api/client.js', () => apiClientMock());
vi.mock('#lib/player/store.svelte.js', () => ({ vi.mock('#lib/player/store.svelte.js', () => ({
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists'; import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTracks } from '$test-utils/fixtures/track'; import { makeTracks } from '#test-utils/fixtures/track.js';
vi.mock('$app/navigation', () => ({ goto: vi.fn() })); vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
@@ -4,7 +4,7 @@ import type { TrackRef } from '#lib/api/types.js';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists'; import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists';
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine'; import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
import { makeTracks } from '$test-utils/fixtures/track'; import { makeTracks } from '#test-utils/fixtures/track.js';
vi.mock('#lib/api/likes.js', () => emptyLikesMock()); vi.mock('#lib/api/likes.js', () => emptyLikesMock());
+1 -1
View File
@@ -1,6 +1,6 @@
import { describe, expect, test, vi } from 'vitest'; import { describe, expect, test, vi } from 'vitest';
import { render, screen } from '@testing-library/svelte'; import { render, screen } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
const state = vi.hoisted(() => ({ const state = vi.hoisted(() => ({
pageUrl: new URL('http://localhost/discover') pageUrl: new URL('http://localhost/discover')
+1 -1
View File
@@ -1,7 +1,7 @@
import { afterEach, describe, expect, test, vi } from 'vitest'; import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte'; import { render, screen, fireEvent } from '@testing-library/svelte';
import FlagPopover from './FlagPopover.svelte'; import FlagPopover from './FlagPopover.svelte';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const invalidateMock = vi.fn(); const invalidateMock = vi.fn();
vi.mock('@tanstack/svelte-query', async (orig) => { vi.mock('@tanstack/svelte-query', async (orig) => {
+1 -1
View File
@@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte'; import { render, screen, fireEvent } from '@testing-library/svelte';
import HistoryRow from './HistoryRow.svelte'; import HistoryRow from './HistoryRow.svelte';
import type { HistoryEvent } from '#lib/api/history.js'; import type { HistoryEvent } from '#lib/api/history.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const playQueue = vi.fn(); const playQueue = vi.fn();
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, within } from '@testing-library/svelte';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine'; import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
// Mutable state the mocked store reads from. // Mutable state the mocked store reads from.
const state = vi.hoisted(() => ({ const state = vi.hoisted(() => ({
+1 -1
View File
@@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte'; import { render, screen, fireEvent } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
// QueueTrackRow (rendered inside QueueDrawer → QueueList) now renders a // QueueTrackRow (rendered inside QueueDrawer → QueueList) now renders a
// LikeButton, which reads createLikedIdsQuery. Stub the likes API so the // LikeButton, which reads createLikedIdsQuery. Stub the likes API so the
+1 -1
View File
@@ -1,7 +1,7 @@
import { describe, it, expect, vi, beforeEach } from 'vitest'; import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte'; import { render, screen, fireEvent } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
// QueueTrackRow now renders a LikeButton, which reads createLikedIdsQuery. // QueueTrackRow now renders a LikeButton, which reads createLikedIdsQuery.
// Stub the likes API so the row doesn't need a real QueryClient in context. // Stub the likes API so the row doesn't need a real QueryClient in context.
+1 -1
View File
@@ -1,6 +1,6 @@
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte'; import { render, screen, fireEvent } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
const state = vi.hoisted(() => ({ const state = vi.hoisted(() => ({
pageUrl: new URL('http://localhost/') pageUrl: new URL('http://localhost/')
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists'; import { emptyPlaylistsMock } from '../../test-utils/mocks/playlists';
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine'; import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
// Mutable mock-user handle so individual tests can flip is_admin / null // Mutable mock-user handle so individual tests can flip is_admin / null
// without re-importing the module under test. // without re-importing the module under test.
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine'; import { emptyQuarantineMock } from '../../test-utils/mocks/quarantine';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/player/store.svelte.js', () => ({ vi.mock('#lib/player/store.svelte.js', () => ({
playQueue: vi.fn(), playQueue: vi.fn(),
+1 -1
View File
@@ -21,7 +21,7 @@ import {
} from './store.svelte'; } from './store.svelte';
import { api } from '#lib/api/client.js'; import { api } from '#lib/api/client.js';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
function track(id: string, dur = 200): TrackRef { function track(id: string, dur = 200): TrackRef {
return makeTrack({ return makeTrack({
+1 -1
View File
@@ -2,7 +2,7 @@ import { describe, expect, test } from 'vitest';
import { dbToLinear, gainDb, playingAsAlbum, MAX_BOOST_DB } from './gain'; import { dbToLinear, gainDb, playingAsAlbum, MAX_BOOST_DB } from './gain';
import type { NormalizationPrefs } from '#lib/api/normalization.js'; import type { NormalizationPrefs } from '#lib/api/normalization.js';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const prefs = (over: Partial<NormalizationPrefs> = {}): NormalizationPrefs => ({ const prefs = (over: Partial<NormalizationPrefs> = {}): NormalizationPrefs => ({
mode: 'auto', mode: 'auto',
+1 -1
View File
@@ -1,6 +1,6 @@
import { beforeEach, describe, expect, test, vi } from 'vitest'; import { beforeEach, describe, expect, test, vi } from 'vitest';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/auth/store.svelte.js', () => ({ vi.mock('#lib/auth/store.svelte.js', () => ({
user: { user: {
@@ -1,7 +1,7 @@
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
import { flushSync } from 'svelte'; import { flushSync } from 'svelte';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
function track(id: string): TrackRef { function track(id: string): TrackRef {
return makeTrack({ return makeTrack({
+1 -1
View File
@@ -1,6 +1,6 @@
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { readPersistedQueue, writePersistedQueue, clearPersistedQueue } from './persisted'; import { readPersistedQueue, writePersistedQueue, clearPersistedQueue } from './persisted';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const sampleTrack = makeTrack(); const sampleTrack = makeTrack();
+1 -1
View File
@@ -1,7 +1,7 @@
import { afterEach, beforeEach, describe, expect, test } from 'vitest'; import { afterEach, beforeEach, describe, expect, test } from 'vitest';
import { flushSync } from 'svelte'; import { flushSync } from 'svelte';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
function track(id: string): TrackRef { function track(id: string): TrackRef {
return makeTrack({ return makeTrack({
+1 -1
View File
@@ -19,7 +19,7 @@ import {
} from './store.svelte'; } from './store.svelte';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { writePersistedQueue, clearPersistedQueue } from './persisted'; import { writePersistedQueue, clearPersistedQueue } from './persisted';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/auth/store.svelte.js', () => ({ vi.mock('#lib/auth/store.svelte.js', () => ({
user: { user: {
+1 -1
View File
@@ -1,6 +1,6 @@
import { describe, expect, test, beforeEach } from 'vitest'; import { describe, expect, test, beforeEach } from 'vitest';
import type { TrackRef } from '#lib/api/types.js'; import type { TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
import { import {
selection, toggleOne, selectRange, clearSelection selection, toggleOne, selectRange, clearSelection
} from './store.svelte'; } from './store.svelte';
+1 -1
View File
@@ -1,7 +1,7 @@
import { describe, it, expect } from 'vitest'; import { describe, it, expect } from 'vitest';
import { dayBucket, groupByDay } from './dayGroup'; import { dayBucket, groupByDay } from './dayGroup';
import type { HistoryEvent } from '#lib/api/history.js'; import type { HistoryEvent } from '#lib/api/history.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const NOW = new Date('2026-05-04T14:00:00Z'); const NOW = new Date('2026-05-04T14:00:00Z');
+1 -1
View File
@@ -4,7 +4,7 @@ import { flushSync } from 'svelte';
import { mockQuery } from '../../../test-utils/query'; import { mockQuery } from '../../../test-utils/query';
import { emptyLikesMock } from '../../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../../test-utils/mocks/likes';
import type { AlbumDetail, TrackRef } from '#lib/api/types.js'; import type { AlbumDetail, TrackRef } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const state = vi.hoisted(() => ({ pageParams: { id: 'xyz' } as Record<string, string> })); const state = vi.hoisted(() => ({ pageParams: { id: 'xyz' } as Record<string, string> }));
+4 -4
View File
@@ -1,9 +1,9 @@
import { afterEach, describe, expect, test, vi } from 'vitest'; import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, waitFor, fireEvent } from '@testing-library/svelte'; import { render, screen, waitFor, fireEvent } from '@testing-library/svelte';
import { mockQuery } from '$test-utils/query'; import { mockQuery } from '#test-utils/query.js';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
import { apiClientMock } from '$test-utils/mocks/client'; import { apiClientMock } from '#test-utils/mocks/client.js';
import { emptyLikesMock } from '$test-utils/mocks/likes'; import { emptyLikesMock } from '#test-utils/mocks/likes.js';
import type { AlbumRef } from '#lib/api/types.js'; import type { AlbumRef } from '#lib/api/types.js';
const pageState = vi.hoisted(() => ({ const pageState = vi.hoisted(() => ({
+1 -1
View File
@@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen } from '@testing-library/svelte'; import { render, screen } from '@testing-library/svelte';
import HistoryPage from './+page.svelte'; import HistoryPage from './+page.svelte';
import type { HistoryEvent, HistoryResponse } from '#lib/api/history.js'; import type { HistoryEvent, HistoryResponse } from '#lib/api/history.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const mkTrack = (id: string) => makeTrack({ id: `track-${id}`, title: `Song ${id}` }); const mkTrack = (id: string) => makeTrack({ id: `track-${id}`, title: `Song ${id}` });
+1 -1
View File
@@ -4,7 +4,7 @@ import { mockInfiniteQuery } from '../../../test-utils/query';
import { apiClientMock } from '../../../test-utils/mocks/client'; import { apiClientMock } from '../../../test-utils/mocks/client';
import type { ArtistRef, AlbumRef, TrackRef, Page } from '#lib/api/types.js'; import type { ArtistRef, AlbumRef, TrackRef, Page } from '#lib/api/types.js';
import { readable } from 'svelte/store'; import { readable } from 'svelte/store';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
vi.mock('#lib/api/likes.js', () => ({ vi.mock('#lib/api/likes.js', () => ({
createLikedIdsQuery: () => readable({ createLikedIdsQuery: () => readable({
+4 -4
View File
@@ -1,9 +1,9 @@
import { afterEach, describe, expect, test, vi } from 'vitest'; import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, waitFor, fireEvent } from '@testing-library/svelte'; import { render, screen, waitFor, fireEvent } from '@testing-library/svelte';
import { mockQuery } from '$test-utils/query'; import { mockQuery } from '#test-utils/query.js';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
import { apiClientMock } from '$test-utils/mocks/client'; import { apiClientMock } from '#test-utils/mocks/client.js';
import { emptyLikesMock } from '$test-utils/mocks/likes'; import { emptyLikesMock } from '#test-utils/mocks/likes.js';
import type { AlbumRef } from '#lib/api/types.js'; import type { AlbumRef } from '#lib/api/types.js';
const pageState = vi.hoisted(() => ({ const pageState = vi.hoisted(() => ({
+1 -1
View File
@@ -1,6 +1,6 @@
import { afterEach, describe, expect, test, vi } from 'vitest'; import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent, waitFor } from '@testing-library/svelte'; import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
// vi.hoisted avoids the temporal-dead-zone hazard: mock factories are lazy // vi.hoisted avoids the temporal-dead-zone hazard: mock factories are lazy
// and can run before top-level `let` is initialized, since imports are // and can run before top-level `let` is initialized, since imports are
+1 -1
View File
@@ -3,7 +3,7 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
import { mockInfiniteQuery } from '../../../test-utils/query'; import { mockInfiniteQuery } from '../../../test-utils/query';
import { emptyLikesMock } from '../../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../../test-utils/mocks/likes';
import { apiClientMock } from '../../../test-utils/mocks/client'; import { apiClientMock } from '../../../test-utils/mocks/client';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
import type { AlbumRef, Page } from '#lib/api/types.js'; import type { AlbumRef, Page } from '#lib/api/types.js';
const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/albums?q=miles') })); const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/albums?q=miles') }));
@@ -2,7 +2,7 @@ import { afterEach, describe, expect, test, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/svelte'; import { render, screen, fireEvent } from '@testing-library/svelte';
import { mockInfiniteQuery } from '../../../test-utils/query'; import { mockInfiniteQuery } from '../../../test-utils/query';
import { emptyLikesMock } from '../../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../../test-utils/mocks/likes';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
import type { ArtistRef, Page } from '#lib/api/types.js'; import type { ArtistRef, Page } from '#lib/api/types.js';
const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/artists?q=miles') })); const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/artists?q=miles') }));
+2 -2
View File
@@ -3,9 +3,9 @@ import { render, screen } from '@testing-library/svelte';
import { mockQuery } from '../../test-utils/query'; import { mockQuery } from '../../test-utils/query';
import { emptyLikesMock } from '../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../test-utils/mocks/likes';
import { apiClientMock } from '../../test-utils/mocks/client'; import { apiClientMock } from '../../test-utils/mocks/client';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
import type { ArtistRef, AlbumRef, SearchResponse } from '#lib/api/types.js'; import type { ArtistRef, AlbumRef, SearchResponse } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const state = vi.hoisted(() => ({ const state = vi.hoisted(() => ({
pageUrl: new URL('http://localhost/search') pageUrl: new URL('http://localhost/search')
+2 -2
View File
@@ -3,9 +3,9 @@ import { render, screen, fireEvent } from '@testing-library/svelte';
import { mockInfiniteQuery } from '../../../test-utils/query'; import { mockInfiniteQuery } from '../../../test-utils/query';
import { emptyLikesMock } from '../../../test-utils/mocks/likes'; import { emptyLikesMock } from '../../../test-utils/mocks/likes';
import { emptyQuarantineMock } from '../../../test-utils/mocks/quarantine'; import { emptyQuarantineMock } from '../../../test-utils/mocks/quarantine';
import { pageUrlModule } from '$test-utils/mocks/appState'; import { pageUrlModule } from '#test-utils/mocks/appState.js';
import type { TrackRef, Page } from '#lib/api/types.js'; import type { TrackRef, Page } from '#lib/api/types.js';
import { makeTrack } from '$test-utils/fixtures/track'; import { makeTrack } from '#test-utils/fixtures/track.js';
const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/tracks?q=miles') })); const state = vi.hoisted(() => ({ pageUrl: new URL('http://localhost/search/tracks?q=miles') }));
+2 -8
View File
@@ -57,7 +57,7 @@ const injectGoTokensPlugin = {
}; };
// SvelteKit's options, which lived in svelte.config.js before kit 3. Exported // SvelteKit's options, which lived in svelte.config.js before kit 3. Exported
// so vitest.config.ts runs the same kit setup (the $test-utils alias above all). // so vitest.config.ts runs the same kit setup.
export const kitOptions = { export const kitOptions = {
preprocess: vitePreprocess(), preprocess: vitePreprocess(),
adapter: adapter({ adapter: adapter({
@@ -67,13 +67,7 @@ export const kitOptions = {
precompress: false, precompress: false,
strict: false strict: false
}), }),
files: { assets: 'static' }, files: { assets: 'static' }
alias: {
// test-only helper barrel; resolves the same way #lib does so test
// files can import shared mock factories without ../../../ chains.
'$test-utils': 'src/test-utils',
'$test-utils/*': 'src/test-utils/*'
}
}; };
export default defineConfig({ export default defineConfig({
+1 -1
View File
@@ -1,7 +1,7 @@
import { sveltekit } from '@sveltejs/kit/vite'; import { sveltekit } from '@sveltejs/kit/vite';
import { svelteTesting } from '@testing-library/svelte/vite'; import { svelteTesting } from '@testing-library/svelte/vite';
import { configDefaults, defineConfig } from 'vitest/config'; import { configDefaults, defineConfig } from 'vitest/config';
import { kitOptions } from './vite.config'; import { kitOptions } from './vite.config.ts';
export default defineConfig({ export default defineConfig({
plugins: [sveltekit(kitOptions), svelteTesting()], plugins: [sveltekit(kitOptions), svelteTesting()],