mirror of
https://github.com/BlowaterNostr/blowater.git
synced 2024-10-18 15:43:20 +00:00
e86101ae7f
* remove nip-07 extension sign-in temporarily * bring kind-1 back! * separated relay views
61 lines
2.3 KiB
TypeScript
61 lines
2.3 KiB
TypeScript
import { assertEquals, fail } from "https://deno.land/std@0.202.0/testing/asserts.ts";
|
|
import { InMemoryAccountContext, NostrKind } from "../../libs/nostr.ts/nostr.ts";
|
|
import { DirectedMessageController } from "./dm.ts";
|
|
|
|
import { ChatMessage } from "../UI/message.ts";
|
|
import { prepareEncryptedNostrEvent } from "../../libs/nostr.ts/event.ts";
|
|
|
|
Deno.test("DirectedMessageController", async () => {
|
|
const ctx = InMemoryAccountContext.Generate();
|
|
const dmController = new DirectedMessageController(ctx);
|
|
{
|
|
// empty at first
|
|
const messages = dmController.getChatMessages(ctx.publicKey.hex);
|
|
assertEquals(messages, []);
|
|
|
|
// get an observable channel before adding events
|
|
const chan = dmController.getDirectMessageStream(ctx.publicKey.hex);
|
|
{
|
|
// add events
|
|
const events = [];
|
|
for (let i = 1; i <= 3; i++) {
|
|
const event = await prepareEncryptedNostrEvent(ctx, {
|
|
content: `test:${i}`,
|
|
encryptKey: ctx.publicKey,
|
|
kind: NostrKind.DIRECT_MESSAGE,
|
|
tags: [
|
|
["p", ctx.publicKey.hex],
|
|
],
|
|
});
|
|
if (event instanceof Error) fail(event.message);
|
|
|
|
events.push(event);
|
|
}
|
|
await dmController.addEvent(events[0]);
|
|
await dmController.addEvent(events[1]);
|
|
|
|
// get 2 events
|
|
const new_messages = dmController.getChatMessages(ctx.publicKey.hex);
|
|
assertEquals(new_messages.map((m) => m.content), ["test:1", "test:2"]);
|
|
|
|
// the channel is able to retrieve all events
|
|
const message = await chan.pop() as ChatMessage;
|
|
assertEquals(message.content, "test:1");
|
|
|
|
const message2 = await chan.pop() as ChatMessage;
|
|
assertEquals(message2.content, "test:2");
|
|
|
|
// get 3 events
|
|
{
|
|
await dmController.addEvent(events[2]);
|
|
|
|
const new_messages = dmController.getChatMessages(ctx.publicKey.hex);
|
|
assertEquals(new_messages.map((m) => m.content), ["test:1", "test:2", "test:3"]);
|
|
|
|
assertEquals((await chan.pop() as ChatMessage).content, "test:3");
|
|
}
|
|
}
|
|
await chan.close(); // not necessary
|
|
}
|
|
});
|