diff --git a/src/lib/twitter-client-timelines.ts b/src/lib/twitter-client-timelines.ts index f81ed47..acf4d1c 100644 --- a/src/lib/twitter-client-timelines.ts +++ b/src/lib/twitter-client-timelines.ts @@ -541,7 +541,7 @@ export function withTimelines { } as unknown as CliContext; registerBookmarksCommand(program, ctx); - const command = program.commands.find((cmd) => cmd.name() === 'bookmarks'); - if (!command) { - throw new Error('bookmarks command not registered'); - } - - const action = (command as { _actionHandler: (opts: Record) => Promise })._actionHandler; const exitSpy = vi .spyOn(process, 'exit') .mockImplementation(((code?: number) => { @@ -31,7 +25,7 @@ describe('bookmarks command', () => { const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined); try { - await expect(action({ maxPages: '2' })).rejects.toThrow('exit 1'); + await expect(program.parseAsync(['node', 'bird', 'bookmarks', '--max-pages', '2'])).rejects.toThrow('exit 1'); expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('--max-pages requires --all')); } finally { exitSpy.mockRestore(); diff --git a/tests/twitter-client-coverage.api.test.ts b/tests/twitter-client-coverage.api.test.ts index 3e059c1..503b7f6 100644 --- a/tests/twitter-client-coverage.api.test.ts +++ b/tests/twitter-client-coverage.api.test.ts @@ -155,10 +155,14 @@ describe('TwitterClient API coverage', () => { it('returns an error for non-ok responses', async () => { const mockFetch = vi .fn() + .mockResolvedValueOnce(makeResponse({ ok: false, status: 500, text: async () => 'down' })) + .mockResolvedValueOnce(makeResponse({ ok: false, status: 500, text: async () => 'down' })) .mockResolvedValueOnce(makeResponse({ ok: false, status: 500, text: async () => 'down' })); global.fetch = mockFetch as unknown as typeof fetch; const client = new TwitterClient({ cookies: validCookies }); + const clientPrivate = client as unknown as TwitterClientApiPrivate; + clientPrivate.getBookmarksQueryIds = async () => ['test']; const result = await client.getBookmarks(1); expect(result.success).toBe(false); @@ -174,6 +178,8 @@ describe('TwitterClient API coverage', () => { global.fetch = mockFetch as unknown as typeof fetch; const client = new TwitterClient({ cookies: validCookies }); + const clientPrivate = client as unknown as TwitterClientApiPrivate; + clientPrivate.getBookmarksQueryIds = async () => ['test']; const result = await client.getBookmarks(1); expect(result.success).toBe(false); @@ -185,6 +191,8 @@ describe('TwitterClient API coverage', () => { global.fetch = mockFetch as unknown as typeof fetch; const client = new TwitterClient({ cookies: validCookies }); + const clientPrivate = client as unknown as TwitterClientApiPrivate; + clientPrivate.getBookmarksQueryIds = async () => ['test']; const result = await client.getBookmarks(1); expect(result.success).toBe(false); @@ -362,10 +370,14 @@ describe('TwitterClient API coverage', () => { it('returns an error for non-ok responses', async () => { const mockFetch = vi .fn() + .mockResolvedValueOnce(makeResponse({ ok: false, status: 500, text: async () => 'down' })) + .mockResolvedValueOnce(makeResponse({ ok: false, status: 500, text: async () => 'down' })) .mockResolvedValueOnce(makeResponse({ ok: false, status: 500, text: async () => 'down' })); global.fetch = mockFetch as unknown as typeof fetch; const client = new TwitterClient({ cookies: validCookies }); + const clientPrivate = client as unknown as TwitterClientApiPrivate; + clientPrivate.getBookmarkFolderQueryIds = async () => ['test']; const result = await client.getBookmarkFolderTimeline('123', 1); expect(result.success).toBe(false); @@ -381,6 +393,8 @@ describe('TwitterClient API coverage', () => { global.fetch = mockFetch as unknown as typeof fetch; const client = new TwitterClient({ cookies: validCookies }); + const clientPrivate = client as unknown as TwitterClientApiPrivate; + clientPrivate.getBookmarkFolderQueryIds = async () => ['test']; const result = await client.getBookmarkFolderTimeline('123', 1); expect(result.success).toBe(false); @@ -392,6 +406,8 @@ describe('TwitterClient API coverage', () => { global.fetch = mockFetch as unknown as typeof fetch; const client = new TwitterClient({ cookies: validCookies }); + const clientPrivate = client as unknown as TwitterClientApiPrivate; + clientPrivate.getBookmarkFolderQueryIds = async () => ['test']; const result = await client.getBookmarkFolderTimeline('123', 1); expect(result.success).toBe(false);