Adds thread expansion + filtering for bookmarks, with optional ancestor branches and metadata.\n\nCo-authored-by: Klaus <[email protected]>
50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { filterFullChain } from '../src/lib/thread-filters.js';
|
|
import type { TweetData } from '../src/lib/twitter-client-types.js';
|
|
|
|
const makeTweet = (
|
|
id: string,
|
|
createdAt: string,
|
|
inReplyToStatusId?: string,
|
|
conversationId = '1',
|
|
): TweetData => ({
|
|
id,
|
|
text: id,
|
|
author: { username: 'alice', name: 'Alice' },
|
|
createdAt,
|
|
inReplyToStatusId,
|
|
conversationId,
|
|
});
|
|
|
|
describe('filterFullChain', () => {
|
|
it('returns ancestors + descendants from the bookmark only', () => {
|
|
const root = makeTweet('1', '2020-01-01T00:00:00Z');
|
|
const replyA = makeTweet('2', '2020-01-02T00:00:00Z', '1');
|
|
const bookmark = makeTweet('3', '2020-01-03T00:00:00Z', '2');
|
|
const childA = makeTweet('4', '2020-01-04T00:00:00Z', '3');
|
|
const childB = makeTweet('7', '2020-01-05T00:00:00Z', '4');
|
|
const siblingOfAncestor = makeTweet('5', '2020-01-06T00:00:00Z', '2');
|
|
const siblingOfRoot = makeTweet('6', '2020-01-07T00:00:00Z', '1');
|
|
|
|
const tweets = [siblingOfAncestor, childB, root, siblingOfRoot, bookmark, childA, replyA];
|
|
|
|
const result = filterFullChain(tweets, bookmark);
|
|
expect(result.map((tweet) => tweet.id)).toEqual(['1', '2', '3', '4', '7']);
|
|
});
|
|
|
|
it('includes ancestor branches when requested', () => {
|
|
const root = makeTweet('1', '2020-01-01T00:00:00Z');
|
|
const replyA = makeTweet('2', '2020-01-02T00:00:00Z', '1');
|
|
const bookmark = makeTweet('3', '2020-01-03T00:00:00Z', '2');
|
|
const childA = makeTweet('4', '2020-01-04T00:00:00Z', '3');
|
|
const childB = makeTweet('7', '2020-01-05T00:00:00Z', '4');
|
|
const siblingOfAncestor = makeTweet('5', '2020-01-06T00:00:00Z', '2');
|
|
const siblingOfRoot = makeTweet('6', '2020-01-07T00:00:00Z', '1');
|
|
|
|
const tweets = [siblingOfRoot, childA, replyA, childB, bookmark, root, siblingOfAncestor];
|
|
|
|
const result = filterFullChain(tweets, bookmark, { includeAncestorBranches: true });
|
|
expect(result.map((tweet) => tweet.id)).toEqual(['1', '2', '3', '4', '7', '5', '6']);
|
|
});
|
|
});
|