This is an automated email from the ASF dual-hosted git repository.
jkevan pushed a commit to branch visitPropertiesNewImplem
in repository https://gitbox.apache.org/repos/asf/unomi.git
The following commit(s) were added to refs/heads/visitPropertiesNewImplem by
this push:
new 758649d UNOMI-338, UNOMI-482: fix the handling of previousVisit only
and add code review changes
758649d is described below
commit 758649d9d32dc08e58536b24e2ad9587ea174454
Author: Kevan <[email protected]>
AuthorDate: Fri Jul 30 15:29:13 2021 +0200
UNOMI-338, UNOMI-482: fix the handling of previousVisit only and add code
review changes
---
.../src/test/java/org/apache/unomi/itests/BasicIT.java | 7 +++++--
.../apache/unomi/itests/PropertiesUpdateActionIT.java | 16 ++++++++++++++++
.../actions/EvaluateVisitPropertiesAction.java | 11 +++++++----
3 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/itests/src/test/java/org/apache/unomi/itests/BasicIT.java
b/itests/src/test/java/org/apache/unomi/itests/BasicIT.java
index 1977508..8d86dcb 100644
--- a/itests/src/test/java/org/apache/unomi/itests/BasicIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/BasicIT.java
@@ -80,6 +80,9 @@ public class BasicIT extends BaseIT {
private static final String FIRST_NAME = "firstName";
private static final String LAST_NAME = "lastName";
private static final String EMAIL = "email";
+ private static final String FIRST_VISIT = "firstVisit";
+ private static final String LAST_VISIT = "lastVisit";
+ private static final String PREVIOUS_VISIT = "previousVisit";
private static final String FIRST_NAME_VISITOR_1 = "firstNameVisitor1";
private static final String FIRST_NAME_VISITOR_2 = "firstNameVisitor2";
@@ -278,7 +281,7 @@ public class BasicIT extends BaseIT {
contextRequest.setSource(sourceSite);
contextRequest.setRequireSegments(false);
contextRequest.setEvents(Collections.singletonList(loginEvent));
- contextRequest.setRequiredProfileProperties(Arrays.asList(FIRST_NAME,
LAST_NAME, EMAIL, "firstVisit", "lastVisit", "previousVisit"));
+ contextRequest.setRequiredProfileProperties(Arrays.asList(FIRST_NAME,
LAST_NAME, EMAIL, FIRST_VISIT, LAST_VISIT, PREVIOUS_VISIT));
contextRequest.setSessionId(sessionId);
return contextRequest;
}
@@ -303,7 +306,7 @@ public class BasicIT extends BaseIT {
contextRequest.setSource(customPageItem);
contextRequest.setRequireSegments(false);
contextRequest.setEvents(Collections.singletonList(pageViewEvent));
- contextRequest.setRequiredProfileProperties(Arrays.asList(FIRST_NAME,
LAST_NAME, EMAIL, "firstVisit", "lastVisit", "previousVisit"));
+ contextRequest.setRequiredProfileProperties(Arrays.asList(FIRST_NAME,
LAST_NAME, EMAIL, FIRST_VISIT, LAST_VISIT, PREVIOUS_VISIT));
return contextRequest;
}
diff --git
a/itests/src/test/java/org/apache/unomi/itests/PropertiesUpdateActionIT.java
b/itests/src/test/java/org/apache/unomi/itests/PropertiesUpdateActionIT.java
index 65f69c8..1220e5f 100644
--- a/itests/src/test/java/org/apache/unomi/itests/PropertiesUpdateActionIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/PropertiesUpdateActionIT.java
@@ -297,6 +297,22 @@ public class PropertiesUpdateActionIT extends BaseIT {
Assert.assertEquals("lastVisit should be updated", eventTimeStamp3,
profile.getProperty("lastVisit"));
Assert.assertEquals("firstVisit should not be updated",
eventTimeStamp2, profile.getProperty("firstVisit"));
Assert.assertEquals("previousVisit should be updated",
eventTimeStamp1, profile.getProperty("previousVisit"));
+
+ // test event dated +5 hours: should update only previousVisit
+ eventTimeStamp = new Date();
+ ldt = LocalDateTime.ofInstant(eventTimeStamp.toInstant(),
ZoneId.systemDefault());
+ ldt = ldt.plusHours(5);
+ eventTimeStamp =
Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
+ String eventTimeStamp4 = dateFormat.format(eventTimeStamp);
+ sessionReassigned = new Event("sessionReassigned", null, profile,
null, null, profile, eventTimeStamp);
+ sessionReassigned.setPersistent(false);
+ eventService.send(sessionReassigned);
+ profileService.save(profile);
+ refreshPersistence();
+ profile = profileService.load(PROFILE_TEST_ID);
+ Assert.assertEquals("lastVisit should not be updated",
eventTimeStamp3, profile.getProperty("lastVisit"));
+ Assert.assertEquals("firstVisit should not be updated",
eventTimeStamp2, profile.getProperty("firstVisit"));
+ Assert.assertEquals("previousVisit should be updated",
eventTimeStamp4, profile.getProperty("previousVisit"));
}
@Test
diff --git
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/EvaluateVisitPropertiesAction.java
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/EvaluateVisitPropertiesAction.java
index 353e74f..f74c2ee 100644
---
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/EvaluateVisitPropertiesAction.java
+++
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/EvaluateVisitPropertiesAction.java
@@ -45,27 +45,30 @@ public class EvaluateVisitPropertiesAction implements
ActionExecutor {
Date currentEventTimeStamp = event.getTimeStamp();
Date currentProfileFirstVisit =
extractDateFromProperty(event.getProfile(), "firstVisit", dateFormat);
+ Date currentProfilePreviousVisit =
extractDateFromProperty(event.getProfile(), "previousVisit", dateFormat);
Date currentProfileLastVisit =
extractDateFromProperty(event.getProfile(), "lastVisit", dateFormat);
int result = EventService.NO_CHANGE;
- // check update firstVisit
if (currentProfileFirstVisit == null ||
currentProfileFirstVisit.after(currentEventTimeStamp)) {
+ // event < firstVisit < previousVisit < lastVisit. we need to
update firstVisit
result = PropertyHelper.setProperty(event.getProfile(),
"properties.firstVisit", dateFormat.format(currentEventTimeStamp), "alwaysSet")
?
EventService.PROFILE_UPDATED : result;
}
- // check update lastVisit and previousVisit
if (currentProfileLastVisit == null ||
currentProfileLastVisit.before(currentEventTimeStamp)) {
- // update lastVisit
+ // firstVisit < previousVisit < lastVisit < event. we need to
update lastVisit and previousVisit
if (PropertyHelper.setProperty(event.getProfile(),
"properties.lastVisit", dateFormat.format(currentEventTimeStamp), "alwaysSet"))
{
result = EventService.PROFILE_UPDATED;
- // check update previousVisit
if (currentProfileLastVisit != null) {
PropertyHelper.setProperty(event.getProfile(),
"properties.previousVisit", dateFormat.format(currentProfileLastVisit),
"alwaysSet");
}
}
+ } else if (currentProfilePreviousVisit != null &&
currentProfilePreviousVisit.before(currentEventTimeStamp)) {
+ // firstVisit < previousVisit < event < lastVisit. we need to
update previousVisit
+ result = PropertyHelper.setProperty(event.getProfile(),
"properties.previousVisit", dateFormat.format(currentEventTimeStamp),
"alwaysSet") ?
+ EventService.PROFILE_UPDATED : result;
}
return result;