clone of repo on github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

129 lines
3.7 KiB

import { describe, it, expect, vi, beforeEach } from 'vitest';
import { deleteEvent, canDeleteEvent } from '$lib/services/deletion';
import NDK, { NDKEvent, NDKRelaySet } from '@nostr-dev-kit/ndk';
describe('Deletion Service', () => {
let mockNdk: NDK;
let mockEvent: NDKEvent;
beforeEach(() => {
// Create mock NDK instance
mockNdk = {
activeUser: {
pubkey: 'test-pubkey-123',
},
pool: {
relays: new Map([
['wss://relay1.example.com', { url: 'wss://relay1.example.com' }],
['wss://relay2.example.com', { url: 'wss://relay2.example.com' }],
]),
},
} as unknown as NDK;
// Create mock event
mockEvent = {
id: 'event-id-123',
kind: 30041,
pubkey: 'test-pubkey-123',
tagAddress: () => '30041:test-pubkey-123:test-identifier',
} as unknown as NDKEvent;
});
describe('canDeleteEvent', () => {
it('should return true when user is the event author', () => {
const result = canDeleteEvent(mockEvent, mockNdk);
expect(result).toBe(true);
});
it('should return false when user is not the event author', () => {
const differentUserEvent = {
...mockEvent,
pubkey: 'different-pubkey-456',
} as unknown as NDKEvent;
const result = canDeleteEvent(differentUserEvent, mockNdk);
expect(result).toBe(false);
});
it('should return false when event is null', () => {
const result = canDeleteEvent(null, mockNdk);
expect(result).toBe(false);
});
it('should return false when ndk has no active user', () => {
const ndkWithoutUser = {
...mockNdk,
activeUser: undefined,
} as unknown as NDK;
const result = canDeleteEvent(mockEvent, ndkWithoutUser);
expect(result).toBe(false);
});
});
describe('deleteEvent', () => {
it('should return error when no eventId or eventAddress provided', async () => {
const result = await deleteEvent({}, mockNdk);
expect(result.success).toBe(false);
expect(result.error).toBe('Either eventId or eventAddress must be provided');
});
it('should return error when user is not logged in', async () => {
const ndkWithoutUser = {
...mockNdk,
activeUser: undefined,
} as unknown as NDK;
const result = await deleteEvent(
{ eventId: 'test-id' },
ndkWithoutUser
);
expect(result.success).toBe(false);
expect(result.error).toBe('Please log in first');
});
it('should create deletion event with correct tags', async () => {
const mockSign = vi.fn();
const mockPublish = vi.fn().mockResolvedValue(new Set(['wss://relay1.example.com']));
// Mock NDKEvent constructor
const MockNDKEvent = vi.fn().mockImplementation(function(this: any) {
this.kind = 0;
this.created_at = 0;
this.tags = [];
this.content = '';
this.pubkey = '';
this.sign = mockSign;
this.publish = mockPublish;
return this;
});
// Mock NDKRelaySet
const mockRelaySet = {} as NDKRelaySet;
vi.spyOn(NDKRelaySet, 'fromRelayUrls').mockReturnValue(mockRelaySet);
// Replace global NDKEvent temporarily
const originalNDKEvent = global.NDKEvent;
(global as any).NDKEvent = MockNDKEvent;
const result = await deleteEvent(
{
eventId: 'event-123',
eventAddress: '30041:pubkey:identifier',
eventKind: 30041,
reason: 'Test deletion',
},
mockNdk
);
// Restore original
(global as any).NDKEvent = originalNDKEvent;
expect(MockNDKEvent).toHaveBeenCalled();
expect(mockSign).toHaveBeenCalled();
expect(mockPublish).toHaveBeenCalled();
});
});
});