9b395f5cc3
E2E Headed Chrome / e2e-headed (macos-15) (push) Has been cancelled
E2E Headed Chrome / e2e-headed (ubuntu-latest) (push) Has been cancelled
E2E Headed Chrome / e2e-headed (windows-latest) (push) Has been cancelled
CI / build (macos-latest) (push) Has been cancelled
CI / build (ubuntu-latest) (push) Has been cancelled
CI / build (windows-latest) (push) Has been cancelled
CI / unit-test (push) Has been cancelled
CI / bun-test (push) Has been cancelled
CI / adapter-test (push) Has been cancelled
CI / smoke-test (macos-latest) (push) Has been cancelled
CI / smoke-test (ubuntu-latest) (push) Has been cancelled
Security Audit / audit (push) Has been cancelled
Build Chrome Extension / build (push) Has been cancelled
Trigger Website Rebuild (Docs Updated) / dispatch (push) Has been cancelled
83 lines
3.2 KiB
JavaScript
83 lines
3.2 KiB
JavaScript
import { describe, expect, it, vi } from 'vitest';
|
|
import { CommandExecutionError } from '@jackwener/opencli/errors';
|
|
import { getRegistry } from '@jackwener/opencli/registry';
|
|
import { createPageMock } from '../test-utils.js';
|
|
import './liked.js';
|
|
|
|
describe('xiaohongshu liked', () => {
|
|
const command = getRegistry().get('xiaohongshu/liked');
|
|
|
|
it('registers with navigateBefore=false', () => {
|
|
expect(command).toBeDefined();
|
|
expect(command.navigateBefore).toBe(false);
|
|
expect(command.name).toBe('liked');
|
|
});
|
|
|
|
it('captures liked notes from the like API', async () => {
|
|
const intercepted = [
|
|
{
|
|
data: {
|
|
notes: [
|
|
{
|
|
note_id: '662908190000000001007367',
|
|
xsec_token: 'tok-2',
|
|
note_card: {
|
|
display_title: '赞过笔记',
|
|
type: 'video',
|
|
user: { user_id: 'user-2', nickname: 'Bob' },
|
|
interact_info: { liked_count: '99' },
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
];
|
|
const evaluate = vi.fn()
|
|
.mockResolvedValueOnce(false)
|
|
.mockResolvedValueOnce('self-user')
|
|
.mockResolvedValueOnce(false)
|
|
.mockResolvedValueOnce({
|
|
hostname: 'www.xiaohongshu.com',
|
|
pathname: '/user/profile/self-user',
|
|
href: 'https://www.xiaohongshu.com/user/profile/self-user?tab=liked&subTab=note',
|
|
});
|
|
const getInterceptedRequests = vi.fn()
|
|
.mockResolvedValueOnce([])
|
|
.mockResolvedValueOnce(intercepted);
|
|
const page = createPageMock([], {
|
|
evaluate,
|
|
getInterceptedRequests,
|
|
});
|
|
|
|
const result = await command.func(page, { limit: 1 });
|
|
expect(result).toEqual([
|
|
{
|
|
rank: 1,
|
|
id: '662908190000000001007367',
|
|
title: '赞过笔记',
|
|
author: 'Bob',
|
|
likes: '99',
|
|
type: 'video',
|
|
url: 'https://www.xiaohongshu.com/user/profile/user-2/662908190000000001007367?xsec_token=tok-2&xsec_source=pc_user',
|
|
},
|
|
]);
|
|
expect(page.installInterceptor).toHaveBeenCalledWith('note/like/page');
|
|
expect(page.goto.mock.calls.at(-1)[0]).toBe('https://www.xiaohongshu.com/user/profile/self-user?tab=liked&subTab=note');
|
|
});
|
|
|
|
it('fails closed when navigation lands on another profile', async () => {
|
|
const page = createPageMock([], {
|
|
evaluate: vi.fn()
|
|
.mockResolvedValueOnce(false)
|
|
.mockResolvedValueOnce({
|
|
hostname: 'www.xiaohongshu.com',
|
|
pathname: '/user/profile/other-user',
|
|
href: 'https://www.xiaohongshu.com/user/profile/other-user?tab=liked&subTab=note',
|
|
}),
|
|
});
|
|
|
|
await expect(command.func(page, { id: 'self-user', limit: 5 })).rejects.toBeInstanceOf(CommandExecutionError);
|
|
expect(page.getInterceptedRequests).not.toHaveBeenCalled();
|
|
});
|
|
});
|