From d8b73364f93e5ea0db16a2be860252b0b755df4f Mon Sep 17 00:00:00 2001 From: dsoffiantini Date: Wed, 20 Jul 2022 11:26:35 -0600 Subject: [PATCH] feat: includes meta information in offer --- packages/optimize/README.md | 20 +++++++++++--------- packages/optimize/__tests__/OptimizeTests.ts | 3 +++ packages/optimize/__tests__/offer.json | 3 +++ packages/optimize/ts/models/Offer.ts | 7 +++++-- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/packages/optimize/README.md b/packages/optimize/README.md index c3836de2..7e5c8fe5 100644 --- a/packages/optimize/README.md +++ b/packages/optimize/README.md @@ -175,7 +175,7 @@ This API fetches the propositions for the provided DecisionScope list. **Syntax** ```typescript -updatePropositions(decisionScopes: Array, xdm: ?Map, data: ?Map) +updatePropositions(decisionScopes: Array, xdm?: Map, data?: Map) ``` **Example** @@ -207,7 +207,7 @@ This class represents the decision scope which is used to fetch the decision pro module.exports = class DecisionScope { name: string; - constructor(name: ?string, activityId: ?string, placementId: ?string, itemCount: ?number) { + constructor(name?: string, activityId?: string, placementId?: string, itemCount?: number) { if(name && name.trim()) { this.name = name; } else { @@ -239,7 +239,7 @@ module.exports = class Proposition { scope: string; scopeDetails: Map; - constructor(eventData: any) { + constructor(eventData: PropositionEventData) { this.id = eventData['id']; this.scope = eventData['scope']; this.scopeDetails = eventData['scopeDetails']; @@ -269,29 +269,31 @@ module.exports = class Offer { id: string; etag: string; schema: string; - data: {string: any}; + data: Record; + meta?: Record; - get content(): ?string { + get content(): string { return this.data["content"]; } - get format(): ?string { + get format(): string { return this.data["format"]; } - get language(): ?Array { + get language(): Array { return this.data["language"]; } - get characteristics(): ?Map { + get characteristics(): Map { return this.data["characteristics"]; } - constructor(eventData: any) { + constructor(eventData: OfferEventData) { this.id = eventData['id']; this.etag = eventData['etag']; this.schema = eventData['schema']; this.data = eventData['data']; + this.meta = eventData['meta'] } /** diff --git a/packages/optimize/__tests__/OptimizeTests.ts b/packages/optimize/__tests__/OptimizeTests.ts index 9736902e..0f20021c 100644 --- a/packages/optimize/__tests__/OptimizeTests.ts +++ b/packages/optimize/__tests__/OptimizeTests.ts @@ -75,6 +75,9 @@ describe('Optimize', () => { expect(offer.format).toBe('text/plain'); expect(offer.language).toBe(offerJson.data.language); expect(offer.characteristics).toBe(offerJson.data.characteristics); + expect(offer.meta).toMatchObject({ + "custom": "custom-meta" + }) }); it('Test Offer.displayed', async () => { diff --git a/packages/optimize/__tests__/offer.json b/packages/optimize/__tests__/offer.json index 0e5054ae..13e008ee 100644 --- a/packages/optimize/__tests__/offer.json +++ b/packages/optimize/__tests__/offer.json @@ -10,5 +10,8 @@ "characteristics": { "mobile": "true" } + }, + "meta": { + "custom": "custom-meta" } } diff --git a/packages/optimize/ts/models/Offer.ts b/packages/optimize/ts/models/Offer.ts index 7e6ed6be..16a06492 100644 --- a/packages/optimize/ts/models/Offer.ts +++ b/packages/optimize/ts/models/Offer.ts @@ -17,14 +17,16 @@ interface OfferEventData { id: string; etag: string; schema: string; - data: Record; + data: Record; + meta?: Record; } class Offer { id: string; etag: string; schema: string; - data: Record; + data: Record; + meta?: Record; get content(): string { return this.data["content"]; @@ -47,6 +49,7 @@ class Offer { this.etag = eventData['etag']; this.schema = eventData['schema']; this.data = eventData['data']; + this.meta = eventData['meta']; } /**