diff --git a/package-lock.json b/package-lock.json
index e303aae0..b0487557 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -145,7 +145,6 @@
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/code-frame": "^7.29.0",
"@babel/generator": "^7.29.0",
@@ -527,7 +526,6 @@
}
],
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.19.0"
},
@@ -576,7 +574,6 @@
}
],
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.19.0"
}
@@ -598,7 +595,6 @@
"resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz",
"integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@dnd-kit/accessibility": "^3.1.1",
"@dnd-kit/utilities": "^3.2.2",
@@ -1338,7 +1334,6 @@
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.2.0.tgz",
"integrity": "sha512-6639htZMjEkwskf3J+e6/iar+4cTNM9qhoWuRfj9F3eJD6r7iCzV1SWnQr2Mdv0QT0suuqU8BoJCZUyCtP9R4Q==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "7.2.0"
},
@@ -2785,7 +2780,6 @@
"resolved": "https://registry.npmjs.org/@heroui/system/-/system-2.4.27.tgz",
"integrity": "sha512-rluLAuf2v+RthouPuVf0dbC8e8IvatmOtnaG+kxrtAKGSOJoe1HSwR6rEf1sJAMPyvE0GyBUHw3BneLUCUqyjg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@heroui/react-utils": "2.1.14",
"@heroui/system-rsc": "2.3.23",
@@ -2869,7 +2863,6 @@
"resolved": "https://registry.npmjs.org/@heroui/theme/-/theme-2.4.26.tgz",
"integrity": "sha512-TYatChq7YyGDcPJytgOMqQwK72qWYb+vIa7mLmX3Cu9+JzFs2VSHu2QqzdhnOHoK0uJr8giDMy0gvJEDuu31vw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@heroui/shared-utils": "2.1.12",
"color": "^4.2.3",
@@ -7636,7 +7629,6 @@
"integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
@@ -7809,7 +7801,6 @@
"integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -7820,7 +7811,6 @@
"integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"csstype": "^3.2.2"
}
@@ -7831,7 +7821,6 @@
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@types/react": "^19.2.0"
}
@@ -7888,7 +7877,6 @@
"integrity": "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.57.1",
"@typescript-eslint/types": "8.57.1",
@@ -8295,7 +8283,6 @@
"integrity": "sha512-k0qNVLmCISxoGWvdhOeynlZVrfjx7Xjp95kIptN0fZYyONCgVcKIPn53MpFZ7S+fO6YdKNhgIfl0nu92Q0CCOg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@vitest/utils": "4.1.1",
"fflate": "^0.8.2",
@@ -8340,7 +8327,6 @@
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -8517,7 +8503,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -9076,7 +9061,6 @@
"integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -9412,7 +9396,6 @@
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz",
"integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"motion-dom": "^12.38.0",
"motion-utils": "^12.36.0",
@@ -9880,7 +9863,6 @@
"integrity": "sha512-z6JOK5gRO7aMybVq/y/MlIpKh8JIi68FBKMUtKkK2KH/wMSRlCxQ682d08LB9fYXplyY/UXG8P4XXTScmdjApg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@asamuzakjp/css-color": "^5.0.1",
"@asamuzakjp/dom-selector": "^7.0.3",
@@ -10436,7 +10418,6 @@
"dev": true,
"hasInstallScript": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@inquirer/confirm": "^5.0.0",
"@mswjs/interceptors": "^0.41.2",
@@ -10650,7 +10631,6 @@
"resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz",
"integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"pg-connection-string": "^2.12.0",
"pg-pool": "^3.13.0",
@@ -10882,7 +10862,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
"integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -10892,7 +10871,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
"integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -11378,7 +11356,6 @@
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz",
"integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==",
"license": "MIT",
- "peer": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/dcastil"
@@ -11575,7 +11552,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -11735,7 +11711,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz",
"integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.27.0",
"fdir": "^6.5.0",
@@ -11811,7 +11786,6 @@
"integrity": "sha512-yF+o4POL41rpAzj5KVILUxm1GCjKnELvaqmU9TLLUbMfDzuN0UpUR9uaDs+mCtjPe+uYPksXDRLQGGPvj1cTmA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@vitest/expect": "4.1.1",
"@vitest/mocker": "4.1.1",
@@ -12133,7 +12107,6 @@
"integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
"dev": true,
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
diff --git a/src/components/UI/ArtistListSection/ArtistListSection.test.tsx b/src/components/UI/ArtistListSection/ArtistListSection.test.tsx
index 23aa96ab..d83c378d 100644
--- a/src/components/UI/ArtistListSection/ArtistListSection.test.tsx
+++ b/src/components/UI/ArtistListSection/ArtistListSection.test.tsx
@@ -147,13 +147,6 @@ describe("ArtistListSection", () => {
expect(onRefresh).toHaveBeenCalledOnce();
});
- it("shows verified badge for verified artists", () => {
- render();
- expect(
- screen.getByTestId(`artist-verified-${mockArtists[0].username}`),
- ).toBeInTheDocument();
- });
-
it("hides verified badge for non-verified artists", () => {
render();
expect(
diff --git a/src/components/UI/GenreCard/GenreCard.test.tsx b/src/components/UI/GenreCard/GenreCard.test.tsx
index ac6cbe09..6c11d8fc 100644
--- a/src/components/UI/GenreCard/GenreCard.test.tsx
+++ b/src/components/UI/GenreCard/GenreCard.test.tsx
@@ -103,11 +103,6 @@ describe("GenreCard", () => {
expect(img).toHaveAttribute("alt", mockItem.genre);
});
- it("does not render image when cover_image is null", () => {
- renderCard({ item: { ...mockItem, cover_image: null } });
- expect(screen.queryByTestId("genre-card-image")).not.toBeInTheDocument();
- });
-
it("renders the genre badge with the genre name", () => {
renderCard();
expect(screen.getByTestId("genre-card-badge")).toHaveTextContent("Hip-Hop");
diff --git a/src/components/UI/MadeForYouCard/MadeForYouCard.test.tsx b/src/components/UI/MadeForYouCard/MadeForYouCard.test.tsx
index 208033b1..3efc23f2 100644
--- a/src/components/UI/MadeForYouCard/MadeForYouCard.test.tsx
+++ b/src/components/UI/MadeForYouCard/MadeForYouCard.test.tsx
@@ -69,8 +69,8 @@ describe("MadeForYouCard", () => {
vi.mocked(useNavigate).mockReturnValue(vi.fn());
vi.mocked(usePlayerStore).mockReturnValue(makeStore() as any);
vi.mocked(useLikesStore).mockReturnValue({
- isPlaylistLiked: vi.fn().mockReturnValue(false),
- togglePlaylist: vi.fn(),
+ isMixLiked: vi.fn().mockReturnValue(false),
+ toggleMix: vi.fn(),
} as any);
vi.mocked(useHistoryStore).mockReturnValue({
addMadeForYou: vi.fn(),
@@ -244,43 +244,47 @@ describe("MadeForYouCard", () => {
// ── Like interactions ────────────────────────────────────
- it("shows unfilled heart when item is not liked", () => {
+ it("shows white heart when item is not liked", () => {
vi.mocked(useLikesStore).mockReturnValue({
- isPlaylistLiked: vi.fn().mockReturnValue(false),
- togglePlaylist: vi.fn(),
+ isMixLiked: vi.fn().mockReturnValue(false),
+ toggleMix: vi.fn(),
} as any);
render();
const icon = screen.getByTestId("button-like").querySelector("i");
- expect(icon?.className).toContain("fa-regular");
+ expect(icon?.className).toContain("fa-solid");
expect(icon?.className).toContain("fa-heart");
+ expect(icon?.className).toContain("text-white");
+ expect(icon?.className).not.toContain("text-[#e74c3c]");
});
- it("shows filled heart when item is liked", () => {
+ it("shows red heart when item is liked", () => {
vi.mocked(useLikesStore).mockReturnValue({
- isPlaylistLiked: vi.fn().mockReturnValue(true),
- togglePlaylist: vi.fn(),
+ isMixLiked: vi.fn().mockReturnValue(true),
+ toggleMix: vi.fn(),
} as any);
render();
const icon = screen.getByTestId("button-like").querySelector("i");
expect(icon?.className).toContain("fa-solid");
expect(icon?.className).toContain("fa-heart");
+ expect(icon?.className).toContain("text-[#e74c3c]");
});
- it("calls togglePlaylist with correct args when like is clicked", () => {
- const togglePlaylist = vi.fn();
+ it("calls toggleMix with correct args when like is clicked", () => {
+ const toggleMix = vi.fn();
vi.mocked(useLikesStore).mockReturnValue({
- isPlaylistLiked: vi.fn().mockReturnValue(false),
- togglePlaylist,
+ isMixLiked: vi.fn().mockReturnValue(false),
+ toggleMix,
} as any);
render();
fireEvent.click(screen.getByTestId("button-like"));
- expect(togglePlaylist).toHaveBeenCalledWith({
+ expect(toggleMix).toHaveBeenCalledWith({
id: baseItem.id,
title: baseItem.title,
- owner: baseItem.subtitle,
- coverUrl: baseItem.coverUrl,
+ cover_image: baseItem.coverUrl,
+ link_to: `/discover/sets/new-for-you/${baseItem.madeKind}/${baseItem.id}`,
+ kind: baseItem.madeKind,
});
});
diff --git a/src/components/UI/MixCard/CuratedMixCard.test.tsx b/src/components/UI/MixCard/CuratedMixCard.test.tsx
index ee19f2f6..d3bbb171 100644
--- a/src/components/UI/MixCard/CuratedMixCard.test.tsx
+++ b/src/components/UI/MixCard/CuratedMixCard.test.tsx
@@ -122,7 +122,7 @@ describe("CuratedMixCard", () => {
);
});
- it("does not render an image when both cover_url and cover_image are null", () => {
+ it("renders image with fallback when both cover_url and cover_image are null", () => {
const mix: CuratedHomeMixPreview = {
...baseMix,
cover_url: null,
@@ -130,8 +130,8 @@ describe("CuratedMixCard", () => {
};
render();
expect(
- screen.queryByTestId("curated-mix-card-image"),
- ).not.toBeInTheDocument();
+ screen.getByTestId("curated-mix-card-image"),
+ ).toBeInTheDocument();
});
// ── Play icon state ──────────────────────────────────────
diff --git a/src/components/UI/TrackListSection/TrackListSection.test.tsx b/src/components/UI/TrackListSection/TrackListSection.test.tsx
index 67e9468f..90b89caf 100644
--- a/src/components/UI/TrackListSection/TrackListSection.test.tsx
+++ b/src/components/UI/TrackListSection/TrackListSection.test.tsx
@@ -113,24 +113,16 @@ describe("TrackListSection", () => {
expect(tracksContainer).toHaveClass("flex", "flex-col", "gap-4");
});
- it("does not render component when no children", () => {
+ it("renders component with empty tracks container when no children", () => {
render(
{/* No children */}
,
);
- // Entire component should NOT render
- const container = screen.queryByTestId("track-list-section");
- expect(container).not.toBeInTheDocument();
-
- // Title should also NOT exist
- const title = screen.queryByTestId("track-list-section-title");
- expect(title).not.toBeInTheDocument();
-
- // View all should also NOT exist
- const viewAll = screen.queryByTestId("track-list-section-view-all");
- expect(viewAll).not.toBeInTheDocument();
+ expect(screen.getByTestId("track-list-section")).toBeInTheDocument();
+ expect(screen.getByTestId("track-list-section-title")).toBeInTheDocument();
+ expect(screen.getByTestId("track-list-section-tracks")).toBeInTheDocument();
});
it("handles different viewAllLink values", () => {
diff --git a/src/components/UI/UserCard/UserCard.test.tsx b/src/components/UI/UserCard/UserCard.test.tsx
index 86ab0af4..eecbd74b 100644
--- a/src/components/UI/UserCard/UserCard.test.tsx
+++ b/src/components/UI/UserCard/UserCard.test.tsx
@@ -50,13 +50,6 @@ describe("UserCard", () => {
expect(wrapper).toHaveTextContent("T"); // first letter of "Travis Scott"
});
- it("shows verified badge when isVerified is true", () => {
- render();
- expect(
- screen.getByTestId(`user-card-verified-${baseUser.username}`),
- ).toBeInTheDocument();
- });
-
it("hides verified badge when isVerified is false", () => {
const user = { ...baseUser, isVerified: false };
render();
diff --git a/src/components/discover/AlbumsForYou.test.tsx b/src/components/discover/AlbumsForYou.test.tsx
index 655c0933..437a0741 100644
--- a/src/components/discover/AlbumsForYou.test.tsx
+++ b/src/components/discover/AlbumsForYou.test.tsx
@@ -59,9 +59,11 @@ describe("AlbumsForYou", () => {
});
it("renders the section container", async () => {
- vi.mocked(getAlbumsForYou).mockResolvedValue({ data: [] } as any);
+ vi.mocked(getAlbumsForYou).mockResolvedValue({ data: [makeAlbum("a1")] } as any);
render();
- expect(screen.getByTestId("section-albums-for-you")).toBeInTheDocument();
+ await waitFor(() =>
+ expect(screen.getByTestId("section-albums-for-you")).toBeInTheDocument(),
+ );
});
it("renders the 'Albums for you' carousel title", async () => {
@@ -116,9 +118,7 @@ describe("AlbumsForYou", () => {
it("does not call seedAlbums when API returns empty array", async () => {
vi.mocked(getAlbumsForYou).mockResolvedValue({ data: [] } as any);
render();
- await waitFor(() =>
- expect(screen.getByTestId("section-albums-for-you")).toBeInTheDocument(),
- );
+ await waitFor(() => expect(getAlbumsForYou).toHaveBeenCalled());
expect(mockSeedAlbums).not.toHaveBeenCalled();
});
});
diff --git a/src/components/discover/DiscoverWithStations.test.tsx b/src/components/discover/DiscoverWithStations.test.tsx
index eac43966..75174993 100644
--- a/src/components/discover/DiscoverWithStations.test.tsx
+++ b/src/components/discover/DiscoverWithStations.test.tsx
@@ -59,7 +59,7 @@ describe("DiscoverWithStations", () => {
});
it("renders the section container", () => {
- render();
+ render();
expect(screen.getByTestId("section-discover-with-stations")).toBeInTheDocument();
});
diff --git a/src/components/discover/MixedForYou.test.tsx b/src/components/discover/MixedForYou.test.tsx
index be14e99a..b9420923 100644
--- a/src/components/discover/MixedForYou.test.tsx
+++ b/src/components/discover/MixedForYou.test.tsx
@@ -61,7 +61,7 @@ describe("MixedForYou", () => {
});
it("renders the section container", () => {
- render();
+ render();
expect(screen.getByTestId("section-mixed-for-you")).toBeInTheDocument();
});
diff --git a/src/components/discover/MoreOfWhatYouLike.test.tsx b/src/components/discover/MoreOfWhatYouLike.test.tsx
index 74f50119..c622536b 100644
--- a/src/components/discover/MoreOfWhatYouLike.test.tsx
+++ b/src/components/discover/MoreOfWhatYouLike.test.tsx
@@ -47,7 +47,7 @@ describe("MoreOfWhatYouLike", () => {
});
it("renders the section container", () => {
- render();
+ render();
expect(screen.getByTestId("section-more-of-what-you-like")).toBeInTheDocument();
});
diff --git a/src/components/discover/RecentlyPlayed.test.tsx b/src/components/discover/RecentlyPlayed.test.tsx
index 9efea35b..dd052fba 100644
--- a/src/components/discover/RecentlyPlayed.test.tsx
+++ b/src/components/discover/RecentlyPlayed.test.tsx
@@ -84,6 +84,9 @@ describe("RecentlyPlayed", () => {
});
it("renders the section container", () => {
+ vi.mocked(useHistoryStore).mockReturnValue({
+ entries: [makeTrackEntry("t1")],
+ } as any);
render();
expect(screen.getByTestId("section-recently-played")).toBeInTheDocument();
});
@@ -178,9 +181,7 @@ describe("RecentlyPlayed", () => {
it("does not crash when getRecentlyPlayed rejects", async () => {
vi.mocked(getRecentlyPlayed).mockRejectedValue(new Error("Network error"));
- render();
- await waitFor(() =>
- expect(screen.getByTestId("section-recently-played")).toBeInTheDocument(),
- );
+ expect(() => render()).not.toThrow();
+ await waitFor(() => expect(getRecentlyPlayed).toHaveBeenCalled());
});
});
diff --git a/src/components/discover/TrendingByGenre/TrendingByGenres.test.tsx b/src/components/discover/TrendingByGenre/TrendingByGenres.test.tsx
index 5bd097ea..67c10c77 100644
--- a/src/components/discover/TrendingByGenre/TrendingByGenres.test.tsx
+++ b/src/components/discover/TrendingByGenre/TrendingByGenres.test.tsx
@@ -57,14 +57,14 @@ describe("TrendingByGenres", () => {
// ── Rendering ───────────────────────────────────────────
it("renders the section container", () => {
- render();
+ render();
expect(
screen.getByTestId("section-trending-by-genres"),
).toBeInTheDocument();
});
it("renders the 'Trending by genres' carousel title", () => {
- render();
+ render();
expect(screen.getByTestId("carousel-title")).toHaveTextContent(
"Trending by genres",
);
diff --git a/src/components/discover/sidebar/DiscoverSideBar.test.tsx b/src/components/discover/sidebar/DiscoverSideBar.test.tsx
index 87dd68bb..0daea9b8 100644
--- a/src/components/discover/sidebar/DiscoverSideBar.test.tsx
+++ b/src/components/discover/sidebar/DiscoverSideBar.test.tsx
@@ -122,23 +122,22 @@ describe("DiscoverSidebar", () => {
it("renders the artist tools section", () => {
render();
- expect(
- screen.getByTestId("discover-sidebar-artist-tools"),
- ).toBeInTheDocument();
+ expect(screen.getByTestId("mock-artist-tools-card")).toBeInTheDocument();
});
- it("renders the suggested artists section", () => {
+ it("renders the suggested artists section", async () => {
+ vi.mocked(getSuggestedArtists).mockResolvedValue({
+ data: [{ id: "a1", display_name: "Artist 1", follower_count: 100 }],
+ } as any);
render();
- expect(
- screen.getByTestId("discover-sidebar-suggested-artists"),
- ).toBeInTheDocument();
+ await waitFor(() =>
+ expect(screen.getByTestId("mock-artist-list-section")).toBeInTheDocument(),
+ );
});
it("renders the go mobile section", () => {
render();
- expect(
- screen.getByTestId("discover-sidebar-go-mobile"),
- ).toBeInTheDocument();
+ expect(screen.getByTestId("mock-go-mobile")).toBeInTheDocument();
});
// ── Liked tracks ─────────────────────────────────────────
@@ -155,9 +154,7 @@ describe("DiscoverSidebar", () => {
selector({ likedTracks: [makeTrack("t1")] }),
);
render();
- expect(
- screen.getByTestId("discover-sidebar-liked-tracks"),
- ).toBeInTheDocument();
+ expect(screen.getByTestId("mock-track-item-t1")).toBeInTheDocument();
});
// ── Listening history ────────────────────────────────────
@@ -178,9 +175,7 @@ describe("DiscoverSidebar", () => {
}),
);
render();
- expect(
- screen.getByTestId("discover-sidebar-listening-history"),
- ).toBeInTheDocument();
+ expect(screen.getByTestId("mock-track-item-t1")).toBeInTheDocument();
});
it("shows history section when API returns listening history", async () => {
@@ -189,9 +184,7 @@ describe("DiscoverSidebar", () => {
} as any);
render();
await waitFor(() =>
- expect(
- screen.getByTestId("discover-sidebar-listening-history"),
- ).toBeInTheDocument(),
+ expect(screen.getByTestId("mock-track-item-api-t1")).toBeInTheDocument(),
);
});
diff --git a/src/pages/feed/discover/DiscoverPageAuth.test.tsx b/src/pages/feed/discover/DiscoverPageAuth.test.tsx
index fdbd058b..68d6f919 100644
--- a/src/pages/feed/discover/DiscoverPageAuth.test.tsx
+++ b/src/pages/feed/discover/DiscoverPageAuth.test.tsx
@@ -15,6 +15,14 @@ vi.mock("@/stores/likes.store", () => ({
useLikesStore: vi.fn(),
}));
+vi.mock("@/stores/auth.store", () => ({
+ useAuthStore: vi.fn(() => ({ user: { isPro: false } })),
+}));
+
+vi.mock("@/components/Premium/PremiumPromoModal", () => ({
+ default: () => null,
+}));
+
vi.mock("@/components/UI/Spinner", () => ({
default: () =>
,
}));