Skip to content

Commit 50053fd

Browse files
authored
Merge branch 'evan/feature/embedded' into evan/MOB-11561-enableEmbeddedMessaging-flag-iOS
2 parents 6f08aed + ef639f5 commit 50053fd

File tree

2 files changed

+123
-0
lines changed

2 files changed

+123
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { IterableEmbeddedMessageMetadata } from '../embedded/classes/IterableEmbeddedMessageMetadata';
2+
import { Iterable } from '../core';
3+
4+
describe('IterableEmbeddedMessage', () => {
5+
test('should create an instance of IterableEmbeddedMessageMetadata from a dictionary', () => {
6+
Iterable.logger.log(
7+
'iterableEmbeddedMessageMetadata_fromDict_valid_dictionary'
8+
);
9+
10+
const dict = {
11+
messageId: '123',
12+
placementId: 456,
13+
campaignId: 789,
14+
isProof: false,
15+
};
16+
17+
const result = IterableEmbeddedMessageMetadata.fromDict(dict);
18+
19+
expect(result).toBeInstanceOf(IterableEmbeddedMessageMetadata);
20+
expect(result.messageId).toBe('123');
21+
expect(result.placementId).toBe(456);
22+
expect(result.campaignId).toBe(789);
23+
expect(result.isProof).toBe(false);
24+
});
25+
26+
test('should handle optional fields', () => {
27+
Iterable.logger.log(
28+
'iterableEmbeddedMessageMetadata_fromDict_optional_fields_omitted'
29+
);
30+
31+
const dict = {
32+
messageId: '123',
33+
placementId: 456,
34+
};
35+
36+
const result = IterableEmbeddedMessageMetadata.fromDict(dict);
37+
38+
expect(result).toBeInstanceOf(IterableEmbeddedMessageMetadata);
39+
expect(result.messageId).toBe('123');
40+
expect(result.placementId).toBe(456);
41+
expect(result.campaignId).toBeUndefined();
42+
expect(result.isProof).toBe(false);
43+
});
44+
45+
test('should throw an error if messageId is not provided', () => {
46+
Iterable.logger.log(
47+
'iterableEmbeddedMessageMetadata_fromDict_missing_messageId'
48+
);
49+
50+
const dict = {
51+
placementId: 456,
52+
};
53+
54+
expect(() => {
55+
IterableEmbeddedMessageMetadata.fromDict(dict);
56+
}).toThrow('messageId and placementId are required');
57+
});
58+
});
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/**
2+
* Metadata for an embedded message.
3+
*/
4+
export class IterableEmbeddedMessageMetadata {
5+
/** The ID for the embedded message */
6+
readonly messageId: string;
7+
/** The placement ID for the embedded message */
8+
readonly placementId: number;
9+
/** The campaign ID for the embedded message */
10+
readonly campaignId?: number;
11+
/** Whether the embedded message is a proof */
12+
readonly isProof: boolean;
13+
14+
/**
15+
* Constructs an instance of IterableEmbeddedMessageMetadata.
16+
*
17+
* @param messageId - The ID for the embedded message.
18+
* @param placementId - The placement ID for the embedded message.
19+
* @param campaignId - The campaign ID for the embedded message.
20+
* @param isProof - Whether the embedded message is a proof.
21+
*/
22+
constructor(
23+
messageId: string,
24+
placementId: number,
25+
campaignId: number | undefined,
26+
isProof: boolean = false
27+
) {
28+
this.messageId = messageId;
29+
this.placementId = placementId;
30+
this.campaignId = campaignId;
31+
this.isProof = isProof;
32+
}
33+
34+
/**
35+
* Creates an instance of `IterableEmbeddedMessageMetadata` from a dictionary object.
36+
*
37+
* @param dict - The dictionary objectcontaining the metadata properties.
38+
* This corresponds to the properties in {@link IterableEmbeddedMessageMetadata}
39+
*
40+
* @returns A new instance of `IterableEmbeddedMessageMetadata` with the provided properties.
41+
*/
42+
static fromDict(
43+
dict: Partial<EmbeddedMessageMetadataDict>
44+
): IterableEmbeddedMessageMetadata {
45+
if (!dict.messageId || !dict.placementId) {
46+
throw new Error('messageId and placementId are required');
47+
}
48+
return new IterableEmbeddedMessageMetadata(
49+
dict.messageId,
50+
dict.placementId,
51+
dict.campaignId,
52+
dict.isProof
53+
);
54+
}
55+
}
56+
57+
/**
58+
* An interface defining the dictionary object containing the metadata properties for an embedded message.
59+
*/
60+
export interface EmbeddedMessageMetadataDict {
61+
messageId: string;
62+
placementId: number;
63+
campaignId?: number;
64+
isProof?: boolean;
65+
}

0 commit comments

Comments
 (0)