Enable the rust-crypto labs button (#12114)
* `LabsUserSettingsTab-test.tsx`: use a real `SdkConfig` ... instead of mocking it out. Doing so allows us more flexibility, and gives a more realistic test. * Enable the rust-crypto labs button * fix up a test
This commit is contained in:
parent
b64d2e734a
commit
b6364a4cea
7 changed files with 139 additions and 20 deletions
|
@ -15,15 +15,14 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import React from "react";
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import { fireEvent, render, screen } from "@testing-library/react";
|
||||
|
||||
import LabsUserSettingsTab from "../../../../../../src/components/views/settings/tabs/user/LabsUserSettingsTab";
|
||||
import SettingsStore from "../../../../../../src/settings/SettingsStore";
|
||||
import SdkConfig from "../../../../../../src/SdkConfig";
|
||||
import { SettingLevel } from "../../../../../../src/settings/SettingLevel";
|
||||
|
||||
describe("<LabsUserSettingsTab />", () => {
|
||||
const sdkConfigSpy = jest.spyOn(SdkConfig, "get");
|
||||
|
||||
const defaultProps = {
|
||||
closeSettingsFn: jest.fn(),
|
||||
};
|
||||
|
@ -34,7 +33,9 @@ describe("<LabsUserSettingsTab />", () => {
|
|||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
settingsValueSpy.mockReturnValue(false);
|
||||
sdkConfigSpy.mockReturnValue(false);
|
||||
SdkConfig.reset();
|
||||
SdkConfig.add({ brand: "BrandedClient" });
|
||||
localStorage.clear();
|
||||
});
|
||||
|
||||
it("renders settings marked as beta as beta cards", () => {
|
||||
|
@ -43,6 +44,7 @@ describe("<LabsUserSettingsTab />", () => {
|
|||
});
|
||||
|
||||
it("does not render non-beta labs settings when disabled in config", () => {
|
||||
const sdkConfigSpy = jest.spyOn(SdkConfig, "get");
|
||||
render(getComponent());
|
||||
expect(sdkConfigSpy).toHaveBeenCalledWith("show_labs_settings");
|
||||
|
||||
|
@ -52,7 +54,7 @@ describe("<LabsUserSettingsTab />", () => {
|
|||
|
||||
it("renders non-beta labs settings when enabled in config", () => {
|
||||
// enable labs
|
||||
sdkConfigSpy.mockImplementation((configName) => configName === "show_labs_settings");
|
||||
SdkConfig.add({ show_labs_settings: true });
|
||||
const { container } = render(getComponent());
|
||||
|
||||
// non-beta labs section
|
||||
|
@ -60,4 +62,82 @@ describe("<LabsUserSettingsTab />", () => {
|
|||
const labsSections = container.getElementsByClassName("mx_SettingsSubsection");
|
||||
expect(labsSections).toHaveLength(9);
|
||||
});
|
||||
|
||||
describe("Rust crypto setting", () => {
|
||||
const SETTING_NAME = "Rust cryptography implementation";
|
||||
|
||||
beforeEach(() => {
|
||||
SdkConfig.add({ show_labs_settings: true });
|
||||
});
|
||||
|
||||
describe("Not enabled in config", () => {
|
||||
it("can be turned on if not already", async () => {
|
||||
// By the time the settings panel is shown, `MatrixClientPeg.initClientCrypto` has saved the current
|
||||
// value to the settings store.
|
||||
await SettingsStore.setValue("feature_rust_crypto", null, SettingLevel.DEVICE, false);
|
||||
|
||||
const rendered = render(getComponent());
|
||||
const toggle = rendered.getByRole("switch", { name: SETTING_NAME });
|
||||
expect(toggle.getAttribute("aria-disabled")).toEqual("false");
|
||||
expect(toggle.getAttribute("aria-checked")).toEqual("false");
|
||||
|
||||
const description = toggle.closest(".mx_SettingsFlag")?.querySelector(".mx_SettingsFlag_microcopy");
|
||||
expect(description).toHaveTextContent(/To disable you will need to log out and back in/);
|
||||
});
|
||||
|
||||
it("cannot be turned off once enabled", async () => {
|
||||
await SettingsStore.setValue("feature_rust_crypto", null, SettingLevel.DEVICE, true);
|
||||
|
||||
const rendered = render(getComponent());
|
||||
const toggle = rendered.getByRole("switch", { name: SETTING_NAME });
|
||||
expect(toggle.getAttribute("aria-disabled")).toEqual("true");
|
||||
expect(toggle.getAttribute("aria-checked")).toEqual("true");
|
||||
|
||||
// Hover over the toggle to make it show the tooltip
|
||||
fireEvent.mouseOver(toggle);
|
||||
|
||||
const tooltip = rendered.getByRole("tooltip");
|
||||
expect(tooltip).toHaveTextContent(
|
||||
"Once enabled, Rust cryptography can only be disabled by logging out and in again",
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("Enabled in config", () => {
|
||||
beforeEach(() => {
|
||||
SdkConfig.add({ features: { feature_rust_crypto: true } });
|
||||
});
|
||||
|
||||
it("can be turned on if not already", async () => {
|
||||
// By the time the settings panel is shown, `MatrixClientPeg.initClientCrypto` has saved the current
|
||||
// value to the settings store.
|
||||
await SettingsStore.setValue("feature_rust_crypto", null, SettingLevel.DEVICE, false);
|
||||
|
||||
const rendered = render(getComponent());
|
||||
const toggle = rendered.getByRole("switch", { name: SETTING_NAME });
|
||||
expect(toggle.getAttribute("aria-disabled")).toEqual("false");
|
||||
expect(toggle.getAttribute("aria-checked")).toEqual("false");
|
||||
|
||||
const description = toggle.closest(".mx_SettingsFlag")?.querySelector(".mx_SettingsFlag_microcopy");
|
||||
expect(description).toHaveTextContent(/It cannot be disabled/);
|
||||
});
|
||||
|
||||
it("cannot be turned off once enabled", async () => {
|
||||
await SettingsStore.setValue("feature_rust_crypto", null, SettingLevel.DEVICE, true);
|
||||
|
||||
const rendered = render(getComponent());
|
||||
const toggle = rendered.getByRole("switch", { name: SETTING_NAME });
|
||||
expect(toggle.getAttribute("aria-disabled")).toEqual("true");
|
||||
expect(toggle.getAttribute("aria-checked")).toEqual("true");
|
||||
|
||||
// Hover over the toggle to make it show the tooltip
|
||||
fireEvent.mouseOver(toggle);
|
||||
|
||||
const tooltip = rendered.getByRole("tooltip");
|
||||
expect(tooltip).toHaveTextContent(
|
||||
"Rust cryptography cannot be disabled on this deployment of BrandedClient",
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -15,7 +15,7 @@ exports[`<LabsUserSettingsTab /> renders settings marked as beta as beta cards 1
|
|||
<div
|
||||
class="mx_SettingsSubsection_text"
|
||||
>
|
||||
What's next for false? Labs are the best way to get things early, test out new features and help shape them before they actually launch.
|
||||
What's next for BrandedClient? Labs are the best way to get things early, test out new features and help shape them before they actually launch.
|
||||
</div>
|
||||
<div
|
||||
class="mx_BetaCard"
|
||||
|
@ -42,10 +42,10 @@ exports[`<LabsUserSettingsTab /> renders settings marked as beta as beta cards 1
|
|||
class="mx_BetaCard_caption"
|
||||
>
|
||||
<p>
|
||||
A new way to chat over voice and video in .
|
||||
A new way to chat over voice and video in BrandedClient.
|
||||
</p>
|
||||
<p>
|
||||
Video rooms are always-on VoIP channels embedded within a room in .
|
||||
Video rooms are always-on VoIP channels embedded within a room in BrandedClient.
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
|
@ -62,7 +62,7 @@ exports[`<LabsUserSettingsTab /> renders settings marked as beta as beta cards 1
|
|||
<div
|
||||
class="mx_BetaCard_refreshWarning"
|
||||
>
|
||||
Joining the beta will reload .
|
||||
Joining the beta will reload BrandedClient.
|
||||
</div>
|
||||
<div
|
||||
class="mx_BetaCard_faq"
|
||||
|
@ -104,7 +104,7 @@ exports[`<LabsUserSettingsTab /> renders settings marked as beta as beta cards 1
|
|||
class="mx_BetaCard_caption"
|
||||
>
|
||||
<p>
|
||||
Introducing a simpler way to change your notification settings. Customize your , just the way you like.
|
||||
Introducing a simpler way to change your notification settings. Customize your BrandedClient, just the way you like.
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue