Files
nostr-connect/extension/nostr-provider.test.js
2026-04-08 11:54:00 +07:00

102 lines
2.6 KiB
JavaScript

import { describe, it, expect, vi, beforeEach } from 'vitest'
describe('nostr-provider.js structure', () => {
beforeEach(() => {
vi.clearAllMocks()
})
describe('provider API structure', () => {
it('should have all required NIP-07 methods', () => {
const requiredMethods = [
'getPublicKey',
'signEvent',
'getRelays',
'nip04',
'nip44'
]
requiredMethods.forEach((method) => {
expect(typeof method).toBe('string')
})
})
it('should define EXTENSION constant', () => {
const EXTENSION = 'nostrconnect'
expect(EXTENSION).toBe('nostrconnect')
})
it('should have _requests object for tracking pending calls', () => {
const _requests = {}
expect(typeof _requests).toBe('object')
})
it('should have _pubkey for caching public key', () => {
const _pubkey = null
expect(_pubkey).toBeNull()
})
})
describe('nip04 namespace', () => {
it('should have encrypt and decrypt methods', () => {
const nip04 = {
encrypt: (peer, plaintext) => {},
decrypt: (peer, ciphertext) => {}
}
expect(typeof nip04.encrypt).toBe('function')
expect(typeof nip04.decrypt).toBe('function')
})
})
describe('nip44 namespace', () => {
it('should have encrypt and decrypt methods', () => {
const nip44 = {
encrypt: (peer, plaintext) => {},
decrypt: (peer, ciphertext) => {}
}
expect(typeof nip44.encrypt).toBe('function')
expect(typeof nip44.decrypt).toBe('function')
})
})
describe('message protocol', () => {
it('should send messages with correct structure', () => {
const message = {
id: '1234',
ext: 'nostrconnect',
type: 'getPublicKey',
params: {}
}
expect(message.ext).toBe('nostrconnect')
expect(message.id).toBeDefined()
expect(message.type).toBeDefined()
})
it('should handle _call with unique IDs', () => {
const generateId = () => Math.random().toString().slice(-4)
const id1 = generateId()
const id2 = generateId()
expect(typeof id1).toBe('string')
expect(typeof id2).toBe('string')
})
})
describe('getRelays implementation', () => {
it('should return empty object synchronously', () => {
const getRelays = () => ({})
const relays = getRelays()
expect(relays).toEqual({})
})
})
describe('peekPublicKey', () => {
it('should be available as a method', () => {
const peekPublicKey = () => {}
expect(typeof peekPublicKey).toBe('function')
})
})
})