From 4a8ba810a9a29b11e60b1f2799e3478192dfac7d Mon Sep 17 00:00:00 2001 From: Florian D Date: Fri, 7 Feb 2025 14:57:02 +0100 Subject: [PATCH] Encryption tab: display correct encryption panel when user cancels the reset identity flow (#29216) * fix(encryption settings): check encryption state when user cancels the reset identity flow * test(encryption settings): add test to check encryption state when user cancels the reset identity flow --- .../tabs/user/EncryptionUserSettingsTab.tsx | 14 +++------- .../user/EncryptionUserSettingsTab-test.tsx | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/components/views/settings/tabs/user/EncryptionUserSettingsTab.tsx b/src/components/views/settings/tabs/user/EncryptionUserSettingsTab.tsx index 0b4b27e9d0..2a041a04c8 100644 --- a/src/components/views/settings/tabs/user/EncryptionUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/EncryptionUserSettingsTab.tsx @@ -102,20 +102,12 @@ export function EncryptionUserSettingsTab({ initialState = "loading" }: Encrypti ); break; case "reset_identity_compromised": - content = ( - setState("main")} - onFinish={() => setState("main")} - /> - ); - break; case "reset_identity_forgot": content = ( setState("main")} - onFinish={() => setState("main")} + variant={state === "reset_identity_compromised" ? "compromised" : "forgot"} + onCancelClick={checkEncryptionState} + onFinish={checkEncryptionState} /> ); break; diff --git a/test/unit-tests/components/views/settings/tabs/user/EncryptionUserSettingsTab-test.tsx b/test/unit-tests/components/views/settings/tabs/user/EncryptionUserSettingsTab-test.tsx index 9137140c79..536dadf305 100644 --- a/test/unit-tests/components/views/settings/tabs/user/EncryptionUserSettingsTab-test.tsx +++ b/test/unit-tests/components/views/settings/tabs/user/EncryptionUserSettingsTab-test.tsx @@ -144,4 +144,30 @@ describe("", () => { screen.getByRole("heading", { name: "Forgot your recovery key? You’ll need to reset your identity." }), ).toBeVisible(); }); + + it("should re-check the encryption state and displays the correct panel when the user clicks cancel the reset identity flow", async () => { + const user = userEvent.setup(); + + // Secrets are not cached + jest.spyOn(matrixClient.getCrypto()!, "getCrossSigningStatus").mockResolvedValue({ + privateKeysInSecretStorage: true, + publicKeysOnDevice: true, + privateKeysCachedLocally: { + masterKey: false, + selfSigningKey: true, + userSigningKey: true, + }, + }); + + renderComponent({ initialState: "reset_identity_forgot" }); + + expect( + screen.getByRole("heading", { name: "Forgot your recovery key? You’ll need to reset your identity." }), + ).toBeVisible(); + + await user.click(screen.getByRole("button", { name: "Back" })); + await waitFor(() => + screen.getByText("Your key storage is out of sync. Click one of the buttons below to fix the problem."), + ); + }); });