Spaces:
Running
Running
; | |
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); | |
}); | |
}); | |
}); | |
}); | |