import React from "react";
import { shallow } from "enzyme";
import Lobby, { GameInfo, PlayerList } from "../components/screens/Lobby/Lobby";
import {
COUNTRY_RACE,
DISTANCE,
FROZEN,
NORMAL,
RACE,
TIME_BANK,
} from "../domain/constants";
jest.mock("iso-3166-1");
jest.mock("../domain/gameStore");
jest.mock("../hooks/useGameInfo");
import iso from "iso-3166-1";
import { useGameId } from "../domain/gameStore";
import { useGameConfig, usePlayers } from "../hooks/useGameInfo";
describe("Lobby", () => {
it("renders while loading", () => {
useGameId.mockReturnValue("test-game-id");
usePlayers.mockReturnValue(null);
const onStart = jest.fn();
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders with no players", () => {
useGameId.mockReturnValue("test-game-id");
usePlayers.mockReturnValue([]);
const onStart = jest.fn();
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders", () => {
useGameId.mockReturnValue("test-game-id");
usePlayers.mockReturnValue([{ name: "foo", name: "bar" }]);
const onStart = jest.fn();
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("properly handles joining and starting", () => {
useGameId.mockReturnValue("test-game-id");
usePlayers.mockReturnValue([]);
const onStart = jest.fn();
const rendered = shallow();
rendered.find("JoinForm").first().prop("onJoined")();
expect(rendered).toMatchSnapshot();
rendered.find("StartGame").first().prop("onStart")();
expect(onStart).toHaveBeenCalled();
});
describe("GameInfo", () => {
it("renders while loading", () => {
useGameConfig.mockReturnValue({});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders", () => {
useGameConfig.mockReturnValue({
rounds: 5,
timer: 300,
gameMode: NORMAL,
clockMode: NORMAL,
scoreMethod: DISTANCE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders for single round", () => {
useGameConfig.mockReturnValue({
rounds: 1,
timer: 300,
gameMode: NORMAL,
clockMode: NORMAL,
scoreMethod: DISTANCE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders for COUNTRY_RACE", () => {
useGameConfig.mockReturnValue({
rounds: 5,
timer: 300,
gameMode: NORMAL,
clockMode: NORMAL,
scoreMethod: COUNTRY_RACE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders for FROZEN", () => {
useGameConfig.mockReturnValue({
rounds: 5,
timer: 300,
gameMode: FROZEN,
clockMode: NORMAL,
scoreMethod: DISTANCE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders for single round COUNTRY_RACE", () => {
useGameConfig.mockReturnValue({
rounds: 1,
timer: 300,
gameMode: NORMAL,
clockMode: NORMAL,
scoreMethod: COUNTRY_RACE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders for single round FROZEN", () => {
useGameConfig.mockReturnValue({
rounds: 1,
timer: 300,
gameMode: FROZEN,
clockMode: NORMAL,
scoreMethod: DISTANCE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders for TIME_BANK", () => {
useGameConfig.mockReturnValue({
rounds: 5,
timer: 300,
gameMode: NORMAL,
clockMode: TIME_BANK,
scoreMethod: DISTANCE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders for RACE", () => {
useGameConfig.mockReturnValue({
rounds: 5,
timer: 300,
gameMode: NORMAL,
clockMode: RACE,
scoreMethod: DISTANCE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders for NORMAL", () => {
useGameConfig.mockReturnValue({
rounds: 5,
timer: 300,
gameMode: NORMAL,
clockMode: NORMAL,
scoreMethod: DISTANCE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders with a round point cap", () => {
useGameConfig.mockReturnValue({
rounds: 5,
timer: 300,
gameMode: NORMAL,
clockMode: NORMAL,
scoreMethod: DISTANCE,
roundPointCap: 10000,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
it("renders with country lock", () => {
iso.whereAlpha2.mockReturnValue({ country: "test-country" });
useGameConfig.mockReturnValue({
rounds: 5,
timer: 300,
countryLock: "country",
gameMode: NORMAL,
clockMode: NORMAL,
scoreMethod: DISTANCE,
roundPointCap: null,
});
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
});
describe("PlayerList", () => {
it("renders", () => {
const playerNames = ["foo", "bar"];
const rendered = shallow();
expect(rendered).toMatchSnapshot();
});
});
});