























@@ -520,7 +520,7 @@ describe("MatrixVerificationManager", () => {
520520}
521521});
522522523-it("does not cross-sign the other own device after auto-confirmed self-verification SAS", async () => {
523+it("cross-signs the other own device after auto-confirmed self-verification SAS", async () => {
524524vi.useFakeTimers();
525525const { confirm, verifier } = createSasVerifierFixture({
526526decimal: [6158, 1986, 3513],
@@ -541,12 +541,81 @@ describe("MatrixVerificationManager", () => {
541541await vi.advanceTimersByTimeAsync(30_100);
542542543543expect(confirm).toHaveBeenCalledTimes(1);
544-expect(trustOwnDeviceAfterSas).not.toHaveBeenCalled();
544+expect(trustOwnDeviceAfterSas).toHaveBeenCalledWith("OTHERDEVICE");
545545} finally {
546546vi.useRealTimers();
547547}
548548});
549549550+it("confirmVerificationSas awaits the verifier's verify promise before resolving", async () => {
551+let resolveVerify!: () => void;
552+const verifyPromise = new Promise<void>((res) => {
553+resolveVerify = res;
554+});
555+const verifyImpl = vi.fn(() => verifyPromise);
556+const { confirm, verifier } = createSasVerifierFixture({
557+decimal: [111, 222, 333],
558+emoji: [["cat", "Cat"]],
559+ verifyImpl,
560+});
561+const trustOwnDeviceAfterSas = vi.fn(async () => {});
562+const request = new MockVerificationRequest({
563+isSelfVerification: true,
564+otherDeviceId: "OTHERDEVICE",
565+transactionId: "txn-await-verify",
566+initiatedByMe: true,
567+ verifier,
568+});
569+const manager = new MatrixVerificationManager({ trustOwnDeviceAfterSas });
570+const tracked = manager.trackVerificationRequest(request);
571+572+await manager.startVerification(tracked.id, "sas");
573+expect(verifyImpl).toHaveBeenCalledTimes(1);
574+575+let confirmResolved = false;
576+const confirmPromise = manager.confirmVerificationSas(tracked.id).then(() => {
577+confirmResolved = true;
578+});
579+580+// Yield once so confirmSasForSession + trustOwnDeviceAfterSas finish, but
581+// verifyPromise stays pending. confirmVerificationSas must still be
582+// blocked awaiting verifyPromise.
583+await Promise.resolve();
584+await Promise.resolve();
585+expect(confirm).toHaveBeenCalledTimes(1);
586+expect(trustOwnDeviceAfterSas).toHaveBeenCalledWith("OTHERDEVICE");
587+expect(confirmResolved).toBe(false);
588+589+resolveVerify();
590+await confirmPromise;
591+expect(confirmResolved).toBe(true);
592+});
593+594+it("confirmVerificationSas surfaces a verifier-promise rejection on session.error", async () => {
595+const verifyImpl = vi.fn(async () => {
596+throw new Error("verifier rejected mid-protocol");
597+});
598+const { verifier } = createSasVerifierFixture({
599+decimal: [111, 222, 333],
600+emoji: [["cat", "Cat"]],
601+ verifyImpl,
602+});
603+const request = new MockVerificationRequest({
604+isSelfVerification: true,
605+otherDeviceId: "OTHERDEVICE",
606+transactionId: "txn-verify-rejects",
607+initiatedByMe: true,
608+ verifier,
609+});
610+const manager = new MatrixVerificationManager();
611+const tracked = manager.trackVerificationRequest(request);
612+613+await manager.startVerification(tracked.id, "sas");
614+const summary = await manager.confirmVerificationSas(tracked.id);
615+616+expect(summary.error).toMatch(/verifier rejected mid-protocol/);
617+});
618+550619it("does not auto-confirm SAS for verifications initiated by this device", async () => {
551620vi.useFakeTimers();
552621const confirm = vi.fn(async () => {});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。