97 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
| /*
 | |
| Copyright 2023 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 { 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]);
 | |
|     });
 | |
| });
 |