This is an automated email from the ASF dual-hosted git repository.
jkevan pushed a commit to branch merge-improved2
in repository https://gitbox.apache.org/repos/asf/unomi.git
The following commit(s) were added to refs/heads/merge-improved2 by this push:
new f8b3bac2d UNOMI-748, UNOMI-749: add more tests
f8b3bac2d is described below
commit f8b3bac2df71a2a8be29a5a27049ffe43a6c25d9
Author: Kevan <[email protected]>
AuthorDate: Tue Mar 21 12:12:09 2023 +0100
UNOMI-748, UNOMI-749: add more tests
---
.../test/java/org/apache/unomi/itests/BaseIT.java | 2 +
.../org/apache/unomi/itests/ProfileMergeIT.java | 95 +++++++++++++++++++++-
2 files changed, 93 insertions(+), 4 deletions(-)
diff --git a/itests/src/test/java/org/apache/unomi/itests/BaseIT.java
b/itests/src/test/java/org/apache/unomi/itests/BaseIT.java
index 8c166b33c..f62d32d8a 100644
--- a/itests/src/test/java/org/apache/unomi/itests/BaseIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/BaseIT.java
@@ -140,6 +140,7 @@ public abstract class BaseIT extends KarafTestSupport {
protected RulesService rulesService;
protected DefinitionsService definitionsService;
protected ProfileService profileService;
+ protected PrivacyService privacyService;
protected EventService eventService;
protected BundleWatcher bundleWatcher;
protected GroovyActionsService groovyActionsService;
@@ -184,6 +185,7 @@ public abstract class BaseIT extends KarafTestSupport {
rulesService = getOsgiService(RulesService.class, 600000);
definitionsService = getOsgiService(DefinitionsService.class, 600000);
profileService = getOsgiService(ProfileService.class, 600000);
+ privacyService = getOsgiService(PrivacyService.class, 600000);
eventService = getOsgiService(EventService.class, 600000);
groovyActionsService = getOsgiService(GroovyActionsService.class,
600000);
segmentService = getOsgiService(SegmentService.class, 600000);
diff --git a/itests/src/test/java/org/apache/unomi/itests/ProfileMergeIT.java
b/itests/src/test/java/org/apache/unomi/itests/ProfileMergeIT.java
index ccc450bbe..43c0b0429 100644
--- a/itests/src/test/java/org/apache/unomi/itests/ProfileMergeIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/ProfileMergeIT.java
@@ -220,7 +220,7 @@ public class ProfileMergeIT extends BaseIT {
* In case of merge, existing sessions/events from previous profileId
should be rewritten to use the new master profileId
*/
@Test
- public void
testProfileMergeOnPropertyAction_simpleMergeRewriteExistingSessionsEvents()
throws InterruptedException {
+ public void
testProfileMergeOnPropertyAction_rewriteExistingSessionsEvents() throws
InterruptedException {
Condition matchAll = new
Condition(definitionsService.getConditionType("matchAllCondition"));
// create rule
createAndWaitForRule(createMergeOnPropertyRule(false, "email"));
@@ -237,7 +237,7 @@ public class ProfileMergeIT extends BaseIT {
eventProfile.setProperty("email", "[email protected]");
profileService.save(eventProfile);
- // create 5 sessions and 5 events for master profile.
+ // create 5 past sessions and 5 past events.
List<Session> sessionsToBeRewritten = new ArrayList<>();
List<Event> eventsToBeRewritten = new ArrayList<>();
for (int i = 1; i <= 5; i++) {
@@ -250,8 +250,16 @@ public class ProfileMergeIT extends BaseIT {
persistenceService.save(sessionToBeRewritten);
persistenceService.save(eventToBeRewritten);
}
- keepTrying("Wait for sessions and events to be persisted", () ->
persistenceService.queryCount(matchAll, Session.ITEM_TYPE) +
persistenceService.queryCount(matchAll, Event.ITEM_TYPE),
- (count) -> count == 10, DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
+ for (Session session : sessionsToBeRewritten) {
+ keepTrying("Wait for session: " + session.getItemId() + " to be
indexed",
+ () -> persistenceService.query("itemId",
session.getItemId(), null, Session.class),
+ (list) -> list.size() == 1, DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
+ }
+ for (Event event : eventsToBeRewritten) {
+ keepTrying("Wait for event: " + event.getItemId() + " to be
indexed",
+ () -> persistenceService.query("itemId",
event.getItemId(), null, Event.class),
+ (list) -> list.size() == 1, DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
+ }
keepTrying("Profile with id masterProfileID not found in the required
time", () -> profileService.load("masterProfileID"),
Objects::nonNull, DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
keepTrying("Profile with id eventProfileID not found in the required
time", () -> profileService.load("eventProfileID"),
@@ -294,6 +302,85 @@ public class ProfileMergeIT extends BaseIT {
}
}
+ /**
+ * If master profile is flagged as anonymous profile, then after the merge
all past sessions/events should be anonymized
+ */
+ @Test
+ public void
testProfileMergeOnPropertyAction_rewriteExistingSessionsEventsAnonymous()
throws InterruptedException {
+ Condition matchAll = new
Condition(definitionsService.getConditionType("matchAllCondition"));
+ // create rule
+ createAndWaitForRule(createMergeOnPropertyRule(false, "email"));
+
+ // create master profile
+ Profile masterProfile = new Profile();
+ masterProfile.setItemId("masterProfileID");
+ masterProfile.setProperty("email", "[email protected]");
+ masterProfile.setSystemProperty("mergeIdentifier",
"[email protected]");
+ profileService.save(masterProfile);
+ privacyService.setRequireAnonymousBrowsing(masterProfile.getItemId(),
true, null);
+
+ Profile eventProfile = new Profile();
+ eventProfile.setItemId("eventProfileID");
+ eventProfile.setProperty("email", "[email protected]");
+ profileService.save(eventProfile);
+
+ // create 5 sessions and 5 events for master profile.
+ List<Session> sessionsToBeRewritten = new ArrayList<>();
+ List<Event> eventsToBeRewritten = new ArrayList<>();
+ for (int i = 1; i <= 5; i++) {
+ Session sessionToBeRewritten = new Session("simpleSession_"+ i,
eventProfile, new Date(), null);
+ sessionsToBeRewritten.add(sessionToBeRewritten);
+ Event eventToBeRewritten = new Event("view", sessionToBeRewritten,
eventProfile, null, null, null, new Date());
+ eventsToBeRewritten.add(eventToBeRewritten);
+
+ persistenceService.save(sessionToBeRewritten);
+ persistenceService.save(eventToBeRewritten);
+ }
+ for (Session session : sessionsToBeRewritten) {
+ keepTrying("Wait for session: " + session.getItemId() + " to be
indexed",
+ () -> persistenceService.query("itemId",
session.getItemId(), null, Session.class),
+ (list) -> list.size() == 1, DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
+ }
+ for (Event event : eventsToBeRewritten) {
+ keepTrying("Wait for event: " + event.getItemId() + " to be
indexed",
+ () -> persistenceService.query("itemId",
event.getItemId(), null, Event.class),
+ (list) -> list.size() == 1, DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
+ }
+ keepTrying("Profile with id masterProfileID (should required anonymous
browsing) not found in the required time",
+ () -> profileService.load("masterProfileID"),
+ profile -> profile != null &&
privacyService.isRequireAnonymousBrowsing(profile), DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
+ keepTrying("Profile with id eventProfileID not found in the required
time", () -> profileService.load("eventProfileID"),
+ Objects::nonNull, DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
+
+ // Trigger the merge
+ Session simpleSession = new Session("simpleSession", eventProfile, new
Date(), null);
+ Event mergeEvent = new Event(TEST_EVENT_TYPE, simpleSession,
eventProfile, null, null, eventProfile, new Date());
+ eventService.send(mergeEvent);
+
+ // Check that master profile is now used, but anonymous browsing is
respected:
+ Assert.assertNotNull(mergeEvent.getProfile());
+ Assert.assertEquals("masterProfileID",
mergeEvent.getProfile().getItemId()); // We still have profile in the event
+ Assert.assertNull(mergeEvent.getProfileId()); // But profileId prop is
null due to anonymous browsing
+ Assert.assertNull(mergeEvent.getSession().getProfile().getItemId());
// Same for the event session
+ Assert.assertNull(mergeEvent.getSession().getProfileId());
+ Assert.assertEquals(mergeEvent.getSession().getProfileId(),
mergeEvent.getProfileId());
+ Assert.assertEquals("[email protected]",
mergeEvent.getProfile().getSystemProperties().get("mergeIdentifier"));
+
+ // Check events are correctly rewritten (Anonymous !)
+ for (Event event : eventsToBeRewritten) {
+ keepTrying("Wait for event: " + event.getItemId() + " profileId to
be rewritten for NULL due to anonymous browsing",
+ () -> persistenceService.load(event.getItemId(),
Event.class),
+ (loadedEvent) -> loadedEvent.getProfileId() == null,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
+ }
+
+ // Check sessions are correctly rewritten (Anonymous !)
+ for (Session session : sessionsToBeRewritten) {
+ keepTrying("Wait for session: " + session.getItemId() + "
profileId to be rewritten for NULL due to anonymous browsing",
+ () -> persistenceService.load(session.getItemId(),
Session.class),
+ (loadedSession) -> loadedSession.getProfileId() == null,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
+ }
+ }
+
/**
* Personalization strategy have a specific handling during the merge of
two profiles
* This test is here to ensure this specific behavior is correctly working.