diff --git a/src/Lifecycle.ts b/src/Lifecycle.ts index 90ead50fa6..da4010c57e 100644 --- a/src/Lifecycle.ts +++ b/src/Lifecycle.ts @@ -875,8 +875,9 @@ async function clearStorage(opts?: { deleteEverything?: boolean }): Promise { const roomId = i.roomId; delete i.roomId; // delete to avoid confusing the store ThreepidInviteStore.instance.storeInvite(roomId, i); }); + + if (registrationTime) { + window.localStorage.setItem("mx_registration_time", registrationTime); + } } } diff --git a/src/MatrixClientPeg.ts b/src/MatrixClientPeg.ts index 7949518fc2..0ef270051c 100644 --- a/src/MatrixClientPeg.ts +++ b/src/MatrixClientPeg.ts @@ -117,7 +117,7 @@ class MatrixClientPegClass implements IMatrixClientPeg { }; private matrixClient: MatrixClient = null; - private justRegisteredUserId: string; + private justRegisteredUserId: string | null = null; // the credentials used to init the current client object. // used if we tear it down & recreate it with a different store @@ -136,7 +136,7 @@ class MatrixClientPegClass implements IMatrixClientPeg { MatrixActionCreators.stop(); } - public setJustRegisteredUserId(uid: string): void { + public setJustRegisteredUserId(uid: string | null): void { this.justRegisteredUserId = uid; if (uid) { window.localStorage.setItem("mx_registration_time", String(new Date().getTime())); @@ -151,9 +151,14 @@ class MatrixClientPegClass implements IMatrixClientPeg { } public userRegisteredWithinLastHours(hours: number): boolean { + if (hours <= 0) { + return false; + } + try { - const date = new Date(window.localStorage.getItem("mx_registration_time")); - return ((new Date().getTime() - date.getTime()) / 36e5) <= hours; + const registrationTime = parseInt(window.localStorage.getItem("mx_registration_time")); + const diff = Date.now() - registrationTime; + return (diff / 36e5) <= hours; } catch (e) { return false; } diff --git a/test/MatrixClientPeg-test.ts b/test/MatrixClientPeg-test.ts new file mode 100644 index 0000000000..f3f6826c15 --- /dev/null +++ b/test/MatrixClientPeg-test.ts @@ -0,0 +1,58 @@ +/* +Copyright 2022 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { advanceDateAndTime, stubClient } from "./test-utils"; +import { MatrixClientPeg as peg } from "../src/MatrixClientPeg"; + +describe("MatrixClientPeg", () => { + afterEach(() => { + localStorage.clear(); + advanceDateAndTime(0); + }); + + it("setJustRegisteredUserId", () => { + stubClient(); + (peg as any).matrixClient = peg.get(); + peg.setJustRegisteredUserId("@userId:matrix.rog"); + expect(peg.get().credentials.userId).toBe("@userId:matrix.rog"); + expect(peg.currentUserIsJustRegistered()).toBe(true); + expect(peg.userRegisteredWithinLastHours(0)).toBe(false); + expect(peg.userRegisteredWithinLastHours(1)).toBe(true); + expect(peg.userRegisteredWithinLastHours(24)).toBe(true); + advanceDateAndTime(1 * 60 * 60 * 1000); + expect(peg.userRegisteredWithinLastHours(0)).toBe(false); + expect(peg.userRegisteredWithinLastHours(1)).toBe(false); + expect(peg.userRegisteredWithinLastHours(24)).toBe(true); + advanceDateAndTime(24 * 60 * 60 * 1000); + expect(peg.userRegisteredWithinLastHours(0)).toBe(false); + expect(peg.userRegisteredWithinLastHours(1)).toBe(false); + expect(peg.userRegisteredWithinLastHours(24)).toBe(false); + }); + + it("setJustRegisteredUserId(null)", () => { + stubClient(); + (peg as any).matrixClient = peg.get(); + peg.setJustRegisteredUserId(null); + expect(peg.currentUserIsJustRegistered()).toBe(false); + expect(peg.userRegisteredWithinLastHours(0)).toBe(false); + expect(peg.userRegisteredWithinLastHours(1)).toBe(false); + expect(peg.userRegisteredWithinLastHours(24)).toBe(false); + advanceDateAndTime(1 * 60 * 60 * 1000); + expect(peg.userRegisteredWithinLastHours(0)).toBe(false); + expect(peg.userRegisteredWithinLastHours(1)).toBe(false); + expect(peg.userRegisteredWithinLastHours(24)).toBe(false); + }); +}); diff --git a/test/end-to-end-tests/src/scenarios/toast.ts b/test/end-to-end-tests/src/scenarios/toast.ts index c8f094f840..bf7dbe809b 100644 --- a/test/end-to-end-tests/src/scenarios/toast.ts +++ b/test/end-to-end-tests/src/scenarios/toast.ts @@ -21,10 +21,6 @@ export async function toastScenarios(alice: ElementSession, bob: ElementSession) console.log(" checking and clearing toasts:"); alice.log.startGroup(`clears toasts`); - alice.log.step(`reject desktop notifications toast`); - await rejectToast(alice, "Notifications"); - alice.log.done(); - alice.log.step(`accepts analytics toast`); await acceptToast(alice, "Help improve Element"); alice.log.done(); @@ -35,10 +31,6 @@ export async function toastScenarios(alice: ElementSession, bob: ElementSession) alice.log.endGroup(); bob.log.startGroup(`clears toasts`); - bob.log.step(`reject desktop notifications toast`); - await rejectToast(bob, "Notifications"); - bob.log.done(); - bob.log.step(`reject analytics toast`); await rejectToast(bob, "Help improve Element"); bob.log.done();