Skip to content

Commit d8d1fe8

Browse files
author
Evan Greer
committed
feat: adds unit tests
1 parent 54a04e0 commit d8d1fe8

2 files changed

Lines changed: 267 additions & 0 deletions

File tree

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
import { IterableEmbeddedMessage } from '../embedded/classes/IterableEmbeddedMessage';
2+
import { IterableEmbeddedMessageMetadata } from '../embedded/classes/IterableEmbeddedMessageMetadata';
3+
import { IterableEmbeddedMessageElements } from '../embedded/classes/IterableEmbeddedMessageElements';
4+
import { Iterable } from '../core/classes/Iterable';
5+
6+
describe('IterableEmbeddedMessage', () => {
7+
it('should create an instance with all properties', () => {
8+
Iterable.logger.log('iterableEmbeddedMessage_fromDict_all_properties');
9+
10+
const dict = {
11+
metadata: {
12+
messageId: 'msg-123',
13+
placementId: 1,
14+
campaignId: 456,
15+
isProof: false,
16+
},
17+
elements: {
18+
title: 'Awesome Title',
19+
body: 'Radical Body Text',
20+
mediaUrl: 'https://example.com/image.jpg',
21+
mediaUrlCaption: 'Check out this sick image!',
22+
defaultAction: {
23+
type: 'openUrl',
24+
data: 'https://example.com',
25+
},
26+
buttons: [
27+
{
28+
id: 'button-1',
29+
title: 'Click Me!',
30+
action: {
31+
type: 'openUrl',
32+
data: 'https://example.com/button1',
33+
},
34+
},
35+
],
36+
text: [
37+
{
38+
id: 'text-1',
39+
text: 'Some cool text',
40+
type: 'body',
41+
},
42+
],
43+
},
44+
payload: {
45+
customKey: 'customValue',
46+
anotherKey: 123,
47+
},
48+
};
49+
50+
const message = IterableEmbeddedMessage.fromDict(dict);
51+
52+
expect(message).toBeInstanceOf(IterableEmbeddedMessage);
53+
54+
// Check metadata
55+
expect(message.metadata).toBeInstanceOf(IterableEmbeddedMessageMetadata);
56+
expect(message.metadata.messageId).toBe('msg-123');
57+
expect(message.metadata.placementId).toBe(1);
58+
expect(message.metadata.campaignId).toBe(456);
59+
expect(message.metadata.isProof).toBe(false);
60+
61+
// Check elements
62+
expect(message.elements).toBeInstanceOf(IterableEmbeddedMessageElements);
63+
expect(message.elements?.title).toBe('Awesome Title');
64+
expect(message.elements?.body).toBe('Radical Body Text');
65+
expect(message.elements?.mediaUrl).toBe('https://example.com/image.jpg');
66+
expect(message.elements?.mediaUrlCaption).toBe(
67+
'Check out this sick image!'
68+
);
69+
70+
// Check payload
71+
expect(message.payload).toEqual({
72+
customKey: 'customValue',
73+
anotherKey: 123,
74+
});
75+
});
76+
77+
it('should create an instance with only required metadata', () => {
78+
Iterable.logger.log('iterableEmbeddedMessage_fromDict_required_only');
79+
80+
const dict = {
81+
metadata: {
82+
messageId: 'msg-123',
83+
placementId: 1,
84+
isProof: false,
85+
},
86+
};
87+
88+
const message = IterableEmbeddedMessage.fromDict(dict);
89+
90+
expect(message).toBeInstanceOf(IterableEmbeddedMessage);
91+
expect(message.metadata).toBeInstanceOf(IterableEmbeddedMessageMetadata);
92+
expect(message.metadata.messageId).toBe('msg-123');
93+
expect(message.metadata.placementId).toBe(1);
94+
expect(message.metadata.campaignId).toBeUndefined();
95+
expect(message.metadata.isProof).toBe(false);
96+
expect(message.elements).toBeUndefined();
97+
expect(message.payload).toBeUndefined();
98+
});
99+
100+
it('should throw an error if metadata is missing', () => {
101+
Iterable.logger.log('iterableEmbeddedMessage_fromDict_missing_metadata');
102+
103+
const dict = {
104+
elements: {
105+
title: 'Some Title',
106+
body: 'Some Body',
107+
},
108+
};
109+
110+
expect(() => IterableEmbeddedMessage.fromDict(dict)).toThrow(
111+
'metadata is required'
112+
);
113+
});
114+
115+
it('should create an instance with elements but no payload', () => {
116+
Iterable.logger.log('iterableEmbeddedMessage_fromDict_elements_only');
117+
118+
const dict = {
119+
metadata: {
120+
messageId: 'msg-123',
121+
placementId: 1,
122+
isProof: false,
123+
},
124+
elements: {
125+
title: 'Elements Only',
126+
body: 'No payload here',
127+
},
128+
};
129+
130+
const message = IterableEmbeddedMessage.fromDict(dict);
131+
132+
expect(message).toBeInstanceOf(IterableEmbeddedMessage);
133+
expect(message.metadata).toBeInstanceOf(IterableEmbeddedMessageMetadata);
134+
expect(message.elements).toBeInstanceOf(IterableEmbeddedMessageElements);
135+
expect(message.elements?.title).toBe('Elements Only');
136+
expect(message.elements?.body).toBe('No payload here');
137+
expect(message.payload).toBeUndefined();
138+
});
139+
140+
it('should create an instance with payload but no elements', () => {
141+
Iterable.logger.log('iterableEmbeddedMessage_fromDict_payload_only');
142+
143+
const dict = {
144+
metadata: {
145+
messageId: 'msg-123',
146+
placementId: 1,
147+
isProof: false,
148+
},
149+
payload: {
150+
someData: 'someValue',
151+
},
152+
};
153+
154+
const message = IterableEmbeddedMessage.fromDict(dict);
155+
156+
expect(message).toBeInstanceOf(IterableEmbeddedMessage);
157+
expect(message.metadata).toBeInstanceOf(IterableEmbeddedMessageMetadata);
158+
expect(message.elements).toBeUndefined();
159+
expect(message.payload).toEqual({
160+
someData: 'someValue',
161+
});
162+
});
163+
});
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import { IterableEmbeddedPlacement } from '../embedded/classes/IterableEmbeddedPlacement';
2+
import { IterableEmbeddedMessage } from '../embedded/classes/IterableEmbeddedMessage';
3+
import { Iterable } from '../core/classes/Iterable';
4+
5+
describe('IterableEmbeddedPlacement', () => {
6+
it('should create an instance with placementId and messages', () => {
7+
Iterable.logger.log('iterableEmbeddedPlacement_fromDict_with_messages');
8+
9+
const dict = {
10+
placementId: 123,
11+
messages: [
12+
{
13+
metadata: {
14+
messageId: 'msg-1',
15+
placementId: 123,
16+
isProof: false,
17+
},
18+
elements: {
19+
title: 'First Message',
20+
body: 'Body of first message',
21+
},
22+
},
23+
{
24+
metadata: {
25+
messageId: 'msg-2',
26+
placementId: 123,
27+
isProof: false,
28+
},
29+
elements: {
30+
title: 'Second Message',
31+
body: 'Body of second message',
32+
},
33+
},
34+
],
35+
};
36+
37+
const placement = IterableEmbeddedPlacement.fromDict(dict);
38+
39+
expect(placement).toBeInstanceOf(IterableEmbeddedPlacement);
40+
expect(placement.placementId).toBe(123);
41+
expect(placement.messages).toBeDefined();
42+
expect(placement.messages!.length).toBe(2);
43+
const messages = placement.messages as [
44+
IterableEmbeddedMessage,
45+
IterableEmbeddedMessage,
46+
];
47+
expect(messages[0]).toBeInstanceOf(IterableEmbeddedMessage);
48+
expect(messages[1]).toBeInstanceOf(IterableEmbeddedMessage);
49+
expect(messages[0].metadata.messageId).toBe('msg-1');
50+
expect(messages[1].metadata.messageId).toBe('msg-2');
51+
});
52+
53+
it('should create an instance with only placementId', () => {
54+
Iterable.logger.log('iterableEmbeddedPlacement_fromDict_placementId_only');
55+
56+
const dict = {
57+
placementId: 456,
58+
};
59+
60+
const placement = IterableEmbeddedPlacement.fromDict(dict);
61+
62+
expect(placement).toBeInstanceOf(IterableEmbeddedPlacement);
63+
expect(placement.placementId).toBe(456);
64+
expect(placement.messages).toBeUndefined();
65+
});
66+
67+
it('should throw an error if placementId is missing', () => {
68+
Iterable.logger.log(
69+
'iterableEmbeddedPlacement_fromDict_missing_placementId'
70+
);
71+
72+
const dict = {
73+
messages: [
74+
{
75+
metadata: {
76+
messageId: 'msg-1',
77+
placementId: 123,
78+
isProof: false,
79+
},
80+
},
81+
],
82+
};
83+
84+
expect(() => IterableEmbeddedPlacement.fromDict(dict)).toThrow(
85+
'placementId is required'
86+
);
87+
});
88+
89+
it('should handle empty messages array', () => {
90+
Iterable.logger.log('iterableEmbeddedPlacement_fromDict_empty_messages');
91+
92+
const dict = {
93+
placementId: 789,
94+
messages: [],
95+
};
96+
97+
const placement = IterableEmbeddedPlacement.fromDict(dict);
98+
99+
expect(placement).toBeInstanceOf(IterableEmbeddedPlacement);
100+
expect(placement.placementId).toBe(789);
101+
expect(placement.messages).toBeDefined();
102+
expect(placement.messages!.length).toBe(0);
103+
});
104+
});

0 commit comments

Comments
 (0)