122 lines
3.4 KiB
TypeScript
122 lines
3.4 KiB
TypeScript
import * as util from "@welshman/util"
|
|
import {afterEach, beforeEach, describe, expect, test, vi} from "vitest"
|
|
import * as relaySelectionModule from "../src/relaySelections"
|
|
|
|
// Mock dependencies
|
|
vi.mock("@welshman/util", async imports => {
|
|
return {
|
|
...(await imports()),
|
|
normalizeRelayUrl: vi.fn(url => url),
|
|
asDecryptedEvent: vi.fn(event => event),
|
|
readList: vi.fn(),
|
|
getListTags: vi.fn(() => []),
|
|
getRelayTags: vi.fn(() => []),
|
|
getRelayTagValues: vi.fn(() => []),
|
|
}
|
|
})
|
|
|
|
vi.mock("@welshman/store", async imports => {
|
|
return {
|
|
...(await imports()),
|
|
deriveEventsMapped: vi.fn(() => ({subscribe: () => ({unsubscribe: () => {}})})),
|
|
}
|
|
})
|
|
|
|
vi.mock("../src/subscribe.js", () => ({
|
|
load: vi.fn().mockResolvedValue([]),
|
|
}))
|
|
|
|
vi.mock("../src/collection.js", () => ({
|
|
collection: vi.fn(() => ({
|
|
indexStore: {},
|
|
deriveItem: vi.fn(),
|
|
loadItem: vi.fn(),
|
|
})),
|
|
}))
|
|
|
|
describe("relaySelections", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
})
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks()
|
|
})
|
|
|
|
describe("getRelayUrls", () => {
|
|
test("returns unique normalized relay URLs", () => {
|
|
// Setup
|
|
const mockList = {
|
|
tags: [
|
|
["r", "wss://relay1.com"],
|
|
["r", "wss://relay2.com"],
|
|
],
|
|
}
|
|
vi.mocked(util.getListTags).mockReturnValue(mockList.tags)
|
|
vi.mocked(util.getRelayTagValues).mockReturnValue([
|
|
"wss://relay1.com",
|
|
"wss://relay2.com",
|
|
"wss://relay1.com",
|
|
])
|
|
|
|
// Execute
|
|
const result = relaySelectionModule.getRelayUrls(mockList)
|
|
|
|
// Verify
|
|
expect(util.getListTags).toHaveBeenCalledWith(mockList)
|
|
expect(util.getRelayTagValues).toHaveBeenCalledWith(mockList.tags)
|
|
expect(util.normalizeRelayUrl).toHaveBeenCalledTimes(3)
|
|
expect(result).toEqual(["wss://relay1.com", "wss://relay2.com"])
|
|
})
|
|
|
|
test("returns empty array when list is undefined", () => {
|
|
vi.mocked(util.getListTags).mockReturnValue([])
|
|
vi.mocked(util.getRelayTagValues).mockReturnValue([])
|
|
|
|
const result = relaySelectionModule.getRelayUrls(undefined)
|
|
|
|
expect(result).toEqual([])
|
|
})
|
|
})
|
|
|
|
describe("getReadRelayUrls", () => {
|
|
test("returns read relay URLs", () => {
|
|
// Setup
|
|
const mockTags = [
|
|
["r", "wss://relay1.com", "read"],
|
|
["r", "wss://relay2.com", "write"],
|
|
["r", "wss://relay3.com"], // no marker is also read
|
|
["r", "wss://relay4.com", "read"],
|
|
]
|
|
vi.mocked(util.getListTags).mockReturnValue(mockTags)
|
|
vi.mocked(util.getRelayTags).mockReturnValue(mockTags)
|
|
|
|
// Execute
|
|
const result = relaySelectionModule.getReadRelayUrls({tags: mockTags})
|
|
|
|
// Verify
|
|
expect(result).toEqual(["wss://relay1.com", "wss://relay3.com", "wss://relay4.com"])
|
|
})
|
|
})
|
|
|
|
describe("getWriteRelayUrls", () => {
|
|
test("returns write relay URLs", () => {
|
|
// Setup
|
|
const mockTags = [
|
|
["r", "wss://relay1.com", "read"],
|
|
["r", "wss://relay2.com", "write"],
|
|
["r", "wss://relay3.com"], // no marker is also write
|
|
["r", "wss://relay4.com", "write"],
|
|
]
|
|
vi.mocked(util.getListTags).mockReturnValue(mockTags)
|
|
vi.mocked(util.getRelayTags).mockReturnValue(mockTags)
|
|
|
|
// Execute
|
|
const result = relaySelectionModule.getWriteRelayUrls({tags: mockTags})
|
|
|
|
// Verify
|
|
expect(result).toEqual(["wss://relay2.com", "wss://relay3.com", "wss://relay4.com"])
|
|
})
|
|
})
|
|
})
|