import React from "react";
import { render, screen, within } from "../test/test-utils";
import { Epg } from "../Epg";
import { Layout } from "../components";
import { getLayoutProps, getTestTimeDate } from "../test";
// Import theme
import { theme as defaultTheme } from "../theme";
type Overrides = { [key: string]: any };
function getEpgProps(overrides: Overrides = {}) {
return {
theme: defaultTheme,
sidebarWidth: 100,
...overrides,
};
}
interface RenderEpg {
epgOptions?: Overrides;
layoutOptions?: Overrides;
sliceNumber?: number;
}
function renderEpg({ epgOptions, layoutOptions, sliceNumber }: RenderEpg = {}) {
const layoutProps = getLayoutProps(layoutOptions, sliceNumber);
render(
<>
{/* @ts-ignore:next-line */}
>
);
return { layoutProps };
}
test("should render Epg coponent properly", () => {
const props = getEpgProps();
const layoutProps = getLayoutProps();
render(
{/* @ts-ignore:next-line */}
);
const container = screen.getByTestId("container");
expect(container).toBeInTheDocument();
expect(container).toHaveStyle(`height: 100%; width: 100%`);
const timeline = screen.getByTestId("timeline");
const inTimeline = within(timeline);
expect(timeline).toBeInTheDocument();
expect(inTimeline.getByText("00:00")).toBeInTheDocument();
expect(inTimeline.getAllByTestId("timeline-item")).toHaveLength(24);
const sidebar = screen.getByTestId("sidebar");
const inSidebar = within(sidebar);
expect(sidebar).toBeInTheDocument();
expect(inSidebar.getAllByTestId("sidebar-item")).toHaveLength(1);
expect(inSidebar.getByRole("img", { name: /logo/i })).toHaveAttribute(
"src",
layoutProps.channels[0].logo
);
const content = screen.getByTestId("content");
const inContent = within(content);
expect(content).toBeInTheDocument();
expect(inContent.getAllByTestId("program-item")).toHaveLength(1);
const firstProgram = inContent.getAllByTestId("program-item")[0];
expect(firstProgram).toHaveTextContent(layoutProps.programs[0].data.title);
expect(firstProgram).toHaveStyle(
`top: ${layoutProps.programs[0].position.top}px`
);
expect(firstProgram).toHaveStyle(
`width: ${layoutProps.programs[0].position.width}px`
);
});
test("should set initial Epg props", () => {
const epgOptions = getEpgProps({ width: 1000, height: 600 });
const layoutOptions = {
dayWidth: 7200,
startDate: getTestTimeDate("01"),
endDate: getTestTimeDate("23"),
hourWidth: 300,
isBaseTimeFormat: true,
numberOfHoursInDay: 22,
offsetStartHoursRange: 1,
};
renderEpg({
epgOptions,
layoutOptions,
sliceNumber: 10,
});
const container = screen.getByTestId("container");
expect(container).toBeInTheDocument();
expect(container).toHaveStyle(`height: 600px; width: 1000px`);
const timeline = screen.getByTestId("timeline");
const inTimeline = within(timeline);
expect(timeline).toBeInTheDocument();
expect(inTimeline.queryByText("00:00")).not.toBeInTheDocument();
expect(inTimeline.getByText("1:00am")).toBeInTheDocument();
expect(inTimeline.getAllByTestId("timeline-item")).toHaveLength(22);
expect(inTimeline.getAllByTestId("timeline-item")[0]).toHaveStyle(
`width: ${layoutOptions.hourWidth}px`
);
const content = screen.getByTestId("content");
expect(content).toHaveStyle(`width: ${layoutOptions.dayWidth}px`);
});
test("should show loader in Epg layout", () => {
const epgOptions = getEpgProps({ isLoading: true });
renderEpg({ epgOptions });
expect(screen.getByLabelText(/loading/i)).toBeInTheDocument();
});