mirror of
https://github.com/vector-im/element-web.git
synced 2025-08-19 05:21:22 +02:00
* Add key storage toggle to Encryption settings * Keys in the acceptable order * Fix some tests * Fix import * Fix toast showing condition * Fix import order * Fix playwright tests * Fix bits lost in merge * Add key storage delete confirm screen * Fix hardcoded Element string * Fix type imports * Fix tests * Tests for key storage delete panel * Fix test * Type import * Test for the view model * Fix type import * Actually fix type imports * Test updating * Add playwright test & clarify slightly confusing comment * Show the advnced section whatever the state of key storage * Update screenshots * Copy css to its own file * Add missing doc & merge loading states * Add tsdoc & loading alt text to spinner * Turn comments into proper tsdoc * Switch to TypedEventEmitter and remove unnecessary loading state * Add screenshot * Use higher level interface * Merge the two hooks in EncryptionUserSettingsTab * Remove unused import * Don't check key backup enabled state separately as we don't need it for all the screens * Update snapshot * Use fixed recovery key function * Amalgamate duplicated CSS files * Have "key storage disabled" as a separate state * Update snapshot * Fix... bad merge? * Add backup enabled mock to more tests * More snapshots * Use defer util * Update to use EncryptionCardButtons * Update snapshots * Use EncryptionCardEmphasisedContent * Update snapshots * Update snapshot * Try screenshot from CI playwright * Try playwright screenshots again * More screenshots * Rename to match files * Test that 4S secrets are deleted * Make description clearer * Fix typo & move related states together * Add comment * More comments * Fix hook docs * restoreAllMocks * Update snapshot because pulling in upstream has caused IDs to shift * Switch icon as apparenty the error icon has changed * Update snapshot * Missing copyright * Re-order states and also sort out indenting * Remove phantom space * Clarify 'button' * Clarify docs more * Explain thinking behind updating * Switch to getActiveBackupVersion which checks that key backup is happining on this device, which is consistent with EX. * Add use of Key Storage Panel Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Change key storage panel to be consistent ie. using getActiveBackupVersion(), and add comment * Add tsdoc Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Use BACKUP_DISABLED_ACCOUNT_DATA_KEY in more places * Expand doc Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Undo random yarn lock change * Use aggregate method for disabling key storage in https://github.com/matrix-org/matrix-js-sdk/pull/4742 * Fix tests * Use key backup status event to update * Comment formatting Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Fix comment & put check inside if statement * Add comment * Prettier * Fix comment * Update snapshot Which has gained nowrap due to 917d53a56fd6de290fdf2269a330d62fe6464907 --------- Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
92 lines
3.3 KiB
TypeScript
92 lines
3.3 KiB
TypeScript
/*
|
|
Copyright 2025 New Vector Ltd.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
import { renderHook } from "jest-matrix-react";
|
|
import { act } from "react";
|
|
import { mocked } from "jest-mock";
|
|
|
|
import type { MatrixClient } from "matrix-js-sdk/src/matrix";
|
|
import type { KeyBackupCheck, KeyBackupInfo } from "matrix-js-sdk/src/crypto-api";
|
|
import { useKeyStoragePanelViewModel } from "../../../../../../src/components/viewmodels/settings/encryption/KeyStoragePanelViewModel";
|
|
import { createTestClient, withClientContextRenderOptions } from "../../../../../test-utils";
|
|
|
|
describe("KeyStoragePanelViewModel", () => {
|
|
let matrixClient: MatrixClient;
|
|
|
|
beforeEach(() => {
|
|
matrixClient = createTestClient();
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
it("should update the pending value immediately", async () => {
|
|
const { result } = renderHook(
|
|
() => useKeyStoragePanelViewModel(),
|
|
withClientContextRenderOptions(matrixClient),
|
|
);
|
|
act(() => {
|
|
result.current.setEnabled(true);
|
|
});
|
|
expect(result.current.isEnabled).toBe(true);
|
|
expect(result.current.busy).toBe(true);
|
|
});
|
|
|
|
it("should call resetKeyBackup if there is no backup currently", async () => {
|
|
mocked(matrixClient.getCrypto()!.checkKeyBackupAndEnable).mockResolvedValue(null);
|
|
|
|
const { result } = renderHook(
|
|
() => useKeyStoragePanelViewModel(),
|
|
withClientContextRenderOptions(matrixClient),
|
|
);
|
|
|
|
await result.current.setEnabled(true);
|
|
expect(mocked(matrixClient.getCrypto()!.resetKeyBackup)).toHaveBeenCalled();
|
|
});
|
|
|
|
it("should not call resetKeyBackup if there is a backup currently", async () => {
|
|
mocked(matrixClient.getCrypto()!.checkKeyBackupAndEnable).mockResolvedValue({} as KeyBackupCheck);
|
|
|
|
const { result } = renderHook(
|
|
() => useKeyStoragePanelViewModel(),
|
|
withClientContextRenderOptions(matrixClient),
|
|
);
|
|
|
|
await result.current.setEnabled(true);
|
|
expect(mocked(matrixClient.getCrypto()!.resetKeyBackup)).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should set account data flag when enabling", async () => {
|
|
mocked(matrixClient.getCrypto()!.checkKeyBackupAndEnable).mockResolvedValue(null);
|
|
|
|
const { result } = renderHook(
|
|
() => useKeyStoragePanelViewModel(),
|
|
withClientContextRenderOptions(matrixClient),
|
|
);
|
|
|
|
await result.current.setEnabled(true);
|
|
expect(mocked(matrixClient.setAccountData)).toHaveBeenCalledWith("m.org.matrix.custom.backup_disabled", {
|
|
disabled: false,
|
|
});
|
|
});
|
|
|
|
it("should delete key storage when disabling", async () => {
|
|
mocked(matrixClient.getCrypto()!.checkKeyBackupAndEnable).mockResolvedValue({} as KeyBackupCheck);
|
|
mocked(matrixClient.getCrypto()!.getKeyBackupInfo).mockResolvedValue({ version: "99" } as KeyBackupInfo);
|
|
|
|
const { result } = renderHook(
|
|
() => useKeyStoragePanelViewModel(),
|
|
withClientContextRenderOptions(matrixClient),
|
|
);
|
|
|
|
await result.current.setEnabled(false);
|
|
|
|
expect(mocked(matrixClient.getCrypto()!.disableKeyStorage)).toHaveBeenCalled();
|
|
});
|
|
});
|