Skip to content

Commit 56b33b0

Browse files
author
Evan Greer
committed
feat: converts IterableEmbeddedMessage constructor
1 parent 3c0e01d commit 56b33b0

4 files changed

Lines changed: 44 additions & 73 deletions

File tree

src/__tests__/IterableEmbeddedMessage.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ describe('IterableEmbeddedMessage', () => {
4747
},
4848
};
4949

50-
const message = IterableEmbeddedMessage.fromDict(dict);
50+
const message = new IterableEmbeddedMessage(dict);
5151

5252
expect(message).toBeInstanceOf(IterableEmbeddedMessage);
5353

5454
// Check metadata
55-
expect(message.metadata).toBeInstanceOf(IterableEmbeddedMessageMetadata);
55+
expect(message.metadata).toBeInstanceOf(Object);
5656
expect(message.metadata.messageId).toBe('msg-123');
5757
expect(message.metadata.placementId).toBe(1);
5858
expect(message.metadata.campaignId).toBe(456);
@@ -85,7 +85,7 @@ describe('IterableEmbeddedMessage', () => {
8585
},
8686
};
8787

88-
const message = IterableEmbeddedMessage.fromDict(dict);
88+
const message = new IterableEmbeddedMessage(dict);
8989

9090
expect(message).toBeInstanceOf(IterableEmbeddedMessage);
9191
expect(message.metadata).toBeInstanceOf(IterableEmbeddedMessageMetadata);
@@ -107,7 +107,8 @@ describe('IterableEmbeddedMessage', () => {
107107
},
108108
};
109109

110-
expect(() => IterableEmbeddedMessage.fromDict(dict)).toThrow(
110+
// @ts-expect-error - metadata is purposely missing
111+
expect(() => new IterableEmbeddedMessage(dict)).toThrow(
111112
'metadata is required'
112113
);
113114
});
@@ -127,7 +128,7 @@ describe('IterableEmbeddedMessage', () => {
127128
},
128129
};
129130

130-
const message = IterableEmbeddedMessage.fromDict(dict);
131+
const message = new IterableEmbeddedMessage(dict);
131132

132133
expect(message).toBeInstanceOf(IterableEmbeddedMessage);
133134
expect(message.metadata).toBeInstanceOf(IterableEmbeddedMessageMetadata);
@@ -151,7 +152,7 @@ describe('IterableEmbeddedMessage', () => {
151152
},
152153
};
153154

154-
const message = IterableEmbeddedMessage.fromDict(dict);
155+
const message = new IterableEmbeddedMessage(dict);
155156

156157
expect(message).toBeInstanceOf(IterableEmbeddedMessage);
157158
expect(message.metadata).toBeInstanceOf(IterableEmbeddedMessageMetadata);

src/__tests__/IterableEmbeddedMessageMetadata.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ describe('IterableEmbeddedMessage', () => {
1414
isProof: false,
1515
};
1616

17-
const result = IterableEmbeddedMessageMetadata.fromDict(dict);
17+
const result = new IterableEmbeddedMessageMetadata(dict);
1818

1919
expect(result).toBeInstanceOf(IterableEmbeddedMessageMetadata);
2020
expect(result.messageId).toBe('123');
@@ -33,7 +33,7 @@ describe('IterableEmbeddedMessage', () => {
3333
placementId: 456,
3434
};
3535

36-
const result = IterableEmbeddedMessageMetadata.fromDict(dict);
36+
const result = new IterableEmbeddedMessageMetadata(dict);
3737

3838
expect(result).toBeInstanceOf(IterableEmbeddedMessageMetadata);
3939
expect(result.messageId).toBe('123');
@@ -52,7 +52,8 @@ describe('IterableEmbeddedMessage', () => {
5252
};
5353

5454
expect(() => {
55-
IterableEmbeddedMessageMetadata.fromDict(dict);
55+
// @ts-expect-error - messageId is purposely missing
56+
new IterableEmbeddedMessageMetadata(dict);
5657
}).toThrow('messageId and placementId are required');
5758
});
5859
});
Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,57 @@
1-
import { IterableEmbeddedMessageMetadata } from './IterableEmbeddedMessageMetadata';
21
import { IterableEmbeddedMessageElements } from './IterableEmbeddedMessageElements';
2+
import type { EmbeddedMessageElementsDict } from './IterableEmbeddedMessageElements';
33

44
/**
55
* IterableEmbeddedMessage represents an embedded message.
66
*/
77
export class IterableEmbeddedMessage {
88
/** The metadata of the embedded message */
9-
metadata: IterableEmbeddedMessageMetadata;
9+
readonly metadata: {
10+
messageId: string;
11+
placementId: number;
12+
campaignId?: number;
13+
isProof: boolean;
14+
};
1015
/** The elements of the embedded message */
11-
elements?: IterableEmbeddedMessageElements;
16+
readonly elements?: IterableEmbeddedMessageElements;
1217
/** The custom payload of the embedded message */
13-
payload?: Record<string, unknown>;
18+
readonly payload?: Record<string, unknown>;
1419

1520
/**
1621
* Creates an instance of `IterableEmbeddedMessage`.
1722
*
18-
* @param metadata - The metadata of the embedded message.
19-
* @param elements - The elements of the embedded message.
20-
* @param payload - The custom payload of the embedded message.
21-
*/
22-
constructor(
23-
metadata: IterableEmbeddedMessageMetadata,
24-
elements?: IterableEmbeddedMessageElements,
25-
payload?: Record<string, unknown>
26-
) {
27-
this.metadata = metadata;
28-
this.elements = elements;
29-
this.payload = payload;
30-
}
31-
32-
/**
33-
* Creates an instance of `IterableEmbeddedMessage` from a dictionary object.
34-
*
3523
* @param dict - The dictionary object containing the properties to initialize the `IterableEmbeddedMessage` instance.
36-
* @returns A new instance of `IterableEmbeddedMessage` initialized with the provided dictionary properties.
3724
*/
38-
static fromDict(dict: Partial<EmbeddedMessageDict>): IterableEmbeddedMessage {
25+
constructor(dict: EmbeddedMessageDict) {
3926
if (!dict.metadata) {
4027
throw new Error('metadata is required');
4128
}
42-
const metadata = IterableEmbeddedMessageMetadata.fromDict(dict.metadata);
43-
const elements = dict.elements
29+
this.metadata = {
30+
messageId: dict.metadata.messageId,
31+
placementId: dict.metadata.placementId,
32+
campaignId: dict.metadata.campaignId,
33+
isProof: dict.metadata.isProof,
34+
};
35+
this.elements = dict.elements
4436
? new IterableEmbeddedMessageElements(dict.elements)
4537
: undefined;
46-
const payload = dict.payload;
47-
return new IterableEmbeddedMessage(metadata, elements, payload);
38+
this.payload = dict.payload;
4839
}
4940
}
5041

5142
/**
5243
* An interface defining the dictionary object containing the properties for the embedded message.
5344
*/
54-
interface EmbeddedMessageDict {
45+
export interface EmbeddedMessageDict {
5546
/** The metadata of the embedded message */
56-
metadata: IterableEmbeddedMessageMetadata;
47+
metadata: {
48+
messageId: string;
49+
placementId: number;
50+
campaignId?: number;
51+
isProof: boolean;
52+
};
5753
/** The elements of the embedded message */
58-
elements: IterableEmbeddedMessageElements;
54+
elements?: EmbeddedMessageElementsDict;
5955
/** The custom payload of the embedded message */
60-
payload: Record<string, unknown>;
56+
payload?: Record<string, unknown>;
6157
}

src/embedded/classes/IterableEmbeddedMessageMetadata.ts

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,16 @@ export class IterableEmbeddedMessageMetadata {
1414
/**
1515
* Constructs an instance of IterableEmbeddedMessageMetadata.
1616
*
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.
17+
* @param dict - The dictionary object containing the metadata properties.
2118
*/
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 {
19+
constructor(dict: EmbeddedMessageMetadataDict) {
4520
if (!dict.messageId || !dict.placementId) {
4621
throw new Error('messageId and placementId are required');
4722
}
48-
return new IterableEmbeddedMessageMetadata(
49-
dict.messageId,
50-
dict.placementId,
51-
dict.campaignId,
52-
dict.isProof
53-
);
23+
this.messageId = dict.messageId;
24+
this.placementId = dict.placementId;
25+
this.campaignId = dict.campaignId;
26+
this.isProof = dict.isProof ?? false;
5427
}
5528
}
5629

0 commit comments

Comments
 (0)