Just a whole lot of crap
This commit is contained in:
194
tests/tui/components/common/ErrorBoundary.test.js
Normal file
194
tests/tui/components/common/ErrorBoundary.test.js
Normal file
@@ -0,0 +1,194 @@
|
||||
const React = require("react");
|
||||
const ErrorBoundary = require("../../../../src/tui/components/common/ErrorBoundary");
|
||||
|
||||
// Mock component that throws an error
|
||||
const ThrowError = ({ shouldThrow = false, message = "Test error" }) => {
|
||||
if (shouldThrow) {
|
||||
throw new Error(message);
|
||||
}
|
||||
return React.createElement("div", {}, "No error");
|
||||
};
|
||||
|
||||
describe("ErrorBoundary Component", () => {
|
||||
// Suppress console.error for these tests
|
||||
beforeEach(() => {
|
||||
jest.spyOn(console, "error").mockImplementation(() => {});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
test("component can be created with default props", () => {
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{},
|
||||
React.createElement("div", {}, "Child content")
|
||||
);
|
||||
expect(component).toBeDefined();
|
||||
expect(component.type).toBe(ErrorBoundary);
|
||||
});
|
||||
|
||||
test("component renders children when no error occurs", () => {
|
||||
const childContent = React.createElement("div", {}, "Test content");
|
||||
const component = React.createElement(ErrorBoundary, {}, childContent);
|
||||
|
||||
expect(component.props.children).toBe(childContent);
|
||||
});
|
||||
|
||||
test("component accepts onError callback", () => {
|
||||
const mockOnError = jest.fn();
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{ onError: mockOnError },
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component.props.onError).toBe(mockOnError);
|
||||
});
|
||||
|
||||
test("component accepts onRetry callback", () => {
|
||||
const mockOnRetry = jest.fn();
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{ onRetry: mockOnRetry },
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component.props.onRetry).toBe(mockOnRetry);
|
||||
});
|
||||
|
||||
test("component accepts onReset callback", () => {
|
||||
const mockOnReset = jest.fn();
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{ onReset: mockOnReset },
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component.props.onReset).toBe(mockOnReset);
|
||||
});
|
||||
|
||||
test("component accepts onExit callback", () => {
|
||||
const mockOnExit = jest.fn();
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{ onExit: mockOnExit },
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component.props.onExit).toBe(mockOnExit);
|
||||
});
|
||||
|
||||
test("component accepts maxRetries prop", () => {
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{ maxRetries: 5 },
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component.props.maxRetries).toBe(5);
|
||||
});
|
||||
|
||||
test("component accepts showDetails prop", () => {
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{ showDetails: false },
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component.props.showDetails).toBe(false);
|
||||
});
|
||||
|
||||
test("component accepts title prop", () => {
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{ title: "Custom Error Title" },
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component.props.title).toBe("Custom Error Title");
|
||||
});
|
||||
|
||||
test("component accepts custom fallback function", () => {
|
||||
const mockFallback = jest.fn(() =>
|
||||
React.createElement("div", {}, "Custom error")
|
||||
);
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{ fallback: mockFallback },
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component.props.fallback).toBe(mockFallback);
|
||||
});
|
||||
|
||||
test("component accepts all expected props", () => {
|
||||
const fullProps = {
|
||||
onError: jest.fn(),
|
||||
onRetry: jest.fn(),
|
||||
onReset: jest.fn(),
|
||||
onExit: jest.fn(),
|
||||
maxRetries: 3,
|
||||
showDetails: true,
|
||||
title: "Test Error",
|
||||
fallback: jest.fn(),
|
||||
};
|
||||
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
fullProps,
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
|
||||
expect(component).toBeDefined();
|
||||
expect(component.props).toMatchObject(fullProps);
|
||||
});
|
||||
|
||||
test("component is a class component", () => {
|
||||
expect(typeof ErrorBoundary).toBe("function");
|
||||
expect(ErrorBoundary.prototype.render).toBeDefined();
|
||||
expect(ErrorBoundary.prototype.componentDidCatch).toBeDefined();
|
||||
});
|
||||
|
||||
test("component has getDerivedStateFromError static method", () => {
|
||||
expect(typeof ErrorBoundary.getDerivedStateFromError).toBe("function");
|
||||
});
|
||||
|
||||
test("getDerivedStateFromError returns correct state", () => {
|
||||
const error = new Error("Test error");
|
||||
const newState = ErrorBoundary.getDerivedStateFromError(error);
|
||||
|
||||
expect(newState).toEqual({ hasError: true });
|
||||
});
|
||||
|
||||
test("component handles multiple children", () => {
|
||||
const child1 = React.createElement("div", {}, "Child 1");
|
||||
const child2 = React.createElement("div", {}, "Child 2");
|
||||
const component = React.createElement(ErrorBoundary, {}, child1, child2);
|
||||
|
||||
expect(component.props.children).toEqual([child1, child2]);
|
||||
});
|
||||
|
||||
test("component has correct default behavior", () => {
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{},
|
||||
React.createElement("div", {}, "Test")
|
||||
);
|
||||
|
||||
// Check that component can be created without required props
|
||||
expect(component).toBeDefined();
|
||||
expect(component.type).toBe(ErrorBoundary);
|
||||
});
|
||||
|
||||
test("component type is correct", () => {
|
||||
const component = React.createElement(
|
||||
ErrorBoundary,
|
||||
{},
|
||||
React.createElement("div", {}, "Child")
|
||||
);
|
||||
expect(typeof ErrorBoundary).toBe("function");
|
||||
expect(component.type).toBe(ErrorBoundary);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user