Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/app/[username]/components/ErrorMessages.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// @vitest-environment jsdom
import { render, screen } from "@testing-library/react";
import { describe, it, expect } from "vitest";
import ErrorMessages from "./ErrorMessages";
import "@testing-library/jest-dom";

describe("ErrorMessages", () => {
it("returns null when errors array is empty", () => {
const { container } = render(<ErrorMessages errors={[]} />);
expect(container.firstChild).toBeNull();
});

it("returns null when errors is undefined", () => {
// Typecast to any to test the falsy condition handled in the component
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const { container } = render(<ErrorMessages errors={undefined as any} />);
expect(container.firstChild).toBeNull();
});

it("renders a single error message", () => {
const errors = [{ section: "API", message: "Failed to fetch data" }];
render(<ErrorMessages errors={errors} />);

expect(screen.getByText(/API:/)).toBeInTheDocument();
expect(screen.getByText(/Failed to fetch data/)).toBeInTheDocument();
});

it("renders multiple error messages", () => {
const errors = [
{ section: "API", message: "Failed to fetch data" },
{ section: "Database", message: "Connection timeout" }
];
render(<ErrorMessages errors={errors} />);

expect(screen.getByText(/API:/)).toBeInTheDocument();
expect(screen.getByText(/Failed to fetch data/)).toBeInTheDocument();
expect(screen.getByText(/Database:/)).toBeInTheDocument();
expect(screen.getByText(/Connection timeout/)).toBeInTheDocument();
Comment on lines +35 to +38

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Section Message Pairing Is Untested

The multiple-error test checks each section and each message as separate text nodes. If the component renders the API section with the Database message and the Database section with the API message, all four assertions still pass, so this test misses the visible section-to-message mismatch.

Suggested change
expect(screen.getByText(/API:/)).toBeInTheDocument();
expect(screen.getByText(/Failed to fetch data/)).toBeInTheDocument();
expect(screen.getByText(/Database:/)).toBeInTheDocument();
expect(screen.getByText(/Connection timeout/)).toBeInTheDocument();
expect(screen.getByText("API:").closest("div")).toHaveTextContent("API: Failed to fetch data");
expect(screen.getByText("Database:").closest("div")).toHaveTextContent("Database: Connection timeout");
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/app/[username]/components/ErrorMessages.test.tsx
Line: 34-37

Comment:
**Section Message Pairing Is Untested**

The multiple-error test checks each section and each message as separate text nodes. If the component renders the API section with the Database message and the Database section with the API message, all four assertions still pass, so this test misses the visible section-to-message mismatch.

```suggestion
    expect(screen.getByText("API:").closest("div")).toHaveTextContent("API: Failed to fetch data");
    expect(screen.getByText("Database:").closest("div")).toHaveTextContent("Database: Connection timeout");
```

How can I resolve this? If you propose a fix, please make it concise.

});
});
3 changes: 2 additions & 1 deletion vitest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ export default defineConfig({
"src/components/SkillsCard.tsx",
"src/components/LayoutEditor.tsx",
"src/lib/rateLimit.ts",
"src/app/api/og/[username]/route.tsx"
"src/app/api/og/[username]/route.tsx",
"src/app/[username]/components/ErrorMessages.tsx"
],
thresholds: {
lines: 80,
Expand Down
Loading