* 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 917d53a56f
---------
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
97 lines
3.4 KiB
TypeScript
97 lines
3.4 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 React from "react";
|
|
import { render, screen, waitFor } from "jest-matrix-react";
|
|
import userEvent from "@testing-library/user-event";
|
|
import { mocked } from "jest-mock";
|
|
import { defer } from "matrix-js-sdk/src/utils";
|
|
|
|
import type { MatrixClient } from "matrix-js-sdk/src/matrix";
|
|
import { createTestClient, withClientContextRenderOptions } from "../../../../../test-utils";
|
|
import { DeleteKeyStoragePanel } from "../../../../../../src/components/views/settings/encryption/DeleteKeyStoragePanel";
|
|
import { useKeyStoragePanelViewModel } from "../../../../../../src/components/viewmodels/settings/encryption/KeyStoragePanelViewModel";
|
|
|
|
jest.mock("../../../../../../src/components/viewmodels/settings/encryption/KeyStoragePanelViewModel", () => ({
|
|
useKeyStoragePanelViewModel: jest
|
|
.fn()
|
|
.mockReturnValue({ setEnabled: jest.fn(), isEnabled: true, loading: false, busy: false }),
|
|
}));
|
|
|
|
describe("<DeleteKeyStoragePanel />", () => {
|
|
let matrixClient: MatrixClient;
|
|
|
|
beforeEach(() => {
|
|
matrixClient = createTestClient();
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.restoreAllMocks();
|
|
});
|
|
|
|
it("should match snapshot", async () => {
|
|
const { asFragment } = render(
|
|
<DeleteKeyStoragePanel onFinish={() => {}} />,
|
|
withClientContextRenderOptions(matrixClient),
|
|
);
|
|
expect(asFragment()).toMatchSnapshot();
|
|
});
|
|
|
|
it("should call onFinished when cancel pressed", async () => {
|
|
const user = userEvent.setup();
|
|
|
|
const onFinish = jest.fn();
|
|
render(<DeleteKeyStoragePanel onFinish={onFinish} />, withClientContextRenderOptions(matrixClient));
|
|
|
|
await user.click(screen.getByRole("button", { name: "Cancel" }));
|
|
expect(onFinish).toHaveBeenCalled();
|
|
});
|
|
|
|
it("should call disable key storage when confirm pressed", async () => {
|
|
const setEnabled = jest.fn();
|
|
|
|
mocked(useKeyStoragePanelViewModel).mockReturnValue({
|
|
setEnabled,
|
|
isEnabled: true,
|
|
loading: false,
|
|
busy: false,
|
|
});
|
|
|
|
const user = userEvent.setup();
|
|
|
|
const onFinish = jest.fn();
|
|
render(<DeleteKeyStoragePanel onFinish={onFinish} />, withClientContextRenderOptions(matrixClient));
|
|
|
|
await user.click(screen.getByRole("button", { name: "Delete key storage" }));
|
|
|
|
expect(setEnabled).toHaveBeenCalledWith(false);
|
|
});
|
|
|
|
it("should wait with button disabled while setEnabled runs", async () => {
|
|
const setEnabledDefer = defer();
|
|
|
|
mocked(useKeyStoragePanelViewModel).mockReturnValue({
|
|
setEnabled: jest.fn().mockReturnValue(setEnabledDefer.promise),
|
|
isEnabled: true,
|
|
loading: false,
|
|
busy: false,
|
|
});
|
|
|
|
const user = userEvent.setup();
|
|
|
|
const onFinish = jest.fn();
|
|
render(<DeleteKeyStoragePanel onFinish={onFinish} />, withClientContextRenderOptions(matrixClient));
|
|
|
|
await user.click(screen.getByRole("button", { name: "Delete key storage" }));
|
|
|
|
expect(onFinish).not.toHaveBeenCalled();
|
|
expect(screen.getByRole("button", { name: "Delete key storage" })).toHaveAttribute("aria-disabled", "true");
|
|
setEnabledDefer.resolve();
|
|
await waitFor(() => expect(onFinish).toHaveBeenCalled());
|
|
});
|
|
});
|