重构为Monorepo:拆分xhs/xhh应用与core包并完成双服务部署改造
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import {
|
||||
decodeKeysetCursor,
|
||||
encodeKeysetCursor,
|
||||
paginateByKeyset,
|
||||
} from '../src/platforms/xiaoheihe/cursor.js';
|
||||
|
||||
describe('xhh keyset cursor', () => {
|
||||
it('encodes and decodes cursor payload', () => {
|
||||
const encoded = encodeKeysetCursor({ key: 'abc-123' });
|
||||
const decoded = decodeKeysetCursor(encoded);
|
||||
expect(decoded).toEqual({ key: 'abc-123' });
|
||||
});
|
||||
|
||||
it('throws on invalid cursor payload', () => {
|
||||
expect(() => decodeKeysetCursor('not-base64')).toThrow();
|
||||
});
|
||||
|
||||
it('paginates deterministically without duplicates', () => {
|
||||
const items = [
|
||||
{ id: 'a' },
|
||||
{ id: 'b' },
|
||||
{ id: 'c' },
|
||||
{ id: 'd' },
|
||||
{ id: 'e' },
|
||||
];
|
||||
|
||||
const page1 = paginateByKeyset(items, 2, undefined, (item) => item.id);
|
||||
expect(page1.items.map((i) => i.id)).toEqual(['a', 'b']);
|
||||
expect(page1.nextCursor).toBeTruthy();
|
||||
|
||||
const page2 = paginateByKeyset(items, 2, decodeKeysetCursor(page1.nextCursor), (item) => item.id);
|
||||
expect(page2.items.map((i) => i.id)).toEqual(['c', 'd']);
|
||||
expect(page2.nextCursor).toBeTruthy();
|
||||
|
||||
const page3 = paginateByKeyset(items, 2, decodeKeysetCursor(page2.nextCursor), (item) => item.id);
|
||||
expect(page3.items.map((i) => i.id)).toEqual(['e']);
|
||||
expect(page3.hasMore).toBe(false);
|
||||
|
||||
const combined = [...page1.items, ...page2.items, ...page3.items].map((i) => i.id);
|
||||
expect(combined).toEqual(['a', 'b', 'c', 'd', 'e']);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user