mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-06-01 07:41:44 +03:00
Make `MatrixEvent.event` contain the *encrypted* event, and keep the plaintext payload in a separate `_clearEvent` property. This achieves several aims: * means that we have a record of the actual object which was received over the wire, which can be shown by clients for 'view source'. * makes sent and received encrypted MatrixEvents more consistent (previously sent ones had `encryptedType` and `encryptedContent` properties, whereas received ones threw away the ciphertext). * Avoids having to make two MatrixEvents in the receive path, and copying fields from one to the other. *Hopefully* most clients have followed the advice given in the jsdoc of not relying on MatrixEvent.event to get at events. If they haven't, I guess they'll break in the face of encrypted events. (The pushprocessor didn't follow this advice, so needed some tweaks.)
305 lines
11 KiB
JavaScript
305 lines
11 KiB
JavaScript
"use strict";
|
|
var PushProcessor = require("../../lib/pushprocessor");
|
|
var MatrixEvent = MatrixEvent;
|
|
var utils = require("../test-utils");
|
|
|
|
describe('NotificationService', function() {
|
|
var testUserId = "@ali:matrix.org";
|
|
var testDisplayName = "Alice M";
|
|
var testRoomId = "!fl1bb13:localhost";
|
|
|
|
var testEvent;
|
|
|
|
var pushProcessor;
|
|
|
|
// These would be better if individual rules were configured in the tests themselves.
|
|
var matrixClient = {
|
|
getRoom: function() {
|
|
return {
|
|
currentState: {
|
|
getMember: function() {
|
|
return {
|
|
name: testDisplayName
|
|
};
|
|
},
|
|
members: {}
|
|
}
|
|
};
|
|
},
|
|
credentials: {
|
|
userId: testUserId
|
|
},
|
|
pushRules: {
|
|
"device": {},
|
|
"global": {
|
|
"content": [
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "sound",
|
|
"value": "default"
|
|
},
|
|
{
|
|
"set_tweak": "highlight"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"pattern": "ali",
|
|
"rule_id": ".m.rule.contains_user_name"
|
|
},
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "sound",
|
|
"value": "default"
|
|
},
|
|
{
|
|
"set_tweak": "highlight"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"pattern": "coffee",
|
|
"rule_id": "coffee"
|
|
},
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "sound",
|
|
"value": "default"
|
|
},
|
|
{
|
|
"set_tweak": "highlight"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"pattern": "foo*bar",
|
|
"rule_id": "foobar"
|
|
},
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "sound",
|
|
"value": "default"
|
|
},
|
|
{
|
|
"set_tweak": "highlight"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"pattern": "p[io]ng",
|
|
"rule_id": "pingpong"
|
|
},
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "sound",
|
|
"value": "default"
|
|
},
|
|
{
|
|
"set_tweak": "highlight"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"pattern": "I ate [0-9] pies",
|
|
"rule_id": "pies"
|
|
},
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "sound",
|
|
"value": "default"
|
|
},
|
|
{
|
|
"set_tweak": "highlight"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"pattern": "b[!ai]ke",
|
|
"rule_id": "bakebike"
|
|
}
|
|
],
|
|
"override": [
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "sound",
|
|
"value": "default"
|
|
},
|
|
{
|
|
"set_tweak": "highlight"
|
|
}
|
|
],
|
|
"conditions": [
|
|
{
|
|
"kind": "contains_display_name"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"rule_id": ".m.rule.contains_display_name"
|
|
},
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "sound",
|
|
"value": "default"
|
|
}
|
|
],
|
|
"conditions": [
|
|
{
|
|
"is": "2",
|
|
"kind": "room_member_count"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"rule_id": ".m.rule.room_one_to_one"
|
|
}
|
|
],
|
|
"room": [],
|
|
"sender": [],
|
|
"underride": [
|
|
{
|
|
"actions": [
|
|
"dont-notify"
|
|
],
|
|
"conditions": [
|
|
{
|
|
"key": "content.msgtype",
|
|
"kind": "event_match",
|
|
"pattern": "m.notice"
|
|
}
|
|
],
|
|
"enabled": true,
|
|
"rule_id": ".m.rule.suppress_notices"
|
|
},
|
|
{
|
|
"actions": [
|
|
"notify",
|
|
{
|
|
"set_tweak": "highlight",
|
|
"value": false
|
|
}
|
|
],
|
|
"conditions": [],
|
|
"enabled": true,
|
|
"rule_id": ".m.rule.fallback"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
};
|
|
|
|
beforeEach(function() {
|
|
testEvent = utils.mkEvent({
|
|
type: "m.room.message",
|
|
room: testRoomId,
|
|
user: "@alfred:localhost",
|
|
event: true,
|
|
content: {
|
|
body: "",
|
|
msgtype: "m.text"
|
|
}
|
|
});
|
|
pushProcessor = new PushProcessor(matrixClient);
|
|
});
|
|
|
|
// User IDs
|
|
|
|
it('should bing on a user ID.', function() {
|
|
testEvent.event.content.body = "Hello @ali:matrix.org, how are you?";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on a partial user ID with an @.', function() {
|
|
testEvent.event.content.body = "Hello @ali, how are you?";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on a partial user ID without @.', function() {
|
|
testEvent.event.content.body = "Hello ali, how are you?";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on a case-insensitive user ID.', function() {
|
|
testEvent.event.content.body = "Hello @AlI:matrix.org, how are you?";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
// Display names
|
|
|
|
it('should bing on a display name.', function() {
|
|
testEvent.event.content.body = "Hello Alice M, how are you?";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on a case-insensitive display name.', function() {
|
|
testEvent.event.content.body = "Hello ALICE M, how are you?";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
// Bing words
|
|
|
|
it('should bing on a bing word.', function() {
|
|
testEvent.event.content.body = "I really like coffee";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on case-insensitive bing words.', function() {
|
|
testEvent.event.content.body = "Coffee is great";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on wildcard (.*) bing words.', function() {
|
|
testEvent.event.content.body = "It was foomahbar I think.";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on character group ([abc]) bing words.', function() {
|
|
testEvent.event.content.body = "Ping!";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
testEvent.event.content.body = "Pong!";
|
|
actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on character range ([a-z]) bing words.', function() {
|
|
testEvent.event.content.body = "I ate 6 pies";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
});
|
|
|
|
it('should bing on character negation ([!a]) bing words.', function() {
|
|
testEvent.event.content.body = "boke";
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(true);
|
|
testEvent.event.content.body = "bake";
|
|
actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(false);
|
|
});
|
|
|
|
// invalid
|
|
|
|
it('should gracefully handle bad input.', function() {
|
|
testEvent.event.content.body = { "foo": "bar" };
|
|
var actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(false);
|
|
});
|
|
});
|