Files
bird/tests/map-tweet-media.test.ts
T

62 lines
1.6 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import type { GraphqlTweetResult } from '../src/lib/twitter-client-types.js';
import { mapTweetResult } from '../src/lib/twitter-client-utils.js';
describe('mapTweetResult media', () => {
const makeUserResult = () => ({
core: {
user_results: {
result: {
rest_id: 'u1',
legacy: { screen_name: 'alice', name: 'Alice' },
},
},
},
});
it('includes extracted media on mapped tweet', () => {
const result: GraphqlTweetResult = {
rest_id: '1',
legacy: {
full_text: 'hello',
extended_entities: {
media: [
{
type: 'photo',
media_url_https: 'https://pbs.twimg.com/media/test.jpg',
sizes: {
large: { w: 800, h: 600, resize: 'fit' },
small: { w: 320, h: 240, resize: 'fit' },
},
},
],
},
},
...makeUserResult(),
};
const mapped = mapTweetResult(result, 0);
expect(mapped).toBeDefined();
const media = mapped?.media ?? [];
expect(media).toHaveLength(1);
expect(media[0]).toEqual({
type: 'photo',
url: 'https://pbs.twimg.com/media/test.jpg',
width: 800,
height: 600,
previewUrl: 'https://pbs.twimg.com/media/test.jpg:small',
});
});
it('omits media when none present', () => {
const result: GraphqlTweetResult = {
rest_id: '2',
legacy: { full_text: 'no media' },
...makeUserResult(),
};
const mapped = mapTweetResult(result, 0);
expect(mapped?.media).toBeUndefined();
});
});