Update Healer Man server
This commit is contained in:
1 parent
f8314e7de1
commit
1fedb9368d
76 files changed
+20556
-2523
No files matched your search
@@ -142,6 +142,65 @@ test("persists revisioned Manastorm GM configuration and rejects stale or unauth
|
||||
}), (error) => error instanceof GameDatabaseError && error.status === 400);
|
||||
}));
|
||||
|
||||
test("persists revisioned companion cooldown policy and rejects stale or unauthorized writes", () => withDatabase(async (database) => {
|
||||
const gm = await database.register("Phenom", "cooldown-admin");
|
||||
const player = await database.register("Ordinary", "cooldown-player");
|
||||
const initial = database.getCompanionCooldownPolicy();
|
||||
const configured = {
|
||||
...initial.config,
|
||||
generic: { ...initial.config.generic, defensiveHealthPercent: 61 },
|
||||
mechanics: [{
|
||||
id: "tank-buster", enabled: true, bossKey: "test/boss", bossName: "Test Boss",
|
||||
bossServerEntry: 123, attackId: "heavy-strike", attackName: "Heavy Strike",
|
||||
scope: "tank", leadTimeMs: 2_500, minimumCooldownSeconds: 20,
|
||||
}],
|
||||
};
|
||||
const saved = database.putCompanionCooldownPolicy(database.authenticate(gm.token), 0, configured);
|
||||
assert.equal(saved.revision, 1);
|
||||
assert.equal(database.getCompanionCooldownPolicy().config.generic.defensiveHealthPercent, 61);
|
||||
assert.throws(() => database.putCompanionCooldownPolicy(database.authenticate(gm.token), 0, configured), (error) => (
|
||||
error instanceof GameDatabaseError && error.status === 409
|
||||
));
|
||||
assert.throws(() => database.putCompanionCooldownPolicy(database.authenticate(player.token), 1, configured), (error) => (
|
||||
error instanceof GameDatabaseError && error.status === 403
|
||||
));
|
||||
}));
|
||||
|
||||
test("persists validated companion readiness with authorization, revisions, and corrupt-data fallback", () => withDatabase(async (database) => {
|
||||
const gm = await database.register("Phenom", "readiness-admin");
|
||||
const player = await database.register("ReadinessPlayer", "readiness-player");
|
||||
const initial = database.getCompanionSpecReadiness();
|
||||
assert.equal(initial.revision, 0);
|
||||
assert.equal(initial.config.statuses["warrior:protection"], "ready");
|
||||
assert.equal(Object.values(initial.config.statuses).filter((status) => status === "ready").length, 5);
|
||||
|
||||
const configured = {
|
||||
...initial.config,
|
||||
statuses: { ...initial.config.statuses, "paladin:retribution": "beta" },
|
||||
};
|
||||
const account = database.authenticate(gm.token);
|
||||
const saved = database.putCompanionSpecReadiness(account, 0, configured);
|
||||
assert.equal(saved.revision, 1);
|
||||
assert.equal(database.getCompanionSpecReadiness().config.statuses["paladin:retribution"], "beta");
|
||||
assert.throws(() => database.putCompanionSpecReadiness(account, 0, configured), (error) => (
|
||||
error instanceof GameDatabaseError && error.status === 409
|
||||
));
|
||||
assert.throws(() => database.putCompanionSpecReadiness(database.authenticate(player.token), 1, configured), (error) => (
|
||||
error instanceof GameDatabaseError && error.status === 403
|
||||
));
|
||||
assert.throws(() => database.putCompanionSpecReadiness(account, 1, {
|
||||
schemaVersion: 1,
|
||||
statuses: { ...configured.statuses, "warrior:protection": "needs-testing" },
|
||||
}), (error) => error instanceof GameDatabaseError && error.status === 400);
|
||||
|
||||
const raw = new DatabaseSync(database.databasePath);
|
||||
raw.prepare("UPDATE companion_spec_readiness SET config_json = ? WHERE id = 1").run("{not-json");
|
||||
raw.close();
|
||||
const fallback = database.getCompanionSpecReadiness();
|
||||
assert.equal(fallback.revision, 0);
|
||||
assert.equal(fallback.config.statuses["warrior:protection"], "ready");
|
||||
}));
|
||||
|
||||
test("stores GM simulation replays and gates exact-hash route approval", () => withDatabase(async (database) => {
|
||||
const gmAuth = await database.register("Phenom", "storm-admin");
|
||||
const playerAuth = await database.register("RoutePlayer", "route-player");
|
||||
@@ -288,10 +347,11 @@ test("launches players-only and AI-filled group activities only when every membe
|
||||
assert.equal(playersOnly.group.activity.fillWithAi, false);
|
||||
|
||||
const filled = database.startOnlineGroupActivity(leader.id, {
|
||||
type: "manastorm", contentId: "manastorm", fillWithAi: true, partySize: 5, startingLevel: 10,
|
||||
type: "manastorm", contentId: "manastorm", fillWithAi: true, includeBetaSpecs: true, partySize: 5, startingLevel: 10,
|
||||
});
|
||||
assert.equal(filled.group.activity.partySize, 5);
|
||||
assert.equal(filled.group.activity.startingLevel, 10);
|
||||
assert.equal(filled.group.activity.includeBetaSpecs, true);
|
||||
assert.throws(() => database.startOnlineGroupActivity(member.id, {
|
||||
type: "dungeon", contentId: "wailing-caverns",
|
||||
}), (error) => error instanceof GameDatabaseError && error.status === 403);
|
||||
|
||||
Reference in new issue
Block a user