mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-05-29 09:21:16 +03:00
Now that we're pointing at `src/` for tests, we can stop trying to load source maps from random places. With this dependency used, source maps are off by a few lines.
306 lines
11 KiB
JavaScript
306 lines
11 KiB
JavaScript
import * as utils from "../test-utils";
|
|
import {PushProcessor} from "../../src/pushprocessor";
|
|
|
|
describe('NotificationService', function() {
|
|
const testUserId = "@ali:matrix.org";
|
|
const testDisplayName = "Alice M";
|
|
const testRoomId = "!fl1bb13:localhost";
|
|
|
|
let testEvent;
|
|
|
|
let pushProcessor;
|
|
|
|
// These would be better if individual rules were configured in the tests themselves.
|
|
const matrixClient = {
|
|
getRoom: function() {
|
|
return {
|
|
currentState: {
|
|
getMember: function() {
|
|
return {
|
|
name: testDisplayName,
|
|
};
|
|
},
|
|
getJoinedMemberCount: function() {
|
|
return 0;
|
|
},
|
|
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?";
|
|
const 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?";
|
|
const 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?";
|
|
const 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?";
|
|
const 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?";
|
|
const 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?";
|
|
const 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";
|
|
const 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";
|
|
const 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.";
|
|
const 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!";
|
|
let 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";
|
|
const 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";
|
|
let 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" };
|
|
const actions = pushProcessor.actionsForEvent(testEvent);
|
|
expect(actions.tweaks.highlight).toEqual(false);
|
|
});
|
|
});
|