import { afterEach, describe, expect, it } from "vitest" ;
import { importFreshModule } from "../../../test/helpers/import-fresh.js" ;
import type { MsgContext } from "../templating.js" ;
import { resetInboundDedupe } from "./inbound-dedupe.js" ;
const sharedInboundContext: MsgContext = {
Provider: "discord" ,
Surface: "discord" ,
From: "discord:user-1" ,
To: "channel:c1" ,
OriginatingChannel: "discord" ,
OriginatingTo: "channel:c1" ,
SessionKey: "agent:main:discord:channel:c1" ,
MessageSid: "msg-1" ,
};
describe("inbound dedupe" , () => {
afterEach(() => {
resetInboundDedupe();
});
it("shares dedupe state across distinct module instances" , async () => {
const inboundA = await importFreshModule<typeof import ("./inbound-dedupe.js" )>(
import .meta.url,
"./inbound-dedupe.js?scope=shared-a" ,
);
const inboundB = await importFreshModule<typeof import ("./inbound-dedupe.js" )>(
import .meta.url,
"./inbound-dedupe.js?scope=shared-b" ,
);
inboundA.resetInboundDedupe();
inboundB.resetInboundDedupe();
try {
expect(inboundA.shouldSkipDuplicateInbound(sharedInboundContext)).toBe(false );
expect(inboundB.shouldSkipDuplicateInbound(sharedInboundContext)).toBe(true );
} finally {
inboundA.resetInboundDedupe();
inboundB.resetInboundDedupe();
}
});
it("shares claim/release state across distinct module instances" , async () => {
const inboundA = await importFreshModule<typeof import ("./inbound-dedupe.js" )>(
import .meta.url,
"./inbound-dedupe.js?scope=claim-a" ,
);
const inboundB = await importFreshModule<typeof import ("./inbound-dedupe.js" )>(
import .meta.url,
"./inbound-dedupe.js?scope=claim-b" ,
);
inboundA.resetInboundDedupe();
inboundB.resetInboundDedupe();
try {
const firstClaim = inboundA.claimInboundDedupe(sharedInboundContext);
expect(firstClaim).toMatchObject({ status: "claimed" });
expect(inboundB.claimInboundDedupe(sharedInboundContext)).toMatchObject({
status: "inflight" ,
});
if (firstClaim.status !== "claimed" ) {
throw new Error("expected claimed inbound dedupe result" );
}
inboundB.releaseInboundDedupe(firstClaim.key);
expect(inboundA.claimInboundDedupe(sharedInboundContext)).toMatchObject({
status: "claimed" ,
});
} finally {
inboundA.resetInboundDedupe();
inboundB.resetInboundDedupe();
}
});
});
Messung V0.5 in Prozent C=94 H=92 G=92
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-05)
¤
*© Formatika GbR, Deutschland