Spaces:
Paused
Paused
| ; | |
| const assert = require('assert').strict; | |
| const { makeUser } = require('../users-utils'); | |
| describe('Rooms features', () => { | |
| describe('Rooms', () => { | |
| describe('Rooms.get', () => { | |
| it('should be a function', () => { | |
| assert.equal(typeof Rooms.get, 'function'); | |
| }); | |
| }); | |
| describe('Rooms.rooms', () => { | |
| it('should be a Map', () => { | |
| assert(Rooms.rooms instanceof Map); | |
| }); | |
| }); | |
| }); | |
| describe('BasicRoom', () => { | |
| describe('getGame', () => { | |
| it('should return the game only when the gameids match', () => { | |
| const Hangman = require('../../dist/server/chat-plugins/hangman').Hangman; | |
| const UNO = require('../../dist/server/chat-plugins/uno').UNO; | |
| const room = Rooms.createChatRoom('r/relationshipadvice'); | |
| const game = new Hangman(room, makeUser(), 'There\'s a lot of red flags here'); | |
| room.game = game; | |
| assert.equal(room.getGame(Hangman), game); | |
| assert.equal(room.getGame(UNO), null); | |
| }); | |
| }); | |
| }); | |
| describe('GameRoom', () => { | |
| const packedTeam = 'Weavile||lifeorb||swordsdance,knockoff,iceshard,iciclecrash|Jolly|,252,,,4,252|||||'; | |
| let room; | |
| let parent; | |
| afterEach(() => { | |
| for (const user of Users.users.values()) { | |
| user.disconnectAll(); | |
| user.destroy(); | |
| } | |
| if (room) room.destroy(); | |
| if (parent) parent.destroy(); | |
| }); | |
| it('should allow two users to join the battle', () => { | |
| const p1 = makeUser(); | |
| const p2 = makeUser(); | |
| const options = [ | |
| { rated: false, tour: false }, | |
| { rated: false, tour: { onBattleWin() {} } }, | |
| { rated: true, tour: false }, | |
| { rated: true, tour: { onBattleWin() {} } }, | |
| ]; | |
| for (const option of options) { | |
| room = Rooms.createBattle({ | |
| format: 'customgame', | |
| players: [ | |
| { user: p1, team: packedTeam }, | |
| { user: p2, team: packedTeam }, | |
| ], | |
| ...option, | |
| }); | |
| assert(room.battle.p1 && room.battle.p2); // Automatically joined | |
| } | |
| }); | |
| it('should copy auth from tournament', () => { | |
| parent = Rooms.createChatRoom('parentroom'); | |
| parent.auth.get = () => '%'; | |
| const p1 = makeUser(); | |
| const p2 = makeUser(); | |
| room = Rooms.createBattle({ | |
| format: 'customgame', | |
| players: [ | |
| { user: p1, team: packedTeam }, | |
| { user: p2, team: packedTeam }, | |
| ], | |
| rated: false, | |
| auth: {}, | |
| tour: { | |
| onBattleWin() {}, | |
| room: parent, | |
| }, | |
| }); | |
| assert.equal(room.auth.get(makeUser().id), '%'); | |
| }); | |
| it('should prevent overriding tournament room auth by a tournament player', () => { | |
| parent = Rooms.createChatRoom('parentroom2'); | |
| parent.auth.get = () => '%'; | |
| const p1 = makeUser(); | |
| const p2 = makeUser(); | |
| const roomStaff = makeUser("Room auth"); | |
| const administrator = makeUser("Admin"); | |
| administrator.tempGroup = '~'; | |
| room = Rooms.createBattle({ | |
| format: 'customgame', | |
| players: [ | |
| { user: p1, team: packedTeam }, | |
| { user: p2, team: packedTeam }, | |
| ], | |
| rated: false, | |
| auth: {}, | |
| tour: { | |
| onBattleWin() {}, | |
| room: parent, | |
| }, | |
| }); | |
| roomStaff.joinRoom(room); | |
| administrator.joinRoom(room); | |
| assert.equal(room.auth.get(roomStaff), '%', 'before promotion attempt'); | |
| Chat.parse("/roomvoice Room auth", room, p1, p1.connections[0]); | |
| assert.equal(room.auth.get(roomStaff), '%', 'after promotion attempt'); | |
| Chat.parse("/roomvoice Room auth", room, administrator, administrator.connections[0]); | |
| assert.equal(room.auth.get(roomStaff), '%', 'after being promoted by an administrator'); | |
| }); | |
| }); | |
| describe("ChatRoom", () => { | |
| describe("#rename", () => { | |
| let room; | |
| let parent; | |
| let subroom; | |
| afterEach(() => { | |
| for (const user of Users.users.values()) { | |
| user.disconnectAll(); | |
| user.destroy(); | |
| } | |
| const rooms = [room, parent, subroom]; | |
| for (const room of rooms) { | |
| if (room) { | |
| room.destroy(); | |
| } | |
| } | |
| }); | |
| it("should rename its roomid and title", async () => { | |
| room = Rooms.createChatRoom("test", "Test"); | |
| await room.rename("Test2"); | |
| assert.equal(room.roomid, "test2"); | |
| assert.equal(room.title, "Test2"); | |
| }); | |
| it("should rename its key in Rooms.rooms", async () => { | |
| room = Rooms.createChatRoom("test", "Test"); | |
| await room.rename("Test2"); | |
| assert.equal(Rooms.rooms.has("test"), false); | |
| assert.equal(Rooms.rooms.has("test2"), true); | |
| }); | |
| it("should move the users and their connections", async () => { | |
| room = Rooms.createChatRoom("test", "Test"); | |
| const user = makeUser(); | |
| user.joinRoom(room); | |
| await room.rename("Test2"); | |
| assert.equal(user.inRooms.has("test"), false); | |
| assert.equal(user.inRooms.has("test2"), true); | |
| assert.equal(user.connections[0].inRooms.has("test"), false); | |
| assert.equal(user.connections[0].inRooms.has("test2"), true); | |
| }); | |
| it("should rename their parents subroom reference", async () => { | |
| parent = Rooms.createChatRoom("parent", "Parent"); | |
| subroom = Rooms.createChatRoom("subroom", "Subroom", { parentid: "parent" }); | |
| await subroom.rename("TheSubroom"); | |
| assert.equal(parent.subRooms.has("subroom"), false); | |
| assert.equal(parent.subRooms.has("thesubroom"), true); | |
| }); | |
| it("should rename their subrooms parent reference", async () => { | |
| parent = Rooms.createChatRoom("parent", "Parent"); | |
| subroom = Rooms.createChatRoom("subroom", "Subroom", { parentid: "parent" }); | |
| await parent.rename("TheParent"); | |
| assert.equal(subroom.parent, parent); | |
| }); | |
| }); | |
| }); | |
| }); | |