Files
factorio-clusterio/test/controller/UserManager.js
T

60 lines
2.3 KiB
JavaScript

"use strict";
const assert = require("assert").strict;
const { PlayerStats } = require("@clusterio/lib");
const { ControllerUser, UserManager } = require("@clusterio/controller");
describe("controller/src/UserManager", function() {
describe("class ControllerUser", function() {
const userManager = new UserManager({});
it("should track online users", function() {
let user = ControllerUser.fromJSON({ name: "admin", roles: [1] });
userManager.users.set(user.id, user);
assert(!userManager.onlineUsers.has(user));
assert.deepEqual(user.instances, new Set());
userManager.notifyJoin(user, 12);
assert(userManager.onlineUsers.has(user));
assert.deepEqual(user.instances, new Set([12]));
userManager.notifyJoin(user, 8);
assert(userManager.onlineUsers.has(user));
assert.deepEqual(user.instances, new Set([12, 8]));
userManager.notifyLeave(user, 11);
assert(userManager.onlineUsers.has(user));
assert.deepEqual(user.instances, new Set([12, 8]));
userManager.notifyLeave(user, 12);
assert(userManager.onlineUsers.has(user));
assert.deepEqual(user.instances, new Set([8]));
userManager.notifyLeave(user, 8);
assert(!userManager.onlineUsers.has(user));
assert.deepEqual(user.instances, new Set());
});
describe(".clearStatsOfInstance()", function() {
it("should remove the instance stats from existing users", function() {
let user1 = ControllerUser.fromJSON({ name: "admin", roles: [1] });
let user2 = ControllerUser.fromJSON({ name: "player", roles: [1] });
userManager.users.set(user1.name, user1);
userManager.users.set(user2.name, user2);
user1.instanceStats.set(10, new PlayerStats({ join_count: 1 }));
user1.instanceStats.set(11, new PlayerStats({ join_count: 6 }));
user1.recalculatePlayerStats();
userManager.notifyJoin(user1, 11);
user2.instanceStats.set(10, new PlayerStats({ join_count: 3 }));
user2.recalculatePlayerStats();
assert.equal(user1.playerStats.joinCount, 7);
assert.equal(user2.playerStats.joinCount, 3);
assert(userManager.onlineUsers.has(user1));
userManager.clearStatsOfInstance(11);
assert.equal(user1.playerStats.joinCount, 1);
assert(!userManager.onlineUsers.has(user1));
assert.equal(user2.playerStats.joinCount, 3);
});
});
});
});