mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-06-08 15:21:53 +03:00
174 lines
5.5 KiB
TypeScript
174 lines
5.5 KiB
TypeScript
import { RelationType } from "../../src";
|
|
import { FilterComponent } from "../../src/filter-component";
|
|
import { mkEvent } from "../test-utils/test-utils";
|
|
|
|
describe("Filter Component", function () {
|
|
describe("types", function () {
|
|
it("should filter out events with other types", function () {
|
|
const filter = new FilterComponent({ types: ["m.room.message"] });
|
|
const event = mkEvent({
|
|
type: "m.room.member",
|
|
content: {},
|
|
room: "roomId",
|
|
event: true,
|
|
});
|
|
|
|
const checkResult = filter.check(event);
|
|
|
|
expect(checkResult).toBe(false);
|
|
});
|
|
|
|
it("should validate events with the same type", function () {
|
|
const filter = new FilterComponent({ types: ["m.room.message"] });
|
|
const event = mkEvent({
|
|
type: "m.room.message",
|
|
content: {},
|
|
room: "roomId",
|
|
event: true,
|
|
});
|
|
|
|
const checkResult = filter.check(event);
|
|
|
|
expect(checkResult).toBe(true);
|
|
});
|
|
|
|
it("should filter out events by relation participation", function () {
|
|
const currentUserId = "@me:server.org";
|
|
const filter = new FilterComponent(
|
|
{
|
|
related_by_senders: [currentUserId],
|
|
},
|
|
currentUserId,
|
|
);
|
|
|
|
const threadRootNotParticipated = mkEvent({
|
|
type: "m.room.message",
|
|
content: {},
|
|
room: "roomId",
|
|
user: "@someone-else:server.org",
|
|
event: true,
|
|
unsigned: {
|
|
"m.relations": {
|
|
"m.thread": {
|
|
count: 2,
|
|
current_user_participated: false,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(filter.check(threadRootNotParticipated)).toBe(false);
|
|
});
|
|
|
|
it("should keep events by relation participation", function () {
|
|
const currentUserId = "@me:server.org";
|
|
const filter = new FilterComponent(
|
|
{
|
|
related_by_senders: [currentUserId],
|
|
},
|
|
currentUserId,
|
|
);
|
|
|
|
const threadRootParticipated = mkEvent({
|
|
type: "m.room.message",
|
|
content: {},
|
|
unsigned: {
|
|
"m.relations": {
|
|
"m.thread": {
|
|
count: 2,
|
|
current_user_participated: true,
|
|
},
|
|
},
|
|
},
|
|
user: "@someone-else:server.org",
|
|
room: "roomId",
|
|
event: true,
|
|
});
|
|
|
|
expect(filter.check(threadRootParticipated)).toBe(true);
|
|
});
|
|
|
|
it("should filter out events by relation type", function () {
|
|
const filter = new FilterComponent({
|
|
related_by_rel_types: ["m.thread"],
|
|
});
|
|
|
|
const referenceRelationEvent = mkEvent({
|
|
type: "m.room.message",
|
|
content: {},
|
|
room: "roomId",
|
|
event: true,
|
|
unsigned: {
|
|
"m.relations": {
|
|
[RelationType.Reference]: {},
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(filter.check(referenceRelationEvent)).toBe(false);
|
|
});
|
|
|
|
it("should keep events by relation type", function () {
|
|
const filter = new FilterComponent({
|
|
related_by_rel_types: ["m.thread"],
|
|
});
|
|
|
|
const threadRootEvent = mkEvent({
|
|
type: "m.room.message",
|
|
content: {},
|
|
unsigned: {
|
|
"m.relations": {
|
|
"m.thread": {
|
|
count: 2,
|
|
current_user_participated: true,
|
|
},
|
|
},
|
|
},
|
|
room: "roomId",
|
|
event: true,
|
|
});
|
|
|
|
const eventWithMultipleRelations = mkEvent({
|
|
type: "m.room.message",
|
|
content: {},
|
|
unsigned: {
|
|
"m.relations": {
|
|
"testtesttest": {},
|
|
"m.annotation": {
|
|
chunk: [
|
|
{
|
|
type: "m.reaction",
|
|
key: "🤫",
|
|
count: 1,
|
|
},
|
|
],
|
|
},
|
|
"m.thread": {
|
|
count: 2,
|
|
current_user_participated: true,
|
|
},
|
|
},
|
|
},
|
|
room: "roomId",
|
|
event: true,
|
|
});
|
|
|
|
const noMatchEvent = mkEvent({
|
|
type: "m.room.message",
|
|
content: {},
|
|
unsigned: {
|
|
"m.relations": {
|
|
testtesttest: {},
|
|
},
|
|
},
|
|
room: "roomId",
|
|
event: true,
|
|
});
|
|
|
|
expect(filter.check(threadRootEvent)).toBe(true);
|
|
expect(filter.check(eventWithMultipleRelations)).toBe(true);
|
|
expect(filter.check(noMatchEvent)).toBe(false);
|
|
});
|
|
});
|
|
});
|