89 lines
4.0 KiB
TypeScript
89 lines
4.0 KiB
TypeScript
/*
|
|
Copyright 2024 New Vector Ltd.
|
|
Copyright 2023 The Matrix.org Foundation C.I.C.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
import { ConditionKind, EventType, IPushRule, MatrixEvent, PushRuleActionName } from "matrix-js-sdk/src/matrix";
|
|
|
|
import { getChangedOverrideRoomMutePushRules } from "../../../../../src/stores/room-list/utils/roomMute";
|
|
import { DEFAULT_PUSH_RULES, getDefaultRuleWithKind, makePushRule } from "../../../../test-utils/pushRules";
|
|
|
|
describe("getChangedOverrideRoomMutePushRules()", () => {
|
|
const makePushRulesEvent = (overrideRules: IPushRule[] = []): MatrixEvent => {
|
|
return new MatrixEvent({
|
|
type: EventType.PushRules,
|
|
content: {
|
|
global: {
|
|
...DEFAULT_PUSH_RULES.global,
|
|
override: overrideRules,
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
it("returns undefined when dispatched action is not accountData", () => {
|
|
const action = { action: "MatrixActions.Event.decrypted", event: new MatrixEvent({}) };
|
|
expect(getChangedOverrideRoomMutePushRules(action)).toBeUndefined();
|
|
});
|
|
|
|
it("returns undefined when dispatched action is not pushrules", () => {
|
|
const action = { action: "MatrixActions.accountData", event: new MatrixEvent({ type: "not-push-rules" }) };
|
|
expect(getChangedOverrideRoomMutePushRules(action)).toBeUndefined();
|
|
});
|
|
|
|
it("returns undefined when actions event is falsy", () => {
|
|
const action = { action: "MatrixActions.accountData" };
|
|
expect(getChangedOverrideRoomMutePushRules(action)).toBeUndefined();
|
|
});
|
|
|
|
it("returns undefined when actions previousEvent is falsy", () => {
|
|
const pushRulesEvent = makePushRulesEvent();
|
|
const action = { action: "MatrixActions.accountData", event: pushRulesEvent };
|
|
expect(getChangedOverrideRoomMutePushRules(action)).toBeUndefined();
|
|
});
|
|
|
|
it("filters out non-room specific rules", () => {
|
|
// an override rule that exists in default rules
|
|
const { rule } = getDefaultRuleWithKind(".m.rule.contains_display_name");
|
|
const updatedRule = {
|
|
...rule,
|
|
actions: [PushRuleActionName.DontNotify],
|
|
enabled: false,
|
|
};
|
|
const previousEvent = makePushRulesEvent([rule]);
|
|
const pushRulesEvent = makePushRulesEvent([updatedRule]);
|
|
const action = { action: "MatrixActions.accountData", event: pushRulesEvent, previousEvent: previousEvent };
|
|
// contains_display_name changed, but is not room-specific
|
|
expect(getChangedOverrideRoomMutePushRules(action)).toEqual([]);
|
|
});
|
|
|
|
it("returns ruleIds for added room rules", () => {
|
|
const roomId1 = "!room1:server.org";
|
|
const rule = makePushRule(roomId1, {
|
|
actions: [PushRuleActionName.DontNotify],
|
|
conditions: [{ kind: ConditionKind.EventMatch, key: "room_id", pattern: roomId1 }],
|
|
});
|
|
const previousEvent = makePushRulesEvent();
|
|
const pushRulesEvent = makePushRulesEvent([rule]);
|
|
const action = { action: "MatrixActions.accountData", event: pushRulesEvent, previousEvent: previousEvent };
|
|
// contains_display_name changed, but is not room-specific
|
|
expect(getChangedOverrideRoomMutePushRules(action)).toEqual([rule.rule_id]);
|
|
});
|
|
|
|
it("returns ruleIds for removed room rules", () => {
|
|
const roomId1 = "!room1:server.org";
|
|
const rule = makePushRule(roomId1, {
|
|
actions: [PushRuleActionName.DontNotify],
|
|
conditions: [{ kind: ConditionKind.EventMatch, key: "room_id", pattern: roomId1 }],
|
|
});
|
|
const previousEvent = makePushRulesEvent([rule]);
|
|
const pushRulesEvent = makePushRulesEvent();
|
|
const action = { action: "MatrixActions.accountData", event: pushRulesEvent, previousEvent: previousEvent };
|
|
// contains_display_name changed, but is not room-specific
|
|
expect(getChangedOverrideRoomMutePushRules(action)).toEqual([rule.rule_id]);
|
|
});
|
|
});
|