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;

Reply via email to