mirror of
https://github.com/irislib/iris-messenger.git
synced 2024-10-18 06:03:22 +00:00
99 lines
2.9 KiB
TypeScript
99 lines
2.9 KiB
TypeScript
import { Event } from 'nostr-tools';
|
|
import { beforeEach, describe, expect, test } from 'vitest';
|
|
|
|
import { EventDB } from '@/nostr/EventDB.ts';
|
|
|
|
import events from './events.json';
|
|
|
|
describe('EventDB', () => {
|
|
let db: EventDB;
|
|
let testEvent: Event;
|
|
|
|
beforeEach(() => {
|
|
db = new EventDB();
|
|
|
|
testEvent = events[0];
|
|
db.insert(testEvent);
|
|
});
|
|
|
|
test('should insert event', () => {
|
|
const success = db.insert(events[1]);
|
|
expect(success).toBe(true);
|
|
expect(db.get(events[1].id)).toEqual(events[1]);
|
|
});
|
|
|
|
test('should get event by id', () => {
|
|
const event = db.get(testEvent.id);
|
|
expect(event).toEqual(testEvent);
|
|
});
|
|
|
|
test('should remove event by id', () => {
|
|
db.remove(testEvent.id);
|
|
expect(db.get(testEvent.id)).toBeUndefined();
|
|
});
|
|
|
|
test('should find events with a specific filter', () => {
|
|
const filter = { authors: [testEvent.pubkey] };
|
|
const foundEvents = db.findArray(filter);
|
|
expect(foundEvents.length).toBeGreaterThanOrEqual(1);
|
|
expect(foundEvents[0]).toEqual(testEvent);
|
|
});
|
|
|
|
test('should find and remove events based on filter', () => {
|
|
const filter = { authors: [testEvent.pubkey] };
|
|
db.findAndRemove(filter);
|
|
expect(db.findArray(filter).length).toBe(0);
|
|
});
|
|
|
|
test('should return undefined for non-existing events', () => {
|
|
const event = db.get('non-existing-id');
|
|
expect(event).toBeUndefined();
|
|
});
|
|
|
|
test('should handle invalid event insertion', () => {
|
|
const invalidEvent = { ...testEvent, id: undefined };
|
|
expect(() => db.insert(invalidEvent as any)).toThrow('Invalid event');
|
|
});
|
|
|
|
test('should findOne event based on filter', () => {
|
|
const filter = { authors: [testEvent.pubkey] };
|
|
const foundEvent = db.findOne(filter);
|
|
expect(foundEvent).toEqual(testEvent);
|
|
});
|
|
});
|
|
|
|
describe('EventDB find tests', () => {
|
|
let eventDB: EventDB;
|
|
|
|
beforeEach(() => {
|
|
eventDB = new EventDB();
|
|
events.forEach((event) => {
|
|
eventDB.insert(event);
|
|
});
|
|
});
|
|
|
|
test('should find events by kind filter', () => {
|
|
const foundEvents = eventDB.findArray({ kinds: [4], limit: 10 });
|
|
expect(foundEvents.length).toEqual(10);
|
|
expect(foundEvents.every((event) => event.kind === 4)).toBe(true);
|
|
});
|
|
|
|
test('should find events by author filter', () => {
|
|
const author = '4523be58d395b1b196a9b8c82b038b6895cb02b683d0c253a955068dba1facd0';
|
|
const foundEvents = eventDB.findArray({ authors: [author], limit: 10 });
|
|
expect(foundEvents.length).toEqual(10);
|
|
expect(foundEvents.every((event) => event.pubkey === author)).toBe(true);
|
|
});
|
|
|
|
test('should find events by author and kind filter', () => {
|
|
const author = '4523be58d395b1b196a9b8c82b038b6895cb02b683d0c253a955068dba1facd0';
|
|
const foundEvents = eventDB.findArray({
|
|
authors: [author],
|
|
kinds: [4],
|
|
limit: 10,
|
|
});
|
|
expect(foundEvents.length).toEqual(10);
|
|
expect(foundEvents.every((event) => event.pubkey === author && event.kind === 4)).toBe(true);
|
|
});
|
|
});
|