Fix ability to send rageshake during session restore failure (#31848)
* Fix ability to send rageshake during session restore failure This fixes the specific edge case but also hardens the codepath to limit the effect of other similar edges popping up Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Improve coverage Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Improve coverage Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
@@ -893,7 +893,12 @@ export default class SettingsStore {
|
|||||||
for (const settingKey of (Object.keys(SETTINGS) as SettingKey[]).filter(
|
for (const settingKey of (Object.keys(SETTINGS) as SettingKey[]).filter(
|
||||||
(s) => SETTINGS[s].shouldExportToRageshake !== false,
|
(s) => SETTINGS[s].shouldExportToRageshake !== false,
|
||||||
)) {
|
)) {
|
||||||
settingMap[settingKey] = SettingsStore.getValue(settingKey);
|
try {
|
||||||
|
settingMap[settingKey] = SettingsStore.getValue(settingKey);
|
||||||
|
} catch (e) {
|
||||||
|
logger.warn("Failed to read setting", settingKey, e);
|
||||||
|
settingMap[settingKey] = "Failed to read setting!";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return JSON.stringify(settingMap);
|
return JSON.stringify(settingMap);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import { type SettingLevel } from "../SettingLevel";
|
|||||||
// default action on this rule is dont_notify, but it could be something else
|
// default action on this rule is dont_notify, but it could be something else
|
||||||
export function isPushNotifyDisabled(): boolean {
|
export function isPushNotifyDisabled(): boolean {
|
||||||
// Return the value of the master push rule as a default
|
// Return the value of the master push rule as a default
|
||||||
const masterRule = MatrixClientPeg.safeGet().pushProcessor.getPushRuleById(".m.rule.master");
|
const masterRule = MatrixClientPeg.get()?.pushProcessor.getPushRuleById(".m.rule.master");
|
||||||
|
|
||||||
if (!masterRule) {
|
if (!masterRule) {
|
||||||
logger.warn("No master push rule! Notifications are disabled for this user.");
|
logger.warn("No master push rule! Notifications are disabled for this user.");
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ import { type FeatureSettingKey, type SettingKey } from "../../src/settings/Sett
|
|||||||
import { SettingLevel } from "../../src/settings/SettingLevel.ts";
|
import { SettingLevel } from "../../src/settings/SettingLevel.ts";
|
||||||
import SdkConfig from "../../src/SdkConfig.ts";
|
import SdkConfig from "../../src/SdkConfig.ts";
|
||||||
import { BugReportEndpointURLLocal } from "../../src/IConfigOptions.ts";
|
import { BugReportEndpointURLLocal } from "../../src/IConfigOptions.ts";
|
||||||
|
import { Notifier } from "../../src/Notifier.ts";
|
||||||
|
import { MatrixClientPeg } from "../../src/MatrixClientPeg.ts";
|
||||||
|
|
||||||
describe("Rageshakes", () => {
|
describe("Rageshakes", () => {
|
||||||
let mockClient: Mocked<MatrixClient>;
|
let mockClient: Mocked<MatrixClient>;
|
||||||
@@ -356,7 +358,9 @@ describe("Rageshakes", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("Settings Store", () => {
|
describe("Settings Store", () => {
|
||||||
const mockSettingsStore = mocked(SettingsStore);
|
beforeEach(() => {
|
||||||
|
jest.spyOn(Notifier, "isPossible").mockReturnValue(true);
|
||||||
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
jest.restoreAllMocks();
|
jest.restoreAllMocks();
|
||||||
@@ -368,8 +372,8 @@ describe("Rageshakes", () => {
|
|||||||
"feature_notification_settings2",
|
"feature_notification_settings2",
|
||||||
] as unknown[] as FeatureSettingKey[];
|
] as unknown[] as FeatureSettingKey[];
|
||||||
const enabledFeatures: SettingKey[] = ["feature_video_rooms"];
|
const enabledFeatures: SettingKey[] = ["feature_video_rooms"];
|
||||||
jest.spyOn(mockSettingsStore, "getFeatureSettingNames").mockReturnValue(someFeatures);
|
jest.spyOn(SettingsStore, "getFeatureSettingNames").mockReturnValue(someFeatures);
|
||||||
jest.spyOn(mockSettingsStore, "getValue").mockImplementation((settingName): any => {
|
jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName): any => {
|
||||||
return enabledFeatures.includes(settingName);
|
return enabledFeatures.includes(settingName);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -378,7 +382,7 @@ describe("Rageshakes", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should collect low bandWidth enabled", async () => {
|
it("should collect low bandWidth enabled", async () => {
|
||||||
jest.spyOn(mockSettingsStore, "getValue").mockImplementation((settingName): any => {
|
jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName): any => {
|
||||||
if (settingName == "lowBandwidth") {
|
if (settingName == "lowBandwidth") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -388,7 +392,7 @@ describe("Rageshakes", () => {
|
|||||||
expect(formData.get("lowBandwidth")).toBe("enabled");
|
expect(formData.get("lowBandwidth")).toBe("enabled");
|
||||||
});
|
});
|
||||||
it("should collect low bandWidth disabled", async () => {
|
it("should collect low bandWidth disabled", async () => {
|
||||||
jest.spyOn(mockSettingsStore, "getValue").mockImplementation((settingName): any => {
|
jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName): any => {
|
||||||
if (settingName == "lowBandwidth") {
|
if (settingName == "lowBandwidth") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -397,6 +401,28 @@ describe("Rageshakes", () => {
|
|||||||
const formData = await collectBugReport();
|
const formData = await collectBugReport();
|
||||||
expect(formData.get("lowBandwidth")).toBeNull();
|
expect(formData.get("lowBandwidth")).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should handle settings throwing when logged out", async () => {
|
||||||
|
jest.mocked(MatrixClientPeg.get).mockRestore();
|
||||||
|
jest.mocked(MatrixClientPeg.safeGet).mockRestore();
|
||||||
|
jest.spyOn(Notifier, "isPossible").mockImplementation(() => {
|
||||||
|
throw new Error("Test");
|
||||||
|
});
|
||||||
|
|
||||||
|
const formData = await collectBugReport();
|
||||||
|
expect(JSON.parse(formData.get("mx_local_settings") as string)["notificationsEnabled"]).toBe(
|
||||||
|
"Failed to read setting!",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should handle reading notification settings when logged out", async () => {
|
||||||
|
jest.mocked(MatrixClientPeg.get).mockRestore();
|
||||||
|
jest.mocked(MatrixClientPeg.safeGet).mockRestore();
|
||||||
|
jest.spyOn(Notifier, "isPossible").mockReturnValue(true);
|
||||||
|
|
||||||
|
const formData = await collectBugReport();
|
||||||
|
expect(JSON.parse(formData.get("mx_local_settings") as string)["notificationsEnabled"]).toBe(false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Navigator Storage", () => {
|
describe("Navigator Storage", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user