Skip to content

Commit

Permalink
Test bad json file
Browse files Browse the repository at this point in the history
  • Loading branch information
bduhbya committed May 25, 2024
1 parent 2893a90 commit 497068d
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 18 deletions.
40 changes: 22 additions & 18 deletions src/app/components/CombatTracker.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import CombatTracker from "./CombatTracker";
import "@testing-library/jest-dom";
import React from "react";
import strings from "../../strings";
import { mockCharacterFile } from "../lib/definitionMocks";
import { mockBadCharacterFile, mockCharacterFile } from "../lib/definitionMocks";
import { promptForFile } from "../lib/fileInput";
import { InitiativeInputDialogProps } from "./InitiativeInputDialog";
import { Character } from "../lib/definitions";
Expand Down Expand Up @@ -52,36 +52,40 @@ describe("CombatTracker", () => {
expect(getByText(strings.descendingLabel)).toBeInTheDocument();
});

it("handles null file input", async () => {
const { getByText } = render(<CombatTracker />);
(
promptForFile as jest.MockedFunction<typeof promptForFile>
).mockResolvedValue(null);
// it("handles null file input", async () => {
// const { getByText } = render(<CombatTracker />);
// (
// promptForFile as jest.MockedFunction<typeof promptForFile>
// ).mockResolvedValue(null);

fireEvent.click(getByText(strings.addToCombatButton));
// fireEvent.click(getByText(strings.addToCombatButton));

// Wait for promises to resolve
await new Promise((resolve) => setTimeout(resolve, 0));
// // Wait for promises to resolve
// await new Promise((resolve) => setTimeout(resolve, 0));

await waitFor(() =>
expect(getByText("Mock InitiativeInputDialog")).toBeInTheDocument(),
);
// File not selected dialog should be displayed
expect(getByText(strings.fileNotSelected)).toBeInTheDocument();
});
// await waitFor(() =>
// expect(getByText("Mock InitiativeInputDialog")).toBeInTheDocument(),
// );
// // File not selected dialog should be displayed
// await waitFor(() =>
// expect(getByText(strings.fileNotSelected)).toBeInTheDocument(),
// );
// });

it("handles file input error", async () => {
it("handles bad json format", async () => {
const { getByText } = render(<CombatTracker />);
(
promptForFile as jest.MockedFunction<typeof promptForFile>
).mockRejectedValue(new Error("File input error"));
).mockResolvedValue(mockBadCharacterFile);

fireEvent.click(getByText(strings.addToCombatButton));

// Wait for promises to resolve
await new Promise((resolve) => setTimeout(resolve, 0));

expect(getByText(strings.fileNotSelected)).toBeInTheDocument();
await waitFor(() =>
expect(getByText(strings.fileParsingError)).toBeInTheDocument(),
);
});

it("inserts character", async () => {
Expand Down
13 changes: 13 additions & 0 deletions src/app/lib/definitionMocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,22 @@ const mockCharacterDataPath = path.join(
);
const mockCharacterData = fs.readFileSync(mockCharacterDataPath, "utf8");

const mockBadCharacterDataPath = path.join(
__dirname,
"..",
"testData",
"bad_character_data.json",
);
const mockBadCharacterData = fs.readFileSync(mockBadCharacterDataPath, "utf8");

const mockCharacterDataParsed = JSON.parse(mockCharacterData);
const characterFile = new File([mockCharacterData], mockCharacterDataPath);

export const mockBadCharacterFile = new File(
[mockBadCharacterData],
mockBadCharacterDataPath,
);

export const mockCharacter: Character = {
name: mockCharacterDataParsed.name,
initiative: 0,
Expand Down

0 comments on commit 497068d

Please sign in to comment.