import { JSDOM } from 'jsdom'; import { describe, expect, it, vi } from 'vitest'; import { ArgumentError, CommandExecutionError, EmptyResultError } from '@jackwener/opencli/errors'; import { uisdcNewsCommand, __test__ } from './news.js'; function runBrowserScript(html, script, url = 'https://www.uisdc.com/news') { const dom = new JSDOM(html, { url, runScripts: 'outside-only' }); return dom.window.eval(script); } function makePage(evaluateResult) { return { goto: vi.fn().mockResolvedValue(undefined), evaluate: vi.fn().mockResolvedValue(evaluateResult), }; } describe('uisdc/news', () => { it('registers stable URL in columns', () => { expect(uisdcNewsCommand.access).toBe('read'); expect(uisdcNewsCommand.columns).toEqual(['rank', 'title', 'summary', 'url']); }); it('validates limit before browser navigation', async () => { const page = makePage({ ok: true, rows: [] }); await expect(uisdcNewsCommand.func(page, { limit: 0 })).rejects.toBeInstanceOf(ArgumentError); await expect(uisdcNewsCommand.func(page, { limit: 51 })).rejects.toBeInstanceOf(ArgumentError); expect(page.goto).not.toHaveBeenCalled(); }); it('extracts rows from the UISDC news DOM', async () => { const html = `