import { render } from "@testing-library/react";
import React from "react";
import CalendarContainer from "../calendar_container";
import { CalendarContainer as CalendarContainerFromIndex } from "../index";
describe("CalendarContainer", () => {
it("renders with default props", () => {
const { container } = render(
Test Content
,
);
const dialog = container.querySelector('[role="dialog"]');
expect(dialog).toBeTruthy();
expect(dialog?.getAttribute("aria-label")).toBe("Choose Date");
expect(dialog?.getAttribute("aria-modal")).toBe("true");
expect(dialog?.textContent).toBe("Test Content");
});
it("exposes CalendarContainer via the package entry point", () => {
const { container } = render(
Entry Content
,
);
expect(container.querySelector('[role="dialog"]')).toBeTruthy();
});
it("renders with showTimeSelectOnly prop", () => {
const { container } = render(
Time Content
,
);
const dialog = container.querySelector('[role="dialog"]');
expect(dialog?.getAttribute("aria-label")).toBe("Choose Time");
});
it("renders with showTime prop", () => {
const { container } = render(
Date and Time Content
,
);
const dialog = container.querySelector('[role="dialog"]');
expect(dialog?.getAttribute("aria-label")).toBe("Choose Date and Time");
});
it("renders with both showTime and showTimeSelectOnly props", () => {
const { container } = render(
Content
,
);
const dialog = container.querySelector('[role="dialog"]');
// showTimeSelectOnly takes precedence
expect(dialog?.getAttribute("aria-label")).toBe("Choose Time");
});
it("applies custom className", () => {
const { container } = render(
Content
,
);
const dialog = container.querySelector('[role="dialog"]');
expect(dialog?.className).toBe("custom-class");
});
it("renders children correctly", () => {
const { container } = render(
Child 1
Child 2
,
);
expect(container.querySelector('[data-testid="child-1"]')).toBeTruthy();
expect(container.querySelector('[data-testid="child-2"]')).toBeTruthy();
});
it("renders with proper ARIA attributes", () => {
const { container } = render(
Content
,
);
const dialog = container.querySelector('[role="dialog"]');
expect(dialog?.getAttribute("role")).toBe("dialog");
expect(dialog?.getAttribute("aria-modal")).toBe("true");
expect(dialog?.getAttribute("aria-label")).toBe("Choose Date");
});
it("has translate='no' to prevent browser auto-translation breaking the calendar", () => {
// Fixes #5824 - Safari auto-translate breaks calendar navigation
const { container } = render(
Content
,
);
const dialog = container.querySelector('[role="dialog"]');
expect(dialog?.getAttribute("translate")).toBe("no");
});
});