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.
 
 
 
 

62 lines
2.5 KiB

import { describe, expect, it, afterEach } from 'vitest'
import { AGGR_NOSTR_LAND_WSS } from '@/lib/nostr-land-aggr'
import {
filterAggrNostrLandUnlessViewerEligible,
getAggrAwareSearchRelayUrls,
getViewerNostrLandAggrSearchRelayUrls,
prependAggrForEventLookupRelayUrls,
prependAggrNostrLandIfViewerEligible,
relayUrlsIncludeCanonicalNostrLandRelay,
syncViewerRelayStackNostrLandAggrEligible
} from '@/lib/nostr-land-relay-eligibility'
afterEach(() => {
syncViewerRelayStackNostrLandAggrEligible([])
})
describe('nostr.land aggr eligibility', () => {
it('enables aggr only when wss://nostr.land is on favorites or relay lists', () => {
expect(relayUrlsIncludeCanonicalNostrLandRelay(['wss://nostr.land/'])).toBe(true)
expect(relayUrlsIncludeCanonicalNostrLandRelay(['wss://aggr.nostr.land/'])).toBe(false)
expect(relayUrlsIncludeCanonicalNostrLandRelay(['wss://hist.nostr.land/'])).toBe(false)
syncViewerRelayStackNostrLandAggrEligible(['wss://nostr.land/'])
expect(getViewerNostrLandAggrSearchRelayUrls()[0]).toMatch(/^wss:\/\/aggr\.nostr\.land\/?$/)
expect(prependAggrNostrLandIfViewerEligible(['wss://inbox.example/'])[0]).toMatch(
/^wss:\/\/aggr\.nostr\.land\/?$/
)
syncViewerRelayStackNostrLandAggrEligible(['wss://relay.example/'])
expect(getViewerNostrLandAggrSearchRelayUrls()).toEqual([])
expect(prependAggrNostrLandIfViewerEligible(['wss://inbox.example/'])).toEqual([
'wss://inbox.example/'
])
})
it('prependAggrForEventLookupRelayUrls matches prependAggrNostrLandIfViewerEligible', () => {
syncViewerRelayStackNostrLandAggrEligible(['wss://nostr.land/'])
expect(prependAggrForEventLookupRelayUrls(['wss://inbox.example/'])[0]).toMatch(
/^wss:\/\/aggr\.nostr\.land\/?$/
)
})
it('getAggrAwareSearchRelayUrls prepends aggr when eligible', () => {
syncViewerRelayStackNostrLandAggrEligible(['wss://nostr.land/'])
const urls = getAggrAwareSearchRelayUrls()
expect(urls[0]).toMatch(/^wss:\/\/aggr\.nostr\.land\/?$/)
expect(urls.length).toBeGreaterThan(1)
syncViewerRelayStackNostrLandAggrEligible([])
expect(getAggrAwareSearchRelayUrls().some((u) => /aggr\.nostr\.land/i.test(u))).toBe(false)
})
it('strips aggr from fetch stacks when viewer does not list nostr.land', () => {
syncViewerRelayStackNostrLandAggrEligible([])
expect(
filterAggrNostrLandUnlessViewerEligible([
'wss://relay.example/',
AGGR_NOSTR_LAND_WSS
])
).toEqual(['wss://relay.example/'])
})
})