Skip to content

Commit 5b23d83

Browse files
authored
Merge pull request #71 from KovalevuchMykhaylo/Start-date-string
New CTA type. End/start date changed to string in campaign
2 parents ed51cbf + a20b3f2 commit 5b23d83

4 files changed

Lines changed: 125 additions & 6 deletions

File tree

src/main/java/com/taboola/backstage/model/media/campaigns/Campaign.java

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.taboola.backstage.model.media.campaigns;
22

33
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import com.fasterxml.jackson.annotation.JsonIgnore;
45
import com.taboola.backstage.model.CampaignType;
56
import com.taboola.backstage.model.media.campaigns.brandsafety.ExternalBrandSafety;
67
import com.taboola.backstage.model.media.campaigns.scheduling.ActivitySchedule;
@@ -10,6 +11,8 @@
1011
import com.taboola.rest.api.annotations.ReadOnly;
1112
import com.taboola.rest.api.annotations.Required;
1213

14+
import java.text.ParseException;
15+
import java.text.SimpleDateFormat;
1316
import java.util.Date;
1417
import java.util.Objects;
1518

@@ -21,6 +24,10 @@
2124
*/
2225
public class Campaign {
2326

27+
private static final String EXTENDED_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
28+
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd";
29+
protected final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
30+
private final SimpleDateFormat extendedDateFormat = new SimpleDateFormat(EXTENDED_DATE_TIME_FORMAT);
2431
@ReadOnly
2532
protected String id;
2633
@ReadOnly
@@ -71,14 +78,12 @@ public class Campaign {
7178
protected MarketingObjective marketingObjective;
7279
protected ActivitySchedule activitySchedule;
7380
@Final
74-
protected Date startDate;
75-
protected Date endDate;
81+
protected String startDate;
82+
protected String endDate;
7683
@ReadOnly
77-
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
78-
protected Date startDateInUtc;
84+
protected String startDateInUtc;
7985
@ReadOnly
80-
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
81-
protected Date endDateInUtc;
86+
protected String endDateInUtc;
8287
@ReadOnly
8388
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
8489
protected Date trafficAllocationAbTestEndDate;
@@ -181,10 +186,34 @@ public String getComments() {
181186
}
182187

183188
public Date getStartDate() {
189+
if (startDate != null) {
190+
try {
191+
return dateFormat.parse(startDate);
192+
} catch (ParseException e) {
193+
throw new RuntimeException(e);
194+
}
195+
}
196+
return null;
197+
}
198+
199+
@JsonIgnore
200+
public String getStartDateStr() {
184201
return startDate;
185202
}
186203

187204
public Date getEndDate() {
205+
if (endDate != null) {
206+
try {
207+
return dateFormat.parse(endDate);
208+
} catch (ParseException e) {
209+
throw new RuntimeException(e);
210+
}
211+
}
212+
return null;
213+
}
214+
215+
@JsonIgnore
216+
public String getEndDateStr() {
188217
return endDate;
189218
}
190219

@@ -269,10 +298,32 @@ public CampaignMultiTargeting<Long> getContextualSegmentsTargeting() {
269298
}
270299

271300
public Date getStartDateInUtc() {
301+
if (startDateInUtc != null) {
302+
try {
303+
return extendedDateFormat.parse(startDateInUtc);
304+
} catch (ParseException e) {
305+
throw new RuntimeException(e);
306+
}
307+
}
308+
return null;
309+
}
310+
311+
public String getStartDateInUtcStr() {
272312
return startDateInUtc;
273313
}
274314

275315
public Date getEndDateInUtc() {
316+
if (endDateInUtc != null) {
317+
try {
318+
return extendedDateFormat.parse(endDateInUtc);
319+
} catch (ParseException e) {
320+
throw new RuntimeException(e);
321+
}
322+
}
323+
return null;
324+
}
325+
326+
public String getEndDateInUtcStr() {
276327
return endDateInUtc;
277328
}
278329

src/main/java/com/taboola/backstage/model/media/campaigns/CampaignOperation.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,29 @@ public CampaignOperation setComments(String comments) {
101101
}
102102

103103
public CampaignOperation setStartDate(Date startDate) {
104+
if (startDate != null) {
105+
this.startDate = dateFormat.format(startDate);
106+
} else {
107+
this.startDate = null;
108+
}
109+
return this;
110+
}
111+
112+
public CampaignOperation setStartDateStr(String startDate) {
104113
this.startDate = startDate;
105114
return this;
106115
}
107116

108117
public CampaignOperation setEndDate(Date endDate) {
118+
if (endDate != null) {
119+
this.endDate = dateFormat.format(endDate);
120+
} else {
121+
this.endDate = null;
122+
}
123+
return this;
124+
}
125+
126+
public CampaignOperation setEndDateStr(String endDate) {
109127
this.endDate = endDate;
110128
return this;
111129
}

src/main/java/com/taboola/backstage/model/media/campaigns/items/CtaType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ public enum CtaType {
2121
GET_OFFER,
2222
TRY_NOW,
2323
NONE,
24+
SEARCH_NOW,
2425
@JsonEnumDefaultValue UNSUPPORTED_BY_SDK_VALUE
2526
}

src/test/java/com/taboola/backstage/services/CampaignsServiceImplTest.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
import org.junit.Test;
1414
import com.taboola.backstage.BackstageTestBase;
1515

16+
import java.lang.reflect.Field;
17+
import java.text.ParseException;
18+
import java.text.SimpleDateFormat;
19+
import java.time.LocalDate;
20+
import java.time.LocalDateTime;
21+
import java.time.ZoneId;
22+
import java.time.format.DateTimeFormatter;
1623
import java.util.Collections;
1724
import java.util.Date;
1825

@@ -200,4 +207,46 @@ public void testDelete() {
200207
verify(endpointMock, times(1)).deleteCampaign(any(), any(), any());
201208
}
202209

210+
@Test
211+
public void testCreate_verifyStartEndData() throws NoSuchFieldException, IllegalAccessException, ParseException {
212+
Date campaignEndDate = Date.from(LocalDateTime.now().plusDays(10).atZone(ZoneId.systemDefault()).toInstant());
213+
CampaignOperation campaignOperation = generateDummyCampaignOperation();
214+
campaignOperation.setName("dummy_name")
215+
.setBrandingText("dummy_branding")
216+
.setCpc(1d)
217+
.setSpendingLimit(1d)
218+
.setSpendingLimitModel(SpendingLimitModel.ENTIRE)
219+
.setStartDate(new Date())
220+
.setEndDate(campaignEndDate);
221+
BackstageAuthentication auth = generateDummyClientCredentialsBackstageAuth();
222+
when(endpointMock.createCampaign(auth.getToken().getAccessTokenForHeader(),"accountId", campaignOperation)).thenReturn(campaignOperation);
223+
224+
Campaign actual = testInstance.create(auth, "accountId", campaignOperation);
225+
Date expectedStartDate = Date.from(LocalDate.now().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
226+
Date expectedEndDate = Date.from(LocalDate.now().plusDays(10).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
227+
228+
Field utcDateFormatField = actual.getClass().getSuperclass().getDeclaredField("EXTENDED_DATE_TIME_FORMAT");
229+
utcDateFormatField.setAccessible(true);
230+
String utcDateFormat = (String) utcDateFormatField.get(actual);
231+
LocalDateTime ldNow = LocalDateTime.now();
232+
String startDateInUtcString = ldNow.format(DateTimeFormatter.ofPattern(utcDateFormat));
233+
String endDateInUtcString = ldNow.plusDays(10).format(DateTimeFormatter.ofPattern(utcDateFormat));
234+
235+
Field startDateInUtcField = actual.getClass().getSuperclass().getDeclaredField("startDateInUtc");
236+
startDateInUtcField.setAccessible(true);
237+
startDateInUtcField.set(actual, startDateInUtcString);
238+
Field endDateInUtcField = actual.getClass().getSuperclass().getDeclaredField("endDateInUtc");
239+
endDateInUtcField.setAccessible(true);
240+
endDateInUtcField.set(actual, endDateInUtcString);
241+
242+
SimpleDateFormat simpleUtcDateFormat = new SimpleDateFormat(utcDateFormat);
243+
244+
assertEquals("Invalid start date", expectedStartDate, actual.getStartDate());
245+
assertEquals("Invalid end date", expectedEndDate, actual.getEndDate());
246+
assertEquals("Invalid start date in utc", simpleUtcDateFormat.parse(startDateInUtcString), actual.getStartDateInUtc());
247+
assertEquals("Invalid end date in utc", simpleUtcDateFormat.parse(endDateInUtcString), actual.getEndDateInUtc());
248+
assertEquals("Invalid campaignOperation", campaignOperation, actual);
249+
verify(endpointMock, times(1)).createCampaign(any(), any(), any());
250+
}
251+
203252
}

0 commit comments

Comments
 (0)