Fix: sync intentional mentions push rules with legacy rules (#11667)
* fix monitorSyncedPushRules when primary rule is disabled * sync intentional mentions rules * remove debug log
This commit is contained in:
parent
4d0d024e86
commit
0d367a7c7e
3 changed files with 67 additions and 3 deletions
|
@ -111,6 +111,7 @@ export const VectorPushRulesDefinitions: Record<string, VectorPushRuleDefinition
|
||||||
[VectorState.Loud]: StandardActions.ACTION_HIGHLIGHT_DEFAULT_SOUND,
|
[VectorState.Loud]: StandardActions.ACTION_HIGHLIGHT_DEFAULT_SOUND,
|
||||||
[VectorState.Off]: StandardActions.ACTION_DISABLED,
|
[VectorState.Off]: StandardActions.ACTION_DISABLED,
|
||||||
},
|
},
|
||||||
|
syncedRuleIds: [RuleId.IsUserMention],
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// Messages containing @room
|
// Messages containing @room
|
||||||
|
@ -122,6 +123,7 @@ export const VectorPushRulesDefinitions: Record<string, VectorPushRuleDefinition
|
||||||
[VectorState.Loud]: StandardActions.ACTION_HIGHLIGHT,
|
[VectorState.Loud]: StandardActions.ACTION_HIGHLIGHT,
|
||||||
[VectorState.Off]: StandardActions.ACTION_DISABLED,
|
[VectorState.Off]: StandardActions.ACTION_DISABLED,
|
||||||
},
|
},
|
||||||
|
syncedRuleIds: [RuleId.IsRoomMention],
|
||||||
}),
|
}),
|
||||||
|
|
||||||
// Messages just sent to the user in a 1:1 room
|
// Messages just sent to the user in a 1:1 room
|
||||||
|
|
|
@ -63,7 +63,9 @@ const monitorSyncedRule = async (
|
||||||
const primaryRuleVectorState = definition.ruleToVectorState(primaryRule);
|
const primaryRuleVectorState = definition.ruleToVectorState(primaryRule);
|
||||||
|
|
||||||
const outOfSyncRules = syncedRules.filter(
|
const outOfSyncRules = syncedRules.filter(
|
||||||
(syncedRule) => definition.ruleToVectorState(syncedRule) !== primaryRuleVectorState,
|
(syncedRule) =>
|
||||||
|
syncedRule.enabled !== primaryRule.enabled ||
|
||||||
|
definition.ruleToVectorState(syncedRule) !== primaryRuleVectorState,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (outOfSyncRules.length) {
|
if (outOfSyncRules.length) {
|
||||||
|
@ -71,7 +73,7 @@ const monitorSyncedRule = async (
|
||||||
matrixClient,
|
matrixClient,
|
||||||
// eslint-disable-next-line camelcase, @typescript-eslint/naming-convention
|
// eslint-disable-next-line camelcase, @typescript-eslint/naming-convention
|
||||||
outOfSyncRules.map(({ rule_id }) => rule_id),
|
outOfSyncRules.map(({ rule_id }) => rule_id),
|
||||||
primaryRule.actions,
|
primaryRule.enabled ? primaryRule.actions : undefined,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,7 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { render, RenderResult } from "@testing-library/react";
|
import { render, RenderResult } from "@testing-library/react";
|
||||||
import { ConditionKind, EventType, IPushRule, MatrixEvent, ClientEvent } from "matrix-js-sdk/src/matrix";
|
import { ConditionKind, EventType, IPushRule, MatrixEvent, ClientEvent, PushRuleKind } from "matrix-js-sdk/src/matrix";
|
||||||
import { MediaHandler } from "matrix-js-sdk/src/webrtc/mediaHandler";
|
import { MediaHandler } from "matrix-js-sdk/src/webrtc/mediaHandler";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
|
||||||
|
@ -81,6 +81,11 @@ describe("<LoggedInView />", () => {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
} as IPushRule;
|
} as IPushRule;
|
||||||
|
|
||||||
|
const oneToOneRuleDisabled = {
|
||||||
|
...oneToOneRule,
|
||||||
|
enabled: false,
|
||||||
|
};
|
||||||
|
|
||||||
const groupRule = {
|
const groupRule = {
|
||||||
conditions: [{ kind: ConditionKind.EventMatch, key: "type", pattern: "m.room.message" }],
|
conditions: [{ kind: ConditionKind.EventMatch, key: "type", pattern: "m.room.message" }],
|
||||||
actions: StandardActions.ACTION_NOTIFY,
|
actions: StandardActions.ACTION_NOTIFY,
|
||||||
|
@ -221,6 +226,36 @@ describe("<LoggedInView />", () => {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("updates all mismatched rules from synced rules when primary rule is disabled", async () => {
|
||||||
|
setPushRules([
|
||||||
|
// poll 1-1 rules are synced with oneToOneRule
|
||||||
|
oneToOneRuleDisabled, // off
|
||||||
|
pollStartOneToOne, // on
|
||||||
|
pollEndOneToOne, // loud
|
||||||
|
// poll group rules are synced with groupRule
|
||||||
|
groupRule, // on
|
||||||
|
pollStartGroup, // loud
|
||||||
|
]);
|
||||||
|
|
||||||
|
getComponent();
|
||||||
|
|
||||||
|
await flushPromises();
|
||||||
|
|
||||||
|
// set to match primary rule
|
||||||
|
expect(mockClient.setPushRuleEnabled).toHaveBeenCalledWith(
|
||||||
|
"global",
|
||||||
|
PushRuleKind.Underride,
|
||||||
|
pollStartOneToOne.rule_id,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
expect(mockClient.setPushRuleEnabled).toHaveBeenCalledWith(
|
||||||
|
"global",
|
||||||
|
PushRuleKind.Underride,
|
||||||
|
pollEndOneToOne.rule_id,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("catches and logs errors while updating a rule", async () => {
|
it("catches and logs errors while updating a rule", async () => {
|
||||||
mockClient.setPushRuleActions.mockRejectedValueOnce("oups").mockResolvedValueOnce({});
|
mockClient.setPushRuleActions.mockRejectedValueOnce("oups").mockResolvedValueOnce({});
|
||||||
|
|
||||||
|
@ -302,6 +337,31 @@ describe("<LoggedInView />", () => {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("updates all mismatched rules from synced rules on a change to push rules account data when primary rule is disabled", async () => {
|
||||||
|
// setup a push rule state with mismatched rules
|
||||||
|
setPushRules([
|
||||||
|
// poll 1-1 rules are synced with oneToOneRule
|
||||||
|
oneToOneRuleDisabled, // off
|
||||||
|
pollEndOneToOne, // loud
|
||||||
|
]);
|
||||||
|
|
||||||
|
getComponent();
|
||||||
|
|
||||||
|
await flushPromises();
|
||||||
|
|
||||||
|
mockClient.setPushRuleEnabled.mockClear();
|
||||||
|
|
||||||
|
mockClient.emit(ClientEvent.AccountData, pushRulesEvent);
|
||||||
|
|
||||||
|
// set to match primary rule
|
||||||
|
expect(mockClient.setPushRuleEnabled).toHaveBeenCalledWith(
|
||||||
|
"global",
|
||||||
|
"underride",
|
||||||
|
pollEndOneToOne.rule_id,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("stops listening to account data events on unmount", () => {
|
it("stops listening to account data events on unmount", () => {
|
||||||
// setup a push rule state with mismatched rules
|
// setup a push rule state with mismatched rules
|
||||||
setPushRules([
|
setPushRules([
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue