ready.test.ts 2.96 KB
import { expect } from "chai";
import { RoomManager } from "../room/RoomManager";
import { clear } from "./util/clear";
import { prepareJoinedRoom, prepareUsersEmptyRooms } from "./util/prepare";
import { SocketTester } from "./util/SocketTester";

describe("준비", () => {
  it("방에 입장하면 준비되지 않은 상태입니다", () => {
    const {
      sockets: [socket],
      users: [user],
      rooms: [room],
    } = prepareUsersEmptyRooms(1, 1);

    const response = socket.test("joinRoom", { uuid: room.uuid });
    expect(response.ok).eq(true);
    expect(response.result?.users[0]?.nickname).eq(user.nickname);
    expect(response.result?.users[0]?.ready).eq(false);

    clear([room]);
  });
  it("준비 상태를 설정합니다", () => {
    const {
      sockets: [socket],
      users: [user],
      room,
    } = prepareJoinedRoom(1, 2, true);

    expect(room.isReady(user)).eq(false);

    socket.testOk("ready", { ready: true });
    expect(room.isReady(user)).eq(true);

    let response = socket.socket.received("updateRoomUser");
    expect(response.state).eq("updated");
    expect(response.user.nickname).eq(user.nickname);
    expect(response.user.ready).eq(true);

    socket.testOk("ready", { ready: false });
    expect(room.isReady(user)).eq(false);

    response = socket.socket.received("updateRoomUser");
    expect(response.state).eq("updated");
    expect(response.user.nickname).eq(user.nickname);
    expect(response.user.ready).eq(false);

    clear([room]);
  });
  it("방장은 준비할 수 없습니다", () => {
    const {
      sockets: [socket],
      users: [user],
      room,
    } = prepareJoinedRoom(1, 2);

    socket.testNotOk("ready", { ready: true });
    expect(room.isReady(user)).eq(false);

    clear([room]);
  });
  it("방장이 되면 준비 상태가 해제됩니다", () => {
    const {
      sockets: [socket1, socket2],
      users: [user1, user2],
      room,
    } = prepareJoinedRoom(2);

    socket2.testOk("ready", { ready: true });
    expect(room.isReady(user2)).eq(true);
    room.setAdmin(user2);
    expect(room.isReady(user2)).eq(false);

    clear([room]);
  });
  it("혼자 있는 방에서는 게임을 시작할 수 없습니다", () => {
    const { room } = prepareJoinedRoom(1);

    expect(room.canStart().ok).eq(false);

    clear([room]);
  });
  it("모두가 준비해야 게임을 시작할 수 있습니다", () => {
    const {
      sockets: [socket1, socket2, socket3],
      room,
    } = prepareJoinedRoom(3);

    // 2, 3 모두 준비 안함
    expect(room.canStart().ok).eq(false);

    // 2만 준비
    expect(socket2.test("ready", { ready: true }).ok).eq(true);

    // 3만 준비
    expect(socket2.test("ready", { ready: false }).ok).eq(true);
    expect(socket3.test("ready", { ready: true }).ok).eq(true);
    expect(room.canStart().ok).eq(false);

    // 2, 3 모두 준비
    expect(socket2.test("ready", { ready: true }).ok).eq(true);
    expect(room.canStart().ok).eq(true);

    clear([room]);
  });
});