@bitxenia/astrachat
Version:
Decentralized p2p real-time chat on IPFS
96 lines (76 loc) • 2.44 kB
text/typescript
import { Chat } from "../src/chat";
import { ChatMessage } from "../src/message";
import { logger } from "../src/utils/logger";
import { MockAstraDb } from "./mock/mockAstraDb";
test("Chat.create loads existing messages", async () => {
logger.setLevel("error");
const mockDb = new MockAstraDb();
const message: ChatMessage = {
id: "1",
parentId: "",
senderAlias: "Bob",
sender: "123",
message: "Hello",
timestamp: Date.now(),
};
await mockDb.add("room1", JSON.stringify(message));
const chat = await Chat.create("chatspace", "room1", mockDb as any);
const messages = chat.getMessages();
expect(messages).toHaveLength(1);
expect(messages[0].message).toBe("Hello");
});
test("Chat.sendMessage emits and stores a message", async () => {
logger.setLevel("error");
const mockDb = new MockAstraDb();
const receivedMessages: ChatMessage[] = [];
const chat = await Chat.create("chatspace", "room1", mockDb as any, (msg) =>
receivedMessages.push(msg),
);
const message: ChatMessage = {
id: "1",
parentId: "",
sender: "123",
senderAlias: "Bob",
message: "Hi again!",
timestamp: Date.now(),
};
await chat.sendMessage(message);
expect(receivedMessages).toHaveLength(1);
expect(receivedMessages[0].message).toBe("Hi again!");
});
test("Chat.getMessages returns existing messages", async () => {
logger.setLevel("error");
const mockDb = new MockAstraDb();
const message: ChatMessage = {
id: "1",
parentId: "",
sender: "123",
senderAlias: "Alice",
message: "Hey there!",
timestamp: Date.now(),
};
await mockDb.add("room1", JSON.stringify(message));
const chat = await Chat.create("chatspace", "room1", mockDb as any);
const messages = chat.getMessages();
expect(messages).toHaveLength(1);
expect(messages[0]).toEqual(message);
});
test("Chat listens to new messages and calls callback", async () => {
logger.setLevel("error");
const mockDb = new MockAstraDb();
const received: ChatMessage[] = [];
const chat = await Chat.create("chatspace", "room1", mockDb as any, (msg) =>
received.push(msg),
);
const newMessage: ChatMessage = {
id: "3",
parentId: "",
sender: "123",
senderAlias: "Bob",
message: "What’s up?",
timestamp: Date.now(),
};
await chat.sendMessage(newMessage);
expect(received).toHaveLength(1);
expect(received[0]).toEqual(newMessage);
});