Add user profile resolution
CI / test (push) Successful in 10m0s

This commit is contained in:
2026-06-24 20:46:34 +09:00
parent 826de66d78
commit 2e293ad65b
11 changed files with 656 additions and 3 deletions
+40
View File
@@ -209,4 +209,44 @@ describe('users commands', () => {
expect(payload.nextCursor).toBeNull();
expect(followingSpy).toHaveBeenCalledTimes(2);
});
it('prints a single profile as JSON', async () => {
const program = new Command();
registerUserCommands(program, baseCtx);
const profileSpy = vi.spyOn(TwitterClient.prototype, 'getUserProfile').mockResolvedValue({
success: true,
profile: { id: '1', username: 'alpha', name: 'Alpha' },
});
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => undefined);
await program.parseAsync(['node', 'bird', 'user', '@alpha', '--json']);
expect(profileSpy).toHaveBeenCalledWith('@alpha');
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
id: '1',
username: 'alpha',
name: 'Alpha',
});
});
it('prints batch profiles with per-target errors as JSON', async () => {
const program = new Command();
registerUserCommands(program, baseCtx);
const profilesSpy = vi.spyOn(TwitterClient.prototype, 'getUserProfiles').mockResolvedValue({
success: true,
results: [
{ target: 'alpha', profile: { id: '1', username: 'alpha', name: 'Alpha' } },
{ target: 'missing', error: 'not found' },
],
});
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => undefined);
await program.parseAsync(['node', 'bird', 'profiles', 'alpha', 'missing', '--json']);
expect(profilesSpy).toHaveBeenCalledWith(['alpha', 'missing']);
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toEqual({
users: [{ id: '1', username: 'alpha', name: 'Alpha' }],
errors: [{ target: 'missing', error: 'not found' }],
});
});
});