aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/pages/DeckDetailPage.test.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/pages/DeckDetailPage.test.tsx')
-rw-r--r--src/client/pages/DeckDetailPage.test.tsx73
1 files changed, 22 insertions, 51 deletions
diff --git a/src/client/pages/DeckDetailPage.test.tsx b/src/client/pages/DeckDetailPage.test.tsx
index 35303d9..e02302f 100644
--- a/src/client/pages/DeckDetailPage.test.tsx
+++ b/src/client/pages/DeckDetailPage.test.tsx
@@ -51,13 +51,13 @@ const mockDeck = {
updatedAt: "2024-01-01T00:00:00Z",
};
-// Legacy cards (no noteId) for backward compatibility testing
-const mockLegacyCards = [
+// Basic note-based cards (each with its own note)
+const mockBasicCards = [
{
id: "card-1",
deckId: "deck-1",
- noteId: null,
- isReversed: null,
+ noteId: "note-1",
+ isReversed: false,
front: "Hello",
back: "こんにちは",
state: 0,
@@ -77,8 +77,8 @@ const mockLegacyCards = [
{
id: "card-2",
deckId: "deck-1",
- noteId: null,
- isReversed: null,
+ noteId: "note-2",
+ isReversed: false,
front: "Goodbye",
back: "さようなら",
state: 2,
@@ -143,11 +143,8 @@ const mockNoteBasedCards = [
},
];
-// Mixed cards (both legacy and note-based)
-const mockMixedCards = [...mockLegacyCards, ...mockNoteBasedCards];
-
-// Alias for backward compatibility in existing tests
-const mockCards = mockLegacyCards;
+// Alias for existing tests
+const mockCards = mockBasicCards;
function renderWithProviders(path = "/decks/deck-1") {
const { hook } = memoryLocation({ path, static: true });
@@ -430,8 +427,8 @@ describe("DeckDetailPage", () => {
expect(screen.queryByText("Common Japanese words")).toBeNull();
});
- describe("Delete Card", () => {
- it("shows Delete button for each card", async () => {
+ describe("Delete Note", () => {
+ it("shows Delete button for each note", async () => {
mockFetch
.mockResolvedValueOnce({
ok: true,
@@ -449,7 +446,7 @@ describe("DeckDetailPage", () => {
});
const deleteButtons = screen.getAllByRole("button", {
- name: "Delete card",
+ name: "Delete note",
});
expect(deleteButtons.length).toBe(2);
});
@@ -474,7 +471,7 @@ describe("DeckDetailPage", () => {
});
const deleteButtons = screen.getAllByRole("button", {
- name: "Delete card",
+ name: "Delete note",
});
const firstDeleteButton = deleteButtons[0];
if (firstDeleteButton) {
@@ -483,7 +480,7 @@ describe("DeckDetailPage", () => {
expect(screen.getByRole("dialog")).toBeDefined();
expect(
- screen.getByRole("heading", { name: "Delete Card" }),
+ screen.getByRole("heading", { name: "Delete Note" }),
).toBeDefined();
});
@@ -507,7 +504,7 @@ describe("DeckDetailPage", () => {
});
const deleteButtons = screen.getAllByRole("button", {
- name: "Delete card",
+ name: "Delete note",
});
const firstDeleteButton = deleteButtons[0];
if (firstDeleteButton) {
@@ -521,7 +518,7 @@ describe("DeckDetailPage", () => {
expect(screen.queryByRole("dialog")).toBeNull();
});
- it("deletes card and refreshes list on confirmation", async () => {
+ it("deletes note and refreshes list on confirmation", async () => {
const user = userEvent.setup();
mockFetch
@@ -537,7 +534,7 @@ describe("DeckDetailPage", () => {
// Delete request
.mockResolvedValueOnce({
ok: true,
- json: async () => ({}),
+ json: async () => ({ success: true }),
})
// Refresh cards after deletion
.mockResolvedValueOnce({
@@ -552,7 +549,7 @@ describe("DeckDetailPage", () => {
});
const deleteButtons = screen.getAllByRole("button", {
- name: "Delete card",
+ name: "Delete note",
});
const firstDeleteButton = deleteButtons[0];
if (firstDeleteButton) {
@@ -575,8 +572,8 @@ describe("DeckDetailPage", () => {
expect(screen.queryByRole("dialog")).toBeNull();
});
- // Verify DELETE request was made
- expect(mockFetch).toHaveBeenCalledWith("/api/decks/deck-1/cards/card-1", {
+ // Verify DELETE request was made to notes endpoint
+ expect(mockFetch).toHaveBeenCalledWith("/api/decks/deck-1/notes/note-1", {
method: "DELETE",
headers: { Authorization: "Bearer access-token" },
});
@@ -604,7 +601,7 @@ describe("DeckDetailPage", () => {
.mockResolvedValueOnce({
ok: false,
status: 500,
- json: async () => ({ error: "Failed to delete card" }),
+ json: async () => ({ error: "Failed to delete note" }),
});
renderWithProviders();
@@ -614,7 +611,7 @@ describe("DeckDetailPage", () => {
});
const deleteButtons = screen.getAllByRole("button", {
- name: "Delete card",
+ name: "Delete note",
});
const firstDeleteButton = deleteButtons[0];
if (firstDeleteButton) {
@@ -635,7 +632,7 @@ describe("DeckDetailPage", () => {
// Error should be displayed in the modal
await waitFor(() => {
expect(screen.getByRole("alert").textContent).toContain(
- "Failed to delete card",
+ "Failed to delete note",
);
});
});
@@ -665,32 +662,6 @@ describe("DeckDetailPage", () => {
expect(noteCards.length).toBe(2);
});
- it("displays legacy cards separately from note groups", async () => {
- mockFetch
- .mockResolvedValueOnce({
- ok: true,
- json: async () => ({ deck: mockDeck }),
- })
- .mockResolvedValueOnce({
- ok: true,
- json: async () => ({ cards: mockMixedCards }),
- });
-
- renderWithProviders();
-
- await waitFor(() => {
- // Should show both note groups and legacy cards
- expect(screen.getByTestId("note-group")).toBeDefined();
- });
-
- const legacyCards = screen.getAllByTestId("legacy-card");
- expect(legacyCards.length).toBe(2); // 2 legacy cards
-
- // Should show "Legacy" badge for legacy cards
- const legacyBadges = screen.getAllByText("Legacy");
- expect(legacyBadges.length).toBe(2);
- });
-
it("shows Normal and Reversed badges for note-based cards", async () => {
mockFetch
.mockResolvedValueOnce({