leaveRoom.test.ts 1.96 KB
import { expect } from "chai";
import { RoomManager } from "../room/RoomManager";
import { User } from "../user/User";
import { clear } from "./util/clear";
import { DummySocket } from "./util/DummySocket";
import { prepareJoinedRoom, prepareUsers } from "./util/prepare";
import { SocketTester } from "./util/SocketTester";

describe("방 퇴장", () => {
  it("로그인하지 않은 유저는 요청할 수 없습니다", () => {
    const roomManager = new RoomManager();
    const socket = new SocketTester(roomManager);
    socket.testNotOk("leaveRoom", {});
  });
  it("방에 입장하지 않은 유저는 요청할 수 없습니다", () => {
    const {
      sockets: [socket],
    } = prepareUsers(1);

    socket.testNotOk("leaveRoom", {});
  });
  it("방에서 퇴장합니다", () => {
    const {
      sockets: [socket],
      room,
    } = prepareJoinedRoom(1);

    expect(room.users.length).eq(1);
    socket.testOk("leaveRoom", {});
    expect(room.users.length).eq(0);

    clear([room]);
  });
  it("방에서 퇴장한 뒤 다시 요청을 보낼 수 없습니다", () => {
    const {
      sockets: [socket],
      room,
    } = prepareJoinedRoom(1);

    socket.testOk("leaveRoom", {});
    socket.testNotOk("leaveRoom", {});

    clear([room]);
  });
  it("방에서 퇴장하면 유저 목록이 업데이트 됩니다", () => {
    const {
      sockets: [socket1, socket2],
      users: [user1, user2],
      room,
    } = prepareJoinedRoom(2);

    socket1.testOk("leaveRoom", {});
    const updated = socket2.socket.received("updateRoomUser");
    expect(updated.state).eq("removed");
    expect(updated.user.username).eq(user1.username);

    clear([room]);
  });
  it("방에서 퇴장한 뒤 아무도 없으면 방이 닫힙니다", () => {
    const {
      sockets: [socket],
      room,
    } = prepareJoinedRoom(1);

    expect(room.closed).eq(false);
    expect(socket.test("leaveRoom", {}).ok).eq(true);
    expect(room.closed).eq(true);

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