iris-messenger/tests/EventDB.test.ts
2023-08-18 22:36:36 +03:00

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);
});
});