Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.taboola.backstage.model.media.campaigns;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.taboola.backstage.model.CampaignType;
import com.taboola.backstage.model.media.campaigns.brandsafety.ExternalBrandSafety;
import com.taboola.backstage.model.media.campaigns.scheduling.ActivitySchedule;
Expand All @@ -10,6 +11,8 @@
import com.taboola.rest.api.annotations.ReadOnly;
import com.taboola.rest.api.annotations.Required;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

Expand All @@ -21,6 +24,10 @@
*/
public class Campaign {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please create unit test that test the date functionality

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


private static final String EXTENDED_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd";
protected final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
private final SimpleDateFormat extendedDateFormat = new SimpleDateFormat(EXTENDED_DATE_TIME_FORMAT);
@ReadOnly
protected String id;
@ReadOnly
Expand Down Expand Up @@ -71,14 +78,12 @@ public class Campaign {
protected MarketingObjective marketingObjective;
protected ActivitySchedule activitySchedule;
@Final
protected Date startDate;
protected Date endDate;
protected String startDate;
protected String endDate;
@ReadOnly
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
protected Date startDateInUtc;
protected String startDateInUtc;
@ReadOnly
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
protected Date endDateInUtc;
protected String endDateInUtc;
@ReadOnly
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
protected Date trafficAllocationAbTestEndDate;
Expand Down Expand Up @@ -181,10 +186,34 @@ public String getComments() {
}

public Date getStartDate() {
if (startDate != null) {
try {
return dateFormat.parse(startDate);
Comment thread
KovalevuchMykhaylo marked this conversation as resolved.
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
return null;
}

@JsonIgnore
public String getStartDateStr() {
return startDate;
}

public Date getEndDate() {
if (endDate != null) {
try {
return dateFormat.parse(endDate);
Comment thread
KovalevuchMykhaylo marked this conversation as resolved.
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
return null;
}

@JsonIgnore
public String getEndDateStr() {
return endDate;
}

Expand Down Expand Up @@ -269,10 +298,32 @@ public CampaignMultiTargeting<Long> getContextualSegmentsTargeting() {
}

public Date getStartDateInUtc() {
if (startDateInUtc != null) {
try {
return extendedDateFormat.parse(startDateInUtc);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
return null;
}

public String getStartDateInUtcStr() {
return startDateInUtc;
}

public Date getEndDateInUtc() {
if (endDateInUtc != null) {
try {
return extendedDateFormat.parse(endDateInUtc);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
return null;
}

public String getEndDateInUtcStr() {
return endDateInUtc;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,29 @@ public CampaignOperation setComments(String comments) {
}

public CampaignOperation setStartDate(Date startDate) {
if (startDate != null) {
this.startDate = dateFormat.format(startDate);
} else {
this.startDate = null;
}
return this;
}

public CampaignOperation setStartDateStr(String startDate) {
this.startDate = startDate;
return this;
}

public CampaignOperation setEndDate(Date endDate) {
if (endDate != null) {
this.endDate = dateFormat.format(endDate);
} else {
this.endDate = null;
}
return this;
}

public CampaignOperation setEndDateStr(String endDate) {
this.endDate = endDate;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,6 @@ public enum CtaType {
GET_OFFER,
TRY_NOW,
NONE,
SEARCH_NOW,
@JsonEnumDefaultValue UNSUPPORTED_BY_SDK_VALUE
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@
import org.junit.Test;
import com.taboola.backstage.BackstageTestBase;

import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.Date;

Expand Down Expand Up @@ -200,4 +207,46 @@ public void testDelete() {
verify(endpointMock, times(1)).deleteCampaign(any(), any(), any());
}

@Test
public void testCreate_verifyStartEndData() throws NoSuchFieldException, IllegalAccessException, ParseException {
Date campaignEndDate = Date.from(LocalDateTime.now().plusDays(10).atZone(ZoneId.systemDefault()).toInstant());
CampaignOperation campaignOperation = generateDummyCampaignOperation();
campaignOperation.setName("dummy_name")
.setBrandingText("dummy_branding")
.setCpc(1d)
.setSpendingLimit(1d)
.setSpendingLimitModel(SpendingLimitModel.ENTIRE)
.setStartDate(new Date())
.setEndDate(campaignEndDate);
BackstageAuthentication auth = generateDummyClientCredentialsBackstageAuth();
when(endpointMock.createCampaign(auth.getToken().getAccessTokenForHeader(),"accountId", campaignOperation)).thenReturn(campaignOperation);

Campaign actual = testInstance.create(auth, "accountId", campaignOperation);
Date expectedStartDate = Date.from(LocalDate.now().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
Date expectedEndDate = Date.from(LocalDate.now().plusDays(10).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());

Field utcDateFormatField = actual.getClass().getSuperclass().getDeclaredField("EXTENDED_DATE_TIME_FORMAT");
utcDateFormatField.setAccessible(true);
String utcDateFormat = (String) utcDateFormatField.get(actual);
LocalDateTime ldNow = LocalDateTime.now();
String startDateInUtcString = ldNow.format(DateTimeFormatter.ofPattern(utcDateFormat));
String endDateInUtcString = ldNow.plusDays(10).format(DateTimeFormatter.ofPattern(utcDateFormat));

Field startDateInUtcField = actual.getClass().getSuperclass().getDeclaredField("startDateInUtc");
startDateInUtcField.setAccessible(true);
startDateInUtcField.set(actual, startDateInUtcString);
Field endDateInUtcField = actual.getClass().getSuperclass().getDeclaredField("endDateInUtc");
endDateInUtcField.setAccessible(true);
endDateInUtcField.set(actual, endDateInUtcString);

SimpleDateFormat simpleUtcDateFormat = new SimpleDateFormat(utcDateFormat);

assertEquals("Invalid start date", expectedStartDate, actual.getStartDate());
assertEquals("Invalid end date", expectedEndDate, actual.getEndDate());
assertEquals("Invalid start date in utc", simpleUtcDateFormat.parse(startDateInUtcString), actual.getStartDateInUtc());
assertEquals("Invalid end date in utc", simpleUtcDateFormat.parse(endDateInUtcString), actual.getEndDateInUtc());
assertEquals("Invalid campaignOperation", campaignOperation, actual);
verify(endpointMock, times(1)).createCampaign(any(), any(), any());
}

}