import { describe, expect, it } from "vitest" ;
import {
createDiscordActionGate,
resolveDiscordAccount,
resolveDiscordMaxLinesPerMessage,
} from "./accounts.js" ;
describe("resolveDiscordAccount allowFrom precedence" , () => {
it("uses configured defaultAccount when accountId is omitted" , () => {
const resolved = resolveDiscordAccount({
cfg: {
channels: {
discord: {
defaultAccount: "work" ,
accounts: {
work: { token: "token-work" , name: "Work" },
},
},
},
},
});
expect(resolved.accountId).toBe("work" );
expect(resolved.name).toBe("Work" );
expect(resolved.token).toBe("token-work" );
});
it("prefers accounts.default.allowFrom over top-level for default account" , () => {
const resolved = resolveDiscordAccount({
cfg: {
channels: {
discord: {
allowFrom: ["top" ],
accounts: {
default : { allowFrom: ["default" ], token: "token-default" },
},
},
},
},
accountId: "default" ,
});
expect(resolved.config.allowFrom).toEqual(["default" ]);
});
it("falls back to top-level allowFrom for named account without override" , () => {
const resolved = resolveDiscordAccount({
cfg: {
channels: {
discord: {
allowFrom: ["top" ],
accounts: {
work: { token: "token-work" },
},
},
},
},
accountId: "work" ,
});
expect(resolved.config.allowFrom).toEqual(["top" ]);
});
it("does not inherit default account allowFrom for named account when top-level is absent" , () => {
const resolved = resolveDiscordAccount({
cfg: {
channels: {
discord: {
accounts: {
default : { allowFrom: ["default" ], token: "token-default" },
work: { token: "token-work" },
},
},
},
},
accountId: "work" ,
});
expect(resolved.config.allowFrom).toBeUndefined();
});
});
describe("createDiscordActionGate" , () => {
it("uses configured defaultAccount when accountId is omitted" , () => {
const gate = createDiscordActionGate({
cfg: {
channels: {
discord: {
actions: { reactions: false },
defaultAccount: "work" ,
accounts: {
work: {
token: "token-work" ,
actions: { reactions: true },
},
},
},
},
},
});
expect(gate("reactions" )).toBe(true );
});
});
describe("resolveDiscordMaxLinesPerMessage" , () => {
it("falls back to merged root discord maxLinesPerMessage when runtime config omits it" , () => {
const resolved = resolveDiscordMaxLinesPerMessage({
cfg: {
channels: {
discord: {
maxLinesPerMessage: 120 ,
accounts: {
default : { token: "token-default" },
},
},
},
},
discordConfig: {},
accountId: "default" ,
});
expect(resolved).toBe(120 );
});
it("prefers explicit runtime discord maxLinesPerMessage over merged config" , () => {
const resolved = resolveDiscordMaxLinesPerMessage({
cfg: {
channels: {
discord: {
maxLinesPerMessage: 120 ,
accounts: {
default : { token: "token-default" , maxLinesPerMessage: 80 },
},
},
},
},
discordConfig: { maxLinesPerMessage: 55 },
accountId: "default" ,
});
expect(resolved).toBe(55 );
});
it("uses per-account discord maxLinesPerMessage over the root value when runtime config omits it" , () => {
const resolved = resolveDiscordMaxLinesPerMessage({
cfg: {
channels: {
discord: {
maxLinesPerMessage: 120 ,
accounts: {
work: { token: "token-work" , maxLinesPerMessage: 80 },
},
},
},
},
discordConfig: {},
accountId: "work" ,
});
expect(resolved).toBe(80 );
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.8 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland