/* eslint-disable react/display-name */
import * as React from "react";
import { render } from "@testing-library/react-native";
import * as PlayerFactory from "@applicaster/zapp-react-native-utils/appUtils/playerManager/playerFactory";
import { ThemeContext } from "@applicaster/zapp-react-native-utils/theme";
import * as navigationHooks from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils/playerManager";
import { PlayerLiveImage } from "../PlayerLiveImageComponent";
import * as useNavigationHooks from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
import { Provider } from "react-redux";
import configureStore from "redux-mock-store";
const mock_seekTo = jest.fn();
jest.mock(
"@applicaster/zapp-react-native-utils/appUtils/playerManager/player",
() => ({
Player: {
seekTo: mock_seekTo,
},
})
);
jest
.spyOn(useNavigationHooks, "useNavigation")
.mockImplementation(() => ({ videoModalState: { visible: false } }));
jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation");
const mockStore = configureStore();
const store = mockStore({ appData: {} });
const Wrapper = ({ children }: { children: React.ReactNode }) => (
/* @ts-ignore */
{children}
);
describe("PlayerLiveImageComponent", () => {
const defaultProps = {
item: { id: "1", title: "Test", type: { value: "" } },
style: {},
playerId: "player1",
imageKey: "image1",
audioMutedByDefault: false,
screenConfig: {},
};
const autoplay_settings = {
start_time: "00:10",
end_time: "00:35",
};
beforeAll(() => {
jest.spyOn(PlayerFactory, "playerFactory").mockImplementation(() => {
const Player = jest.requireActual(
"@applicaster/zapp-react-native-utils/appUtils/playerManager/player"
).Player;
return {
controller: new Player({}),
Component: () => null,
};
});
jest.spyOn(navigationHooks, "useIsScreenActive").mockReturnValue(true);
});
it("should render correctly with default props", () => {
const component = render(
);
expect(component.toJSON()).toMatchSnapshot();
});
it("should call seekTo() on video loaded with autoplay settings", () => {
const props = {
...defaultProps,
item: {
...defaultProps.item,
extensions: { autoplay_settings },
},
};
render(
);
// TODO: implement this test
});
it("should call pauseLiveImage() on video reached end timestamp", () => {
const props = {
...defaultProps,
item: {
...defaultProps.item,
extensions: { autoplay_settings },
},
};
render(
);
// TODO: implement this test
});
it("should not register the player at mount (lazy creation)", () => {
render(
);
// Player is not registered until playback starts (lazy creation)
const isPlayerRegistered = playerManager.isPlayerRegistered(
defaultProps.playerId
);
expect(isPlayerRegistered).toBe(false);
});
it("should not register the player for 'pre-measurement' item", () => {
const props = {
...defaultProps,
item: {
...defaultProps.item,
id: "pre-measurement-1",
},
};
render(
);
const isPlayerRegistered = playerManager.isPlayerRegistered(props.playerId);
expect(isPlayerRegistered).toBe(false);
});
});