62 lines
1.6 KiB
TypeScript
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();
|
|
});
|
|
});
|