Skip to content

Commit d5c4c04

Browse files
committed
test: add unit tests for getMedia function in useEmbeddedView hook
1 parent 44ffd76 commit d5c4c04

1 file changed

Lines changed: 136 additions & 0 deletions

File tree

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
import { getMedia } from './getMedia';
2+
import { IterableEmbeddedViewType } from '../../enums';
3+
import type { IterableEmbeddedMessage } from '../../types/IterableEmbeddedMessage';
4+
5+
const minimalMessage: IterableEmbeddedMessage = {
6+
metadata: { messageId: 'msg-1', placementId: 1 },
7+
};
8+
9+
describe('getMedia', () => {
10+
describe('viewType Notification', () => {
11+
it('returns no media regardless of message content', () => {
12+
const result = getMedia(IterableEmbeddedViewType.Notification, minimalMessage);
13+
14+
expect(result).toEqual({ url: null, caption: null, shouldShow: false });
15+
});
16+
17+
it('returns no media even when message has mediaUrl and caption', () => {
18+
const message: IterableEmbeddedMessage = {
19+
...minimalMessage,
20+
elements: {
21+
mediaUrl: 'https://example.com/image.png',
22+
mediaUrlCaption: 'Example caption',
23+
},
24+
};
25+
26+
const result = getMedia(IterableEmbeddedViewType.Notification, message);
27+
28+
expect(result).toEqual({ url: null, caption: null, shouldShow: false });
29+
});
30+
});
31+
32+
describe('viewType Card', () => {
33+
it('returns url and caption from message.elements, shouldShow true when url is non-empty', () => {
34+
const message: IterableEmbeddedMessage = {
35+
...minimalMessage,
36+
elements: {
37+
mediaUrl: 'https://example.com/photo.jpg',
38+
mediaUrlCaption: 'A nice photo',
39+
},
40+
};
41+
42+
const result = getMedia(IterableEmbeddedViewType.Card, message);
43+
44+
expect(result).toEqual({
45+
url: 'https://example.com/photo.jpg',
46+
caption: 'A nice photo',
47+
shouldShow: true,
48+
});
49+
});
50+
51+
it('returns url only (caption null) when message has no mediaUrlCaption', () => {
52+
const message: IterableEmbeddedMessage = {
53+
...minimalMessage,
54+
elements: { mediaUrl: 'https://example.com/img.png' },
55+
};
56+
57+
const result = getMedia(IterableEmbeddedViewType.Card, message);
58+
59+
expect(result).toEqual({
60+
url: 'https://example.com/img.png',
61+
caption: null,
62+
shouldShow: true,
63+
});
64+
});
65+
66+
it('returns shouldShow false when mediaUrl is empty string', () => {
67+
const message: IterableEmbeddedMessage = {
68+
...minimalMessage,
69+
elements: { mediaUrl: '', mediaUrlCaption: 'Caption' },
70+
};
71+
72+
const result = getMedia(IterableEmbeddedViewType.Card, message);
73+
74+
expect(result.url).toBe('');
75+
expect(result.caption).toBe('Caption');
76+
expect(result.shouldShow).toBe(false);
77+
});
78+
79+
it('returns null url/caption and shouldShow false when message has no elements', () => {
80+
const result = getMedia(IterableEmbeddedViewType.Card, minimalMessage);
81+
82+
expect(result).toEqual({ url: null, caption: null, shouldShow: false });
83+
});
84+
85+
it('returns null url/caption when elements exist but mediaUrl is undefined', () => {
86+
const message: IterableEmbeddedMessage = {
87+
...minimalMessage,
88+
elements: { title: 'Title', body: 'Body' },
89+
};
90+
91+
const result = getMedia(IterableEmbeddedViewType.Card, message);
92+
93+
expect(result).toEqual({ url: null, caption: null, shouldShow: false });
94+
});
95+
});
96+
97+
describe('viewType Banner', () => {
98+
it('returns url and caption from message.elements, shouldShow true when url is non-empty', () => {
99+
const message: IterableEmbeddedMessage = {
100+
...minimalMessage,
101+
elements: {
102+
mediaUrl: 'https://example.com/banner.png',
103+
mediaUrlCaption: 'Banner caption',
104+
},
105+
};
106+
107+
const result = getMedia(IterableEmbeddedViewType.Banner, message);
108+
109+
expect(result).toEqual({
110+
url: 'https://example.com/banner.png',
111+
caption: 'Banner caption',
112+
shouldShow: true,
113+
});
114+
});
115+
116+
it('returns null url/caption and shouldShow false when message has no elements', () => {
117+
const result = getMedia(IterableEmbeddedViewType.Banner, minimalMessage);
118+
119+
expect(result).toEqual({ url: null, caption: null, shouldShow: false });
120+
});
121+
});
122+
123+
describe('return shape', () => {
124+
it('returns an object with url, caption, and shouldShow', () => {
125+
const result = getMedia(IterableEmbeddedViewType.Card, minimalMessage);
126+
127+
expect(Object.keys(result)).toHaveLength(3);
128+
expect(result).toHaveProperty('url');
129+
expect(result).toHaveProperty('caption');
130+
expect(result).toHaveProperty('shouldShow');
131+
expect(typeof result.shouldShow).toBe('boolean');
132+
expect(result.url === null || typeof result.url === 'string').toBe(true);
133+
expect(result.caption === null || typeof result.caption === 'string').toBe(true);
134+
});
135+
});
136+
});

0 commit comments

Comments
 (0)