Skip to content

Commit 86b8d03

Browse files
committed
Move mocking functions
1 parent d7ef249 commit 86b8d03

File tree

4 files changed

+45
-69
lines changed

4 files changed

+45
-69
lines changed

spec/integ/crypto/cross-signing.spec.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import "fake-indexeddb/auto";
1919
import { IDBFactory } from "fake-indexeddb";
2020

2121
import { CRYPTO_BACKENDS, InitCrypto } from "../../test-utils/test-utils";
22-
import { createClient, MatrixClient } from "../../../src";
23-
import { bootstrapCrossSigning, mockSetupCrossSigningRequests } from "../../test-utils/cross-signing";
22+
import { createClient, IAuthDict, MatrixClient } from "../../../src";
23+
import { mockSetupCrossSigningRequests } from "../../test-utils/mockEndpoints";
2424

2525
afterEach(() => {
2626
// reset fake-indexeddb after each test, to make sure we don't leak connections
@@ -62,13 +62,27 @@ describe.each(Object.entries(CRYPTO_BACKENDS))("cross-signing (%s)", (backend: s
6262
fetchMock.mockReset();
6363
});
6464

65+
/**
66+
* Create cross-signing keys and publish the keys
67+
*
68+
* @param authDict - The parameters to as the `auth` dict in the key upload request.
69+
* @see https://spec.matrix.org/v1.6/client-server-api/#authentication-types
70+
*/
71+
async function bootstrapCrossSigning(authDict: IAuthDict): Promise<void> {
72+
// now bootstrap cross signing, and check it resolves successfully
73+
await aliceClient.getCrypto()?.bootstrapCrossSigning({
74+
// Expecting to return a promise
75+
authUploadDeviceSigningKeys: (makeRequest) => makeRequest(authDict).then(() => undefined),
76+
});
77+
}
78+
6579
describe("bootstrapCrossSigning (before initialsync completes)", () => {
6680
it("publishes keys if none were yet published", async () => {
6781
mockSetupCrossSigningRequests();
6882

6983
// provide a UIA callback, so that the cross-signing keys are uploaded
7084
const authDict = { type: "test" };
71-
await bootstrapCrossSigning(aliceClient, authDict);
85+
await bootstrapCrossSigning(authDict);
7286

7387
// check the cross-signing keys upload
7488
expect(fetchMock.called("upload-keys")).toBeTruthy();
@@ -114,7 +128,7 @@ describe.each(Object.entries(CRYPTO_BACKENDS))("cross-signing (%s)", (backend: s
114128

115129
// provide a UIA callback, so that the cross-signing keys are uploaded
116130
const authDict = { type: "test" };
117-
await bootstrapCrossSigning(aliceClient, authDict);
131+
await bootstrapCrossSigning(authDict);
118132

119133
const crossSigningStatus = await aliceClient.getCrypto()!.getCrossSigningStatus();
120134

@@ -138,7 +152,7 @@ describe.each(Object.entries(CRYPTO_BACKENDS))("cross-signing (%s)", (backend: s
138152

139153
it("should return true after bootstrapping cross-signing", async () => {
140154
mockSetupCrossSigningRequests();
141-
await bootstrapCrossSigning(aliceClient, { type: "test" });
155+
await bootstrapCrossSigning({ type: "test" });
142156

143157
const isCrossSigningReady = await aliceClient.getCrypto()!.isCrossSigningReady();
144158

spec/integ/crypto/crypto.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,8 @@ import { ISyncResponder, SyncResponder } from "../../test-utils/SyncResponder";
5050
import { escapeRegExp } from "../../../src/utils";
5151
import { downloadDeviceToJsDevice } from "../../../src/rust-crypto/device-converter";
5252
import { flushPromises } from "../../test-utils/flushPromises";
53-
import { mockInitialApiRequests } from "../../test-utils/mockEndpoints";
53+
import { mockInitialApiRequests, mockSetupCrossSigningRequests } from "../../test-utils/mockEndpoints";
5454
import { AddSecretStorageKeyOpts, SECRET_STORAGE_ALGORITHM_V1_AES } from "../../../src/secret-storage";
55-
import { mockSetupCrossSigningRequests } from "../../test-utils/cross-signing";
5655
import { CryptoCallbacks } from "../../../src/crypto-api";
5756

5857
const ROOM_ID = "!room:id";

spec/test-utils/cross-signing.ts

Lines changed: 0 additions & 62 deletions
This file was deleted.

spec/test-utils/mockEndpoints.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,28 @@ export function mockInitialApiRequests(homeserverUrl: string) {
2828
filter_id: "fid",
2929
});
3030
}
31+
32+
/**
33+
* Mock the requests needed to set up cross signing
34+
*
35+
* Return `{}` for `GET _matrix/client/r0/user/:userId/account_data/:type` request
36+
* Return `{}` for `POST _matrix/client/v3/keys/signatures/upload` request (named `upload-sigs` for fetchMock check)
37+
* Return `{}` for `POST /_matrix/client/(unstable|v3)/keys/device_signing/upload` request (named `upload-keys` for fetchMock check)
38+
*/
39+
export function mockSetupCrossSigningRequests(): void {
40+
// have account_data requests return an empty object
41+
fetchMock.get("express:/_matrix/client/r0/user/:userId/account_data/:type", {});
42+
43+
// we expect a request to upload signatures for our device ...
44+
fetchMock.post({ url: "path:/_matrix/client/v3/keys/signatures/upload", name: "upload-sigs" }, {});
45+
46+
// ... and one to upload the cross-signing keys (with UIA)
47+
fetchMock.post(
48+
// legacy crypto uses /unstable/; /v3/ is correct
49+
{
50+
url: new RegExp("/_matrix/client/(unstable|v3)/keys/device_signing/upload"),
51+
name: "upload-keys",
52+
},
53+
{},
54+
);
55+
}

0 commit comments

Comments
 (0)