Notifications inbox (M489), Discover taste-arm fix, web tooling majors #151
+2
-1
@@ -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,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')
|
||||||
|
|||||||
@@ -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', () => ({
|
||||||
|
|||||||
@@ -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() }));
|
||||||
|
|
||||||
|
|||||||
@@ -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', () => ({
|
||||||
|
|||||||
@@ -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,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,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) => {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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(() => ({
|
||||||
|
|||||||
@@ -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,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,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/')
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
@@ -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,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,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,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({
|
||||||
|
|||||||
@@ -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,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,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');
|
||||||
|
|
||||||
|
|||||||
@@ -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> }));
|
||||||
|
|
||||||
|
|||||||
@@ -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(() => ({
|
||||||
|
|||||||
@@ -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}` });
|
||||||
|
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
@@ -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,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
|
||||||
|
|||||||
@@ -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') }));
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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
@@ -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,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()],
|
||||||
|
|||||||
Reference in New Issue
Block a user