thread tests

This commit is contained in:
grimhilt
2023-04-05 12:33:32 +02:00
parent 9fc31f8686
commit 65631f8e9a
3 changed files with 126 additions and 77 deletions

View File

@@ -19,6 +19,7 @@ const boxId = 1;
jest.mock("../../db/utils/mail", () => {
return {
findRoomByOwner: jest.fn(),
getAddresseId: jest.fn(),
getUserIdOfMailbox: jest.fn(),
};
@@ -37,7 +38,7 @@ jest.mock("../../db/saveMessage-db", () => {
incrementNotSeenRoom: jest.fn(),
};
});
import { getAddresseId, getUserIdOfMailbox } from "../../db/utils/mail";
import { getAddresseId, getUserIdOfMailbox, findRoomByOwner } from "../../db/utils/mail";
import {
createRoom,
registerMessageInRoom,
@@ -50,6 +51,7 @@ import {
getThreadInfo,
incrementNotSeenRoom,
} from "../../db/saveMessage-db";
import { AttrsWithEnvelope } from "../../interfaces/mail/attrs.interface";
// todo esbuild
// new message from us
// to multiple people -> room
@@ -67,9 +69,9 @@ import {
// if only me reply -> channel
beforeAll(async () => {
db.clear();
mocked(getAddresseId).mockImplementation(db.getAddresseId);
mocked(getUserIdOfMailbox).mockImplementation(db.getUserIdOfMailbox);
mocked(findRoomByOwner).mockImplementation(db.findRoomByOwner);
mocked(createRoom).mockImplementation(db.createRoom);
mocked(registerMessageInRoom).mockImplementation(db.registerMessageInRoom);
@@ -83,7 +85,30 @@ beforeAll(async () => {
mocked(incrementNotSeenRoom).mockImplementation(db.incrementNotSeenRoom);
});
const msgFromUs_1: { attrs: AttrsWithEnvelope; message_id: number } = {
attrs: generateAttrs({ from: [ownUser.user], to: [db.users[1].user], messageId: "1" }),
message_id: 1,
};
const replyTo1_2: { attrs: AttrsWithEnvelope; message_id: number } = {
attrs: generateAttrs({ from: [ownUser.user], to: [db.users[1].user], messageId: "2", inReplyTo: "1" }),
message_id: 2,
};
const replyTo2_3: { attrs: AttrsWithEnvelope; message_id: number } = {
attrs: generateAttrs({ from: [ownUser.user], to: [db.users[1].user, db.users[2].user], messageId: "3", inReplyTo: "2" }),
message_id: 3,
};
beforeEach(async () => {
db.clear();
db.messages.push(msgFromUs_1);
db.messages.push(replyTo1_2);
db.messages.push(replyTo2_3);
});
describe("saveMessage", () => {
describe("functions", () => {
it("isFromUs", async () => {
const attrs = generateAttrs({ from: [ownUser.user], to: [db.users[1].user] });
@@ -101,79 +126,93 @@ describe("saveMessage", () => {
expect(res2).toBe(false);
});
});
describe("implementation", () => {
describe("new first message from us", () => {
it("should create a DM when there is a new first message from us to one recipient", async () => {
const attrs = generateAttrs({ from: [ownUser.user], to: [db.users[1].user] });
describe("room creation", () => {
it("should create a DM when there is a new first message from us to one recipient", async () => {
const attrs = generateAttrs({ from: [ownUser.user], to: [db.users[1].user] });
const register = new registerMessageInApp(messageId, attrs, boxId);
const register = new registerMessageInApp(messageId, attrs, boxId);
const createOrRegisterOnExistence = jest
.spyOn(register, "createOrRegisterOnExistence")
.mockImplementation(
(owner: number, roomType: RoomType) => new Promise((resolve, reject) => resolve()),
);
const createOrRegisterOnExistence = jest
.spyOn(register, "createOrRegisterOnExistence")
.mockImplementation((owner: number, roomType: RoomType) => new Promise((resolve, reject) => resolve()));
await register.save();
await register.save();
expect(createOrRegisterOnExistence).toHaveBeenCalledWith(db.users[1].id, RoomType.DM);
});
it("should create a ROOM when there is a new first message from us to multiple recipients", async () => {
const attrs = generateAttrs({ from: [ownUser.user], to: [db.users[1].user, db.users[2].user] });
const register = new registerMessageInApp(messageId, attrs, boxId);
const initiateRoom = jest
.spyOn(register, "initiateRoom")
.mockImplementation((owner: number, roomType: RoomType) => Promise.resolve(1));
await register.save();
expect(initiateRoom).toHaveBeenCalledWith(ownUser.id, RoomType.ROOM);
});
// it("response to new first message to multiple recipients with same members should change room type to GROUP", () => {
// });
// it("response to new first message to multiple recipients with different members should change room type to CHANNEL", () => {
// });
expect(createOrRegisterOnExistence).toHaveBeenCalledWith(db.users[1].id, RoomType.DM);
});
describe("new first message from other", () => {
it("should create a ROOM when there is a new first message from other to me only", async () => {
const attrs = generateAttrs({ from: [db.users[1].user], to: [ownUser.user] });
it("should create a ROOM when there is a new first message from us to multiple recipients", async () => {
const attrs = generateAttrs({ from: [ownUser.user], to: [db.users[1].user, db.users[2].user] });
const register = new registerMessageInApp(messageId, attrs, boxId);
const register = new registerMessageInApp(messageId, attrs, boxId);
const createOrRegisterOnExistence = jest
.spyOn(register, "createOrRegisterOnExistence")
.mockImplementation((owner: number, roomType: RoomType) => {
return new Promise((resolve, reject) => resolve());
});
const initiateRoom = jest
.spyOn(register, "initiateRoom")
.mockImplementation((owner: number, roomType: RoomType) => Promise.resolve(1));
await register.save();
await register.save();
expect(createOrRegisterOnExistence).toHaveBeenCalledWith(db.users[1].id, RoomType.ROOM);
});
expect(initiateRoom).toHaveBeenCalledWith(ownUser.id, RoomType.ROOM);
});
describe("replies", () => {
it("", () => {});
// it("response to new first message to multiple recipients with same members should change room type to GROUP", () => {
// });
// it("response to new first message to multiple recipients with different members should change room type to CHANNEL", () => {
// });
it("should create a ROOM when there is a new first message from other to me only", async () => {
const attrs = generateAttrs({ from: [db.users[1].user], to: [ownUser.user] });
const register = new registerMessageInApp(messageId, attrs, boxId);
const createOrRegisterOnExistence = jest
.spyOn(register, "createOrRegisterOnExistence")
.mockImplementation((owner: number, roomType: RoomType) => {
return new Promise((resolve, reject) => resolve());
});
await register.save();
expect(createOrRegisterOnExistence).toHaveBeenCalledWith(db.users[1].id, RoomType.ROOM);
});
it("should create THREAD when reply to a message in a DM", async () => {
let register = new registerMessageInApp(msgFromUs_1.message_id, msgFromUs_1.attrs, boxId);
await register.save();
register = new registerMessageInApp(replyTo1_2.message_id, replyTo1_2.attrs, boxId);
await register.save();
const thread = db.rooms.find((room) => room.is_thread)
expect(thread.room_type).toBe(RoomType.THREAD);
expect(thread.root_id).toBe(0);
expect(thread.parent_id).toBe(0);
});
it("should create THREAD when reply in THREAD with different members", async() => {
let register = new registerMessageInApp(msgFromUs_1.message_id, msgFromUs_1.attrs, boxId);
await register.save();
register = new registerMessageInApp(replyTo1_2.message_id, replyTo1_2.attrs, boxId);
await register.save();
register = new registerMessageInApp(replyTo2_3.message_id, replyTo2_3.attrs, boxId);
await register.save();
const threads = db.rooms.filter((room) => room.is_thread);
expect(threads).toHaveLength(2);
const thread = threads[1];
expect(thread.room_type).toBe(RoomType.THREAD);
expect(thread.root_id).toBe(0);
expect(thread.parent_id).toBe(1);
expect(thread.members).toHaveLength(3);
});
});
describe("replies", () => {
it("", () => {});
});
describe("unseen behavior", () => {
it("should add unseen in room when a message creates a room", () => {
});
it("should add unseen in room when a message creates a room", () => {});
it("should add unseen in room when a message joins a room", () => {
});
it("should add unseen in room when a message joins a room", () => {});
it("should add unseen in root room and thread when new message creates a thread", () => {
});
it("should add unseen in root room and thread when new message creates a thread", () => {});
it("should add unseen in root room and thread when new message joins in thread", () => {
});
it("should add unseen in root room and thread when new message joins in thread", () => {});
});
});