Files
bird/tests/thread-filters.test.ts

45 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']);
});
});