-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
246 additions
and
0 deletions.
There are no files selected for viewing
91 changes: 91 additions & 0 deletions
91
test/unit-tests/components/views/settings/encryption/DeleteKeyStoragePanel-test.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* | ||
* 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 { MatrixClient } from "matrix-js-sdk/src/matrix"; | ||
import { render, screen, waitFor } from "jest-matrix-react"; | ||
import userEvent from "@testing-library/user-event"; | ||
import { mocked } from "jest-mock"; | ||
import { isEnabled } from "@sentry/core"; | ||
Check failure on line 13 in test/unit-tests/components/views/settings/encryption/DeleteKeyStoragePanel-test.tsx
|
||
|
||
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"); | ||
|
||
describe("<DeleteKeyStoragePanel />", () => { | ||
let matrixClient: MatrixClient; | ||
|
||
beforeEach(() => { | ||
matrixClient = createTestClient(); | ||
}); | ||
|
||
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 () => { | ||
let setEnabledResolve: () => void; | ||
const setEnabledPromise = new Promise<void>((r) => { | ||
setEnabledResolve = r; | ||
}); | ||
|
||
mocked(useKeyStoragePanelViewModel).mockReturnValue({ | ||
setEnabled: jest.fn().mockReturnValue(setEnabledPromise), | ||
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"); | ||
setEnabledResolve!(); | ||
await waitFor(() => expect(onFinish).toHaveBeenCalled()); | ||
}); | ||
}); |
155 changes: 155 additions & 0 deletions
155
...ts/components/views/settings/encryption/__snapshots__/DeleteKeyStoragePanel-test.tsx.snap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
// Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
||
exports[`<DeleteKeyStoragePanel /> should match snapshot 1`] = ` | ||
<DocumentFragment> | ||
<nav | ||
class="_breadcrumb_ikpbb_17" | ||
> | ||
<button | ||
aria-label="Back" | ||
class="_icon-button_bh2qc_17 _subtle-bg_bh2qc_38" | ||
role="button" | ||
style="--cpd-icon-button-size: 28px;" | ||
tabindex="0" | ||
> | ||
<div | ||
class="_indicator-icon_133tf_26" | ||
style="--cpd-icon-button-size: 100%;" | ||
> | ||
<svg | ||
fill="currentColor" | ||
height="1em" | ||
viewBox="0 0 24 24" | ||
width="1em" | ||
xmlns="http://www.w3.org/2000/svg" | ||
> | ||
<path | ||
d="m13.3 17.3-4.6-4.6a.877.877 0 0 1-.213-.325A1.106 1.106 0 0 1 8.425 12c0-.133.02-.258.062-.375A.878.878 0 0 1 8.7 11.3l4.6-4.6a.948.948 0 0 1 .7-.275.95.95 0 0 1 .7.275.948.948 0 0 1 .275.7.948.948 0 0 1-.275.7L10.8 12l3.9 3.9a.949.949 0 0 1 .275.7.948.948 0 0 1-.275.7.948.948 0 0 1-.7.275.948.948 0 0 1-.7-.275Z" | ||
/> | ||
</svg> | ||
</div> | ||
</button> | ||
<ol | ||
class="_pages_ikpbb_26" | ||
> | ||
<li> | ||
<a | ||
class="_link_ue21z_17" | ||
data-kind="primary" | ||
data-size="small" | ||
rel="noreferrer noopener" | ||
role="button" | ||
tabindex="0" | ||
> | ||
Encryption | ||
</a> | ||
</li> | ||
<li> | ||
<span | ||
aria-current="page" | ||
class="_last-page_ikpbb_39" | ||
> | ||
Delete key storage | ||
</span> | ||
</li> | ||
</ol> | ||
</nav> | ||
<div | ||
class="mx_EncryptionCard mx_ResetIdentityPanel" | ||
> | ||
<div | ||
class="mx_EncryptionCard_header" | ||
> | ||
<div | ||
class="_content_md016_17 _destructive_md016_43" | ||
data-size="large" | ||
> | ||
<svg | ||
fill="currentColor" | ||
height="1em" | ||
viewBox="0 0 24 24" | ||
width="1em" | ||
xmlns="http://www.w3.org/2000/svg" | ||
> | ||
<path | ||
d="M12 17a.97.97 0 0 0 .713-.288A.968.968 0 0 0 13 16a.968.968 0 0 0-.287-.713A.968.968 0 0 0 12 15a.968.968 0 0 0-.713.287A.968.968 0 0 0 11 16c0 .283.096.52.287.712.192.192.43.288.713.288Zm0-4c.283 0 .52-.096.713-.287A.968.968 0 0 0 13 12V8a.967.967 0 0 0-.287-.713A.968.968 0 0 0 12 7a.968.968 0 0 0-.713.287A.967.967 0 0 0 11 8v4c0 .283.096.52.287.713.192.191.43.287.713.287Zm0 9a9.738 9.738 0 0 1-3.9-.788 10.099 10.099 0 0 1-3.175-2.137c-.9-.9-1.612-1.958-2.137-3.175A9.738 9.738 0 0 1 2 12a9.74 9.74 0 0 1 .788-3.9 10.099 10.099 0 0 1 2.137-3.175c.9-.9 1.958-1.612 3.175-2.137A9.738 9.738 0 0 1 12 2a9.74 9.74 0 0 1 3.9.788 10.098 10.098 0 0 1 3.175 2.137c.9.9 1.613 1.958 2.137 3.175A9.738 9.738 0 0 1 22 12a9.738 9.738 0 0 1-.788 3.9 10.098 10.098 0 0 1-2.137 3.175c-.9.9-1.958 1.613-3.175 2.137A9.738 9.738 0 0 1 12 22Z" | ||
/> | ||
</svg> | ||
</div> | ||
<h2 | ||
class="_typography_yh5dq_162 _font-heading-sm-semibold_yh5dq_102" | ||
> | ||
Are you sure you want to turn off key storage and delete it? | ||
</h2> | ||
</div> | ||
<div | ||
class="mx_ResetIdentityPanel_content" | ||
> | ||
Deleting key storage will remove your cryptographic identity and message keys from the server and turn off the following security features: | ||
<ul | ||
class="_visual-list_4dcf8_17" | ||
> | ||
<li | ||
class="_visual-list-item_bqeu7_17" | ||
> | ||
<svg | ||
aria-hidden="true" | ||
class="_visual-list-item-icon_bqeu7_26 _visual-list-item-icon-destructive_bqeu7_35" | ||
fill="currentColor" | ||
height="24px" | ||
viewBox="0 0 24 24" | ||
width="24px" | ||
xmlns="http://www.w3.org/2000/svg" | ||
> | ||
<path | ||
d="M6.293 6.293a1 1 0 0 1 1.414 0L12 10.586l4.293-4.293a1 1 0 1 1 1.414 1.414L13.414 12l4.293 4.293a1 1 0 0 1-1.414 1.414L12 13.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L10.586 12 6.293 7.707a1 1 0 0 1 0-1.414Z" | ||
/> | ||
</svg> | ||
You will not have encrypted message history on new devices | ||
</li> | ||
<li | ||
class="_visual-list-item_bqeu7_17" | ||
> | ||
<svg | ||
aria-hidden="true" | ||
class="_visual-list-item-icon_bqeu7_26 _visual-list-item-icon-destructive_bqeu7_35" | ||
fill="currentColor" | ||
height="24px" | ||
viewBox="0 0 24 24" | ||
width="24px" | ||
xmlns="http://www.w3.org/2000/svg" | ||
> | ||
<path | ||
d="M6.293 6.293a1 1 0 0 1 1.414 0L12 10.586l4.293-4.293a1 1 0 1 1 1.414 1.414L13.414 12l4.293 4.293a1 1 0 0 1-1.414 1.414L12 13.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L10.586 12 6.293 7.707a1 1 0 0 1 0-1.414Z" | ||
/> | ||
</svg> | ||
You will lose access to your encrypted messages if you are signed out of Element everywhere | ||
</li> | ||
</ul> | ||
</div> | ||
<div | ||
class="mx_ResetIdentityPanel_footer" | ||
> | ||
<button | ||
aria-disabled="false" | ||
class="_button_i91xf_17 _destructive_i91xf_116" | ||
data-kind="primary" | ||
data-size="lg" | ||
role="button" | ||
tabindex="0" | ||
> | ||
Delete key storage | ||
</button> | ||
<button | ||
class="_button_i91xf_17" | ||
data-kind="tertiary" | ||
data-size="lg" | ||
role="button" | ||
tabindex="0" | ||
> | ||
Cancel | ||
</button> | ||
</div> | ||
</div> | ||
</DocumentFragment> | ||
`; |