added room schema tests
This commit is contained in:
parent
b70693afdd
commit
d284fc30f1
@ -2,34 +2,17 @@ const RoomModel = require('../schemas/room');
|
||||
|
||||
module.exports = (io, socket) => {
|
||||
const req = socket.request;
|
||||
const getData = () => {
|
||||
RoomModel.findOne({ _id: req.session.roomId }, function (err, room) {
|
||||
if (!room) return err;
|
||||
if (room.nextMoveTime <= Date.now()) {
|
||||
changeCurrentMovingPlayer();
|
||||
} else {
|
||||
io.to(req.session.roomId.toString()).emit('room:data', JSON.stringify(room));
|
||||
}
|
||||
});
|
||||
|
||||
const getData = async () => {
|
||||
let room = await RoomModel.findOne({ _id: req.session.roomId });
|
||||
// Handle the situation when the server crashes and any player reconnects after the time has expired
|
||||
// Typically, the responsibility for changing players is managed by gameHandler.js.
|
||||
if (room.nextMoveTime <= Date.now()) {
|
||||
room.changeMovingPlayer();
|
||||
await RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room);
|
||||
}
|
||||
io.to(req.session.roomId).emit('room:data', JSON.stringify(room));
|
||||
};
|
||||
|
||||
socket.on('room:data', getData);
|
||||
|
||||
function changeCurrentMovingPlayer() {
|
||||
RoomModel.findOne({ _id: req.session.roomId }, function (err, room) {
|
||||
if (!room) return err;
|
||||
const index = room.players.findIndex(player => player.nowMoving === true);
|
||||
const roomSize = room.players.length;
|
||||
room.players[index].nowMoving = false;
|
||||
if (index + 1 === roomSize) {
|
||||
room.players[0].nowMoving = true;
|
||||
} else {
|
||||
room.players[index + 1].nowMoving = true;
|
||||
}
|
||||
room.nextMoveTime = Date.now() + 15000;
|
||||
RoomModel.findOneAndUpdate({ _id: req.session.roomId }, room, function (err, updatedRoom) {
|
||||
io.to(req.session.roomId).emit('room:data', JSON.stringify(updatedRoom));
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@ -62,7 +62,6 @@ RoomSchema.methods.canStartGame = function () {
|
||||
|
||||
RoomSchema.methods.startGame = function () {
|
||||
this.started = true;
|
||||
this.pawns = getStartPositions();
|
||||
this.nextMoveTime = Date.now() + 15000;
|
||||
this.players.forEach(player => (player.ready = true));
|
||||
this.players[0].nowMoving = true;
|
||||
@ -80,6 +79,7 @@ RoomSchema.methods.getPlayer = function (playerId) {
|
||||
};
|
||||
|
||||
RoomSchema.methods.addPlayer = function (name) {
|
||||
if (this.full) return;
|
||||
this.players.push({
|
||||
name: name,
|
||||
ready: false,
|
||||
|
||||
71
backend/tests/schemas/room.test.js
Normal file
71
backend/tests/schemas/room.test.js
Normal file
@ -0,0 +1,71 @@
|
||||
const { expect } = require('chai');
|
||||
const RoomModel = require('../../schemas/room');
|
||||
const { getPawnPositionAfterMove, getStartPositions } = require('../../utils/functions');
|
||||
describe('Testing room model methods', function () {
|
||||
const room = new RoomModel();
|
||||
|
||||
beforeEach(function () {
|
||||
room.players = [];
|
||||
room.pawns = getStartPositions();
|
||||
});
|
||||
it('should correctly beat pawn', function () {
|
||||
room.addPlayer('test1', 'red');
|
||||
room.addPlayer('test2', 'blue');
|
||||
room.pawns.forEach(pawn => {
|
||||
pawn.position = getPawnPositionAfterMove(1, pawn);
|
||||
});
|
||||
room.beatPawns(16, 'green');
|
||||
room.pawns.forEach(pawn => {
|
||||
if (pawn.color != 'red') {
|
||||
expect(pawn.position).to.not.equal(pawn.basePos);
|
||||
} else {
|
||||
expect(pawn.position).to.equal(pawn.basePos);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly beat multiple pawns', function () {
|
||||
room.pawns[0].position = 16;
|
||||
room.pawns[1].position = 16;
|
||||
room.beatPawns(16, 'green');
|
||||
room.pawns.forEach(pawn => {
|
||||
expect(pawn.position).to.equal(pawn.basePos);
|
||||
});
|
||||
});
|
||||
|
||||
it('should correctly change moving player from last to first', function () {
|
||||
room.addPlayer('test1', 'red');
|
||||
room.addPlayer('test2', 'blue');
|
||||
room.players[1].nowMoving = true;
|
||||
room.changeMovingPlayer();
|
||||
expect(room.players[0].nowMoving).to.equal(true);
|
||||
});
|
||||
|
||||
it('should correctly change moving player from first to second', function () {
|
||||
room.addPlayer('test1', 'red');
|
||||
room.addPlayer('test2', 'blue');
|
||||
room.players[0].nowMoving = true;
|
||||
room.changeMovingPlayer();
|
||||
expect(room.players[1].nowMoving).to.equal(true);
|
||||
});
|
||||
|
||||
it('should correctly returns pawns that can move', function () {
|
||||
room.addPlayer('test1', 'red');
|
||||
room.addPlayer('test2', 'blue');
|
||||
room.players[0].nowMoving = true;
|
||||
room.pawns[0].position = 16;
|
||||
room.rolledNumber = 2;
|
||||
const pawnsThatCanMove = room.getPawnsThatCanMove();
|
||||
expect(pawnsThatCanMove.length).to.equal(1);
|
||||
});
|
||||
|
||||
it('should given rolled 6 correctly returns pawns that can move', function () {
|
||||
room.addPlayer('test1', 'red');
|
||||
room.addPlayer('test2', 'blue');
|
||||
room.players[0].nowMoving = true;
|
||||
room.pawns[0].position = 16;
|
||||
room.rolledNumber = 6;
|
||||
const pawnsThatCanMove = room.getPawnsThatCanMove();
|
||||
expect(pawnsThatCanMove.length).to.equal(4);
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user