From 523e691136cf27faf30ce6f267b986ceac776338 Mon Sep 17 00:00:00 2001
From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
Date: Wed, 16 Aug 2023 17:28:46 +0100
Subject: [PATCH] MatrixChat-test: stop mocking localStorage (#11419)
We have a perfectly good localStorage impl; no need to do a half-arsed mock of
it.
---
.../components/structures/MatrixChat-test.tsx | 93 +++++++------------
1 file changed, 34 insertions(+), 59 deletions(-)
diff --git a/test/components/structures/MatrixChat-test.tsx b/test/components/structures/MatrixChat-test.tsx
index 20cc827778..eab417931f 100644
--- a/test/components/structures/MatrixChat-test.tsx
+++ b/test/components/structures/MatrixChat-test.tsx
@@ -135,10 +135,6 @@ describe("", () => {
};
const getComponent = (props: Partial> = {}) =>
render();
- let localStorageSetSpy = jest.spyOn(localStorage.__proto__, "setItem");
- let localStorageGetSpy = jest.spyOn(localStorage.__proto__, "getItem").mockReturnValue(undefined);
- let localStorageClearSpy = jest.spyOn(localStorage.__proto__, "clear");
- let sessionStorageSetSpy = jest.spyOn(sessionStorage.__proto__, "setItem");
// make test results readable
filterConsole("Failed to parse localStorage object");
@@ -180,10 +176,6 @@ describe("", () => {
unstable_features: {},
versions: ["v1.1"],
});
- localStorageSetSpy = jest.spyOn(localStorage.__proto__, "setItem");
- localStorageGetSpy = jest.spyOn(localStorage.__proto__, "getItem").mockReturnValue(undefined);
- localStorageClearSpy = jest.spyOn(localStorage.__proto__, "clear");
- sessionStorageSetSpy = jest.spyOn(sessionStorage.__proto__, "setItem");
jest.spyOn(StorageManager, "idbLoad").mockReset();
jest.spyOn(StorageManager, "idbSave").mockResolvedValue(undefined);
@@ -194,6 +186,8 @@ describe("", () => {
afterEach(() => {
jest.clearAllMocks();
+ localStorage.clear();
+ sessionStorage.clear();
});
it("should render spinner while app is loading", () => {
@@ -208,16 +202,13 @@ describe("", () => {
mx_access_token: accessToken,
},
};
- const mockLocalStorage: Record = {
- mx_hs_url: serverConfig.hsUrl,
- mx_is_url: serverConfig.isUrl,
- mx_access_token: accessToken,
- mx_user_id: userId,
- mx_device_id: deviceId,
- };
beforeEach(() => {
- localStorageGetSpy.mockImplementation((key: unknown) => mockLocalStorage[key as string] || "");
+ localStorage.setItem("mx_hs_url", serverConfig.hsUrl);
+ localStorage.setItem("mx_is_url", serverConfig.isUrl);
+ localStorage.setItem("mx_access_token", accessToken);
+ localStorage.setItem("mx_user_id", userId);
+ localStorage.setItem("mx_device_id", deviceId);
jest.spyOn(StorageManager, "idbLoad").mockImplementation(async (table, key) => {
const safeKey = Array.isArray(key) ? key[0] : key;
@@ -521,17 +512,14 @@ describe("", () => {
describe("with a soft-logged-out session", () => {
const mockidb: Record> = {};
- const mockLocalStorage: Record = {
- mx_hs_url: serverConfig.hsUrl,
- mx_is_url: serverConfig.isUrl,
- mx_access_token: accessToken,
- mx_user_id: userId,
- mx_device_id: deviceId,
- mx_soft_logout: "true",
- };
beforeEach(() => {
- localStorageGetSpy.mockImplementation((key: unknown) => mockLocalStorage[key as string] || "");
+ localStorage.setItem("mx_hs_url", serverConfig.hsUrl);
+ localStorage.setItem("mx_is_url", serverConfig.isUrl);
+ localStorage.setItem("mx_access_token", accessToken);
+ localStorage.setItem("mx_user_id", userId);
+ localStorage.setItem("mx_device_id", deviceId);
+ localStorage.setItem("mx_soft_logout", "true");
mockClient.loginFlows.mockResolvedValue({ flows: [{ type: "m.login.password" }] });
@@ -727,14 +715,6 @@ describe("", () => {
loginToken,
};
- const mockLocalStorage: Record = {
- mx_sso_hs_url: serverConfig.hsUrl,
- mx_sso_is_url: serverConfig.isUrl,
- // these are only going to be set during login
- mx_hs_url: serverConfig.hsUrl,
- mx_is_url: serverConfig.isUrl,
- };
-
let loginClient!: ReturnType;
const userId = "@alice:server.org";
const deviceId = "test-device-id";
@@ -746,17 +726,18 @@ describe("", () => {
};
beforeEach(() => {
+ localStorage.setItem("mx_sso_hs_url", serverConfig.hsUrl);
+ localStorage.setItem("mx_sso_is_url", serverConfig.isUrl);
loginClient = getMockClientWithEventEmitter(getMockClientMethods());
// this is used to create a temporary client during login
jest.spyOn(MatrixJs, "createClient").mockReturnValue(loginClient);
loginClient.login.mockClear().mockResolvedValue(clientLoginResponse);
-
- localStorageGetSpy.mockImplementation((key: unknown) => mockLocalStorage[key as string] || "");
});
it("should show an error dialog when no homeserver is found in local storage", async () => {
- localStorageGetSpy.mockReturnValue(undefined);
+ localStorage.removeItem("mx_sso_hs_url");
+ const localStorageGetSpy = jest.spyOn(localStorage.__proto__, "getItem");
getComponent({ realQueryParams });
expect(localStorageGetSpy).toHaveBeenCalledWith("mx_sso_hs_url");
@@ -830,12 +811,15 @@ describe("", () => {
);
});
it("should clear storage", async () => {
+ const localStorageClearSpy = jest.spyOn(localStorage.__proto__, "clear");
+
getComponent({ realQueryParams });
await flushPromises();
// just check we called the clearStorage function
expect(loginClient.clearStores).toHaveBeenCalled();
+ expect(localStorage.getItem("mx_sso_hs_url")).toBe(null);
expect(localStorageClearSpy).toHaveBeenCalled();
});
@@ -844,17 +828,17 @@ describe("", () => {
await flushPromises();
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_hs_url", serverConfig.hsUrl);
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_user_id", userId);
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_has_access_token", "true");
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_device_id", deviceId);
+ expect(localStorage.getItem("mx_hs_url")).toEqual(serverConfig.hsUrl);
+ expect(localStorage.getItem("mx_user_id")).toEqual(userId);
+ expect(localStorage.getItem("mx_has_access_token")).toEqual("true");
+ expect(localStorage.getItem("mx_device_id")).toEqual(deviceId);
});
it("should set fresh login flag in session storage", async () => {
+ const sessionStorageSetSpy = jest.spyOn(sessionStorage.__proto__, "setItem");
getComponent({ realQueryParams });
await flushPromises();
-
expect(sessionStorageSetSpy).toHaveBeenCalledWith("mx_fresh_login", "true");
});
@@ -873,7 +857,7 @@ describe("", () => {
await flushPromises();
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_hs_url", hsUrlFromWk);
+ expect(localStorage.getItem("mx_hs_url")).toEqual(hsUrlFromWk);
});
it("should continue to post login setup when no session is found in local storage", async () => {
@@ -902,14 +886,6 @@ describe("", () => {
const deviceId = "test-device-id";
const accessToken = "test-access-token-from-oidc";
- const mockLocalStorage: Record = {
- // these are only going to be set during login
- mx_hs_url: homeserverUrl,
- mx_is_url: identityServerUrl,
- mx_user_id: userId,
- mx_device_id: deviceId,
- };
-
const tokenResponse: BearerTokenResponse = {
access_token: accessToken,
refresh_token: "def456",
@@ -950,7 +926,6 @@ describe("", () => {
jest.spyOn(logger, "error").mockClear();
jest.spyOn(logger, "log").mockClear();
- localStorageGetSpy.mockImplementation((key: unknown) => mockLocalStorage[key as string] || "");
loginClient.whoami.mockResolvedValue({
user_id: userId,
device_id: deviceId,
@@ -1047,6 +1022,7 @@ describe("", () => {
});
it("should not store clientId or issuer", async () => {
+ const sessionStorageSetSpy = jest.spyOn(sessionStorage.__proto__, "setItem");
getComponent({ realQueryParams });
await flushPromises();
@@ -1058,7 +1034,6 @@ describe("", () => {
describe("when login succeeds", () => {
beforeEach(() => {
- localStorageGetSpy.mockImplementation((key: unknown) => mockLocalStorage[key as string] || "");
jest.spyOn(StorageManager, "idbLoad").mockImplementation(
async (_table: string, key: string | string[]) => (key === "mx_access_token" ? accessToken : null),
);
@@ -1072,10 +1047,10 @@ describe("", () => {
await flushPromises();
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_hs_url", homeserverUrl);
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_user_id", userId);
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_has_access_token", "true");
- expect(localStorageSetSpy).toHaveBeenCalledWith("mx_device_id", deviceId);
+ expect(localStorage.getItem("mx_hs_url")).toEqual(homeserverUrl);
+ expect(localStorage.getItem("mx_user_id")).toEqual(userId);
+ expect(localStorage.getItem("mx_has_access_token")).toEqual("true");
+ expect(localStorage.getItem("mx_device_id")).toEqual(deviceId);
});
it("should store clientId and issuer in session storage", async () => {
@@ -1083,8 +1058,8 @@ describe("", () => {
await flushPromises();
- expect(sessionStorageSetSpy).toHaveBeenCalledWith("mx_oidc_client_id", clientId);
- expect(sessionStorageSetSpy).toHaveBeenCalledWith("mx_oidc_token_issuer", issuer);
+ expect(sessionStorage.getItem("mx_oidc_client_id")).toEqual(clientId);
+ expect(sessionStorage.getItem("mx_oidc_token_issuer")).toEqual(issuer);
});
it("should set logged in and start MatrixClient", async () => {
@@ -1104,7 +1079,7 @@ describe("", () => {
homeserverUrl +
" softLogout: " +
false,
- " freshLogin: " + false,
+ " freshLogin: " + true,
);
// client successfully started