From 3728f7a4f5829924a5ad46b5d263401267c1bb6f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 3 Jan 2026 18:40:05 +0100 Subject: [PATCH] test: add mapTweetResult media coverage --- tests/map-tweet-media.test.ts | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tests/map-tweet-media.test.ts diff --git a/tests/map-tweet-media.test.ts b/tests/map-tweet-media.test.ts new file mode 100644 index 0000000..cc5d25a --- /dev/null +++ b/tests/map-tweet-media.test.ts @@ -0,0 +1,61 @@ +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(); + }); +});