Skip to content

Commit a07277f

Browse files
author
Evan Greer
committed
feat: adds unit tests for IterableEmbeddedMessageElements
1 parent 76ef3b9 commit a07277f

1 file changed

Lines changed: 212 additions & 0 deletions

File tree

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
import { IterableEmbeddedMessageElements } from '../embedded/classes/IterableEmbeddedMessageElements';
2+
import { IterableEmbeddedMessageDefaultAction } from '../embedded/classes/IterableEmbeddedMessageDefaultAction';
3+
import { IterableEmbeddedMessageButton } from '../embedded/classes/IterableEmbeddedMessageButton';
4+
import { IterableEmbeddedMessageText } from '../embedded/classes/IterableEmbeddedMessageText';
5+
import { Iterable } from '../core/classes/Iterable';
6+
7+
describe('IterableEmbeddedMessageElements', () => {
8+
it('should create an instance with all properties', () => {
9+
Iterable.logger.log(
10+
'iterableEmbeddedMessageElements_fromDict_all_properties'
11+
);
12+
13+
const dict = {
14+
title: 'Awesome Title',
15+
body: 'Radical Body Text',
16+
mediaUrl: 'https://example.com/image.jpg',
17+
mediaUrlCaption: 'Check out this sick image!',
18+
defaultAction: {
19+
type: 'openUrl',
20+
data: 'https://example.com',
21+
},
22+
buttons: [
23+
{
24+
id: 'button-1',
25+
title: 'Click Me!',
26+
action: {
27+
type: 'openUrl',
28+
data: 'https://example.com/button1',
29+
},
30+
},
31+
{
32+
id: 'button-2',
33+
title: 'Close',
34+
action: {
35+
type: 'action://dismiss',
36+
},
37+
},
38+
],
39+
text: [
40+
{
41+
id: 'text-1',
42+
text: 'Some cool text',
43+
type: 'body',
44+
},
45+
{
46+
id: 'text-2',
47+
text: 'More radical text',
48+
type: 'subtitle',
49+
},
50+
],
51+
};
52+
53+
const elements = IterableEmbeddedMessageElements.fromDict(dict);
54+
55+
expect(elements).toBeInstanceOf(IterableEmbeddedMessageElements);
56+
expect(elements.title).toBe('Awesome Title');
57+
expect(elements.body).toBe('Radical Body Text');
58+
expect(elements.mediaUrl).toBe('https://example.com/image.jpg');
59+
expect(elements.mediaUrlCaption).toBe('Check out this sick image!');
60+
61+
// Check defaultAction
62+
expect(elements.defaultAction).toBeInstanceOf(
63+
IterableEmbeddedMessageDefaultAction
64+
);
65+
expect(elements.defaultAction?.type).toBe('openUrl');
66+
expect(elements.defaultAction?.data).toBe('https://example.com');
67+
68+
// Check buttons
69+
expect(elements.buttons).toHaveLength(2);
70+
const firstButton = elements.buttons![0] as IterableEmbeddedMessageButton;
71+
expect(firstButton).toBeInstanceOf(IterableEmbeddedMessageButton);
72+
expect(firstButton.id).toBe('button-1');
73+
expect(firstButton.title).toBe('Click Me!');
74+
expect(firstButton.action?.type).toBe('openUrl');
75+
expect(firstButton.action?.data).toBe('https://example.com/button1');
76+
77+
const secondButton = elements.buttons![1] as IterableEmbeddedMessageButton;
78+
expect(secondButton).toBeInstanceOf(IterableEmbeddedMessageButton);
79+
expect(secondButton.id).toBe('button-2');
80+
expect(secondButton.title).toBe('Close');
81+
expect(secondButton.action?.type).toBe('action://dismiss');
82+
expect(secondButton.action?.data).toBeUndefined();
83+
84+
// Check text elements
85+
expect(elements.text).toHaveLength(2);
86+
const firstText = elements.text![0] as IterableEmbeddedMessageText;
87+
expect(firstText).toBeInstanceOf(IterableEmbeddedMessageText);
88+
expect(firstText.id).toBe('text-1');
89+
expect(firstText.text).toBe('Some cool text');
90+
expect(firstText.type).toBe('body');
91+
92+
const secondText = elements.text![1] as IterableEmbeddedMessageText;
93+
expect(secondText).toBeInstanceOf(IterableEmbeddedMessageText);
94+
expect(secondText.id).toBe('text-2');
95+
expect(secondText.text).toBe('More radical text');
96+
expect(secondText.type).toBe('subtitle');
97+
});
98+
99+
it('should create an instance with title and body', () => {
100+
Iterable.logger.log(
101+
'iterableEmbeddedMessageElements_fromDict_title_and_body'
102+
);
103+
104+
const dict = {
105+
title: 'Simple Title',
106+
body: 'Simple Body',
107+
};
108+
109+
const elements = IterableEmbeddedMessageElements.fromDict(dict);
110+
111+
expect(elements).toBeInstanceOf(IterableEmbeddedMessageElements);
112+
expect(elements.title).toBe('Simple Title');
113+
expect(elements.body).toBe('Simple Body');
114+
expect(elements.mediaUrl).toBeUndefined();
115+
expect(elements.mediaUrlCaption).toBeUndefined();
116+
expect(elements.defaultAction).toBeUndefined();
117+
expect(elements.buttons).toBeUndefined();
118+
expect(elements.text).toBeUndefined();
119+
});
120+
121+
it('should create an instance with no title or body', () => {
122+
Iterable.logger.log(
123+
'iterableEmbeddedMessageElements_fromDict_no_title_or_body'
124+
);
125+
126+
const dict = {};
127+
128+
const elements = IterableEmbeddedMessageElements.fromDict(dict);
129+
130+
expect(elements).toBeInstanceOf(IterableEmbeddedMessageElements);
131+
expect(elements.title).toBeUndefined();
132+
expect(elements.body).toBeUndefined();
133+
expect(elements.mediaUrl).toBeUndefined();
134+
expect(elements.mediaUrlCaption).toBeUndefined();
135+
expect(elements.defaultAction).toBeUndefined();
136+
expect(elements.buttons).toBeUndefined();
137+
expect(elements.text).toBeUndefined();
138+
});
139+
140+
it('should create an instance with media properties', () => {
141+
Iterable.logger.log(
142+
'iterableEmbeddedMessageElements_fromDict_media_properties'
143+
);
144+
145+
const dict = {
146+
title: 'Media Title',
147+
body: 'Media Body',
148+
mediaUrl: 'https://example.com/media.jpg',
149+
mediaUrlCaption: 'Check this out!',
150+
};
151+
152+
const elements = IterableEmbeddedMessageElements.fromDict(dict);
153+
154+
expect(elements).toBeInstanceOf(IterableEmbeddedMessageElements);
155+
expect(elements.title).toBe('Media Title');
156+
expect(elements.body).toBe('Media Body');
157+
expect(elements.mediaUrl).toBe('https://example.com/media.jpg');
158+
expect(elements.mediaUrlCaption).toBe('Check this out!');
159+
expect(elements.defaultAction).toBeUndefined();
160+
expect(elements.buttons).toBeUndefined();
161+
expect(elements.text).toBeUndefined();
162+
});
163+
164+
it('should create an instance with defaultAction only', () => {
165+
Iterable.logger.log(
166+
'iterableEmbeddedMessageElements_fromDict_defaultAction_only'
167+
);
168+
169+
const dict = {
170+
title: 'Action Title',
171+
body: 'Action Body',
172+
defaultAction: {
173+
type: 'openUrl',
174+
data: 'https://example.com',
175+
},
176+
};
177+
178+
const elements = IterableEmbeddedMessageElements.fromDict(dict);
179+
180+
expect(elements).toBeInstanceOf(IterableEmbeddedMessageElements);
181+
expect(elements.title).toBe('Action Title');
182+
expect(elements.body).toBe('Action Body');
183+
expect(elements.defaultAction).toBeInstanceOf(
184+
IterableEmbeddedMessageDefaultAction
185+
);
186+
expect(elements.defaultAction?.type).toBe('openUrl');
187+
expect(elements.defaultAction?.data).toBe('https://example.com');
188+
expect(elements.buttons).toBeUndefined();
189+
expect(elements.text).toBeUndefined();
190+
});
191+
192+
it('should create an instance with empty arrays for buttons and text', () => {
193+
Iterable.logger.log(
194+
'iterableEmbeddedMessageElements_fromDict_empty_arrays'
195+
);
196+
197+
const dict = {
198+
title: 'Empty Arrays Title',
199+
body: 'Empty Arrays Body',
200+
buttons: [],
201+
text: [],
202+
};
203+
204+
const elements = IterableEmbeddedMessageElements.fromDict(dict);
205+
206+
expect(elements).toBeInstanceOf(IterableEmbeddedMessageElements);
207+
expect(elements.title).toBe('Empty Arrays Title');
208+
expect(elements.body).toBe('Empty Arrays Body');
209+
expect(elements.buttons).toHaveLength(0);
210+
expect(elements.text).toHaveLength(0);
211+
});
212+
});

0 commit comments

Comments
 (0)