diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
index e1cd13c..09af40f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
@@ -20,7 +20,6 @@
 import com.google.gerrit.entities.RefNames;
 import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.gerrit.extensions.common.GitPerson;
-import com.google.gerrit.extensions.events.RevisionCreatedListener;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountResolver;
 import com.google.gerrit.server.account.AccountResolver.UnresolvableAccountException;
@@ -34,6 +33,7 @@
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelCompositionDefinedEventInfo;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeCreatedEventInfo;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeSubmittedEventInfo;
+import com.googlesource.gerrit.plugins.eventseiffel.parsing.PatchsetCreationData;
 import java.io.IOException;
 import java.util.List;
 import java.util.Optional;
@@ -68,20 +68,20 @@
   }
 
   public EiffelSourceChangeCreatedEventInfo toScc(
-      RevisionCreatedListener.Event event, List<UUID> parentEventIds)
+      PatchsetCreationData data, List<UUID> parentEventIds)
       throws ConfigInvalidException, IOException {
-    PersonInfo author = toPersonInfo(event.getRevision().commit.author);
+    PersonInfo author = toPersonInfo(data.author);
     return eventFactoryProvider
         .get()
         .createScc(
             author.name,
             author.email,
             author.username,
-            event.getChange().project,
-            event.getChange().branch,
-            event.getRevision().commit.commit,
-            event.getChange()._number,
-            event.getWhen().getTime(),
+            data.project,
+            data.branch,
+            data.commitId,
+            data.changeNumber,
+            data.createdAt,
             parentEventIds);
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
index faa1fed..3285993 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
@@ -14,19 +14,19 @@
 package com.googlesource.gerrit.plugins.eventseiffel.parsing;
 
 import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.extensions.events.RevisionCreatedListener.Event;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.SourceChangeEventKey;
 
 public interface EiffelEventParser {
 
   /**
-   * Creates SCC events for all commits reachable from the commit that triggered the {@link Event}
-   * event.
+   * Creates SCC events for all commits reachable from the commit that triggered the patchset
+   * creation described by the {@link PatchsetCreationData} data.
    *
-   * @param event - Describes a revision from which to create SCC events.
+   * @param data - Describes a patchset creation from which to create SCC events.
    * @throws EventParsingException- When event-creation fails.
    */
-  void createAndScheduleSccFromEvent(Event event) throws EventParsingException;
+  void createAndScheduleSccFromPatchsetCreation(PatchsetCreationData data)
+      throws EventParsingException;
 
   /**
    * Creates SCC events for all commits reachable from branchRef. I.e. create SCCs for already
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserImpl.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserImpl.java
index f4db832..b2320b5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserImpl.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserImpl.java
@@ -28,8 +28,6 @@
 import com.google.gerrit.entities.RefNames;
 import com.google.gerrit.exceptions.NoSuchEntityException;
 import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.extensions.common.CommitInfo;
-import com.google.gerrit.extensions.events.RevisionCreatedListener.Event;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -92,29 +90,27 @@
    * @see com.googlesource.gerrit.plugins.eventseiffel.parsing.EiffelEventParser#createAndScheduleSccFromEvent(com.google.gerrit.extensions.events.RevisionCreatedListener.Event)
    */
   @Override
-  public void createAndScheduleSccFromEvent(Event event) throws EventParsingException {
-    CommitInfo commit = event.getRevision().commit;
+  public void createAndScheduleSccFromPatchsetCreation(PatchsetCreationData data)
+      throws EventParsingException {
     SourceChangeEventKey scc =
-        SourceChangeEventKey.sccKey(
-            event.getChange().project, event.getChange().branch, commit.commit);
+        SourceChangeEventKey.sccKey(data.project, data.branch, data.commitId);
     try {
       if (eventHub.getExistingId(scc).isPresent()) {
         logger.atWarning().log(
-            "Event %s already pushed for %d/%d",
-            scc, event.getChange()._number, event.getRevision()._number);
+            "Event %s already pushed for %d/%d", scc, data.changeNumber, data.patchsetNumber);
         return;
       }
       List<UUID> parentUuids = Lists.newArrayList();
-      for (CommitInfo parent : commit.parents) {
-        Optional<UUID> parentUuid = eventHub.getExistingId(scc.copy(parent.commit));
+      for (String parentId : data.parentCommitIds) {
+        Optional<UUID> parentUuid = eventHub.getExistingId(scc.copy(parentId));
         if (parentUuid.isPresent()) {
           parentUuids.add(parentUuid.get());
         }
       }
 
       /* Eiffel events have been scheduled or published for all parents. */
-      if (parentUuids.size() == commit.parents.size()) {
-        pushToHub(mapper.toScc(event, parentUuids));
+      if (parentUuids.size() == data.parentCommitIds.size()) {
+        pushToHub(mapper.toScc(data, parentUuids));
       } else {
         createAndScheduleMissingSccs(scc);
       }
@@ -126,9 +122,9 @@
       throw new EventParsingException(
           e,
           "Event creation failed for: %s, %s, %s to SCC.",
-          event.getChange().project,
-          event.getChange().branch,
-          event.getRevision().commit.commit);
+          data.project,
+          data.branch,
+          data.commitId);
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
index 01d5233..7fd9f25 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
@@ -182,9 +182,9 @@
       try {
         switch (task.type) {
           case SCC:
-            if (task.patchsetCreatedEvent != null) {
+            if (task.patchsetCreationData != null) {
               append = ", from event, ";
-              eventParser.createAndScheduleSccFromEvent(task.patchsetCreatedEvent);
+              eventParser.createAndScheduleSccFromPatchsetCreation(task.patchsetCreationData);
             } else if (task.commitId != null) {
               eventParser.createAndScheduleSccFromCommit(
                   task.repoName, task.branchRefOrTag, task.commitId);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueueTask.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueueTask.java
index 245c4b3..b35ff1b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueueTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueueTask.java
@@ -46,7 +46,7 @@
     private Long _updateTime = null;
     private Boolean _force = null;
     private String _previousTip = null;
-    private RevisionCreatedListener.Event _patchsetCreatedEvent;
+    private PatchsetCreationData _patchsetCreationData;
 
     private Builder(EiffelEventType type, String repoName, String branchRefOrTag) {
       this._type = type;
@@ -55,7 +55,7 @@
     }
 
     private Builder(RevisionCreatedListener.Event event) {
-      this._patchsetCreatedEvent = event;
+      this._patchsetCreationData = new PatchsetCreationData(event);
     }
 
     public Builder commit(String commitId) {
@@ -84,8 +84,8 @@
     }
 
     public ParsingQueueTask build() {
-      if (this._patchsetCreatedEvent != null) {
-        return new ParsingQueueTask(_patchsetCreatedEvent);
+      if (this._patchsetCreationData != null) {
+        return new ParsingQueueTask(_patchsetCreationData);
       }
       return new ParsingQueueTask(
           this._type,
@@ -107,7 +107,7 @@
   final Long updateTime;
   final Boolean force;
   final String previousTip;
-  final RevisionCreatedListener.Event patchsetCreatedEvent;
+  final PatchsetCreationData patchsetCreationData;
 
   private ParsingQueueTask(
       EiffelEventType type,
@@ -129,19 +129,19 @@
     this.updateTime = updateTime;
     this.previousTip = previousTip;
     this.force = force;
-    this.patchsetCreatedEvent = null;
+    this.patchsetCreationData = null;
   }
 
-  private ParsingQueueTask(RevisionCreatedListener.Event patchsetCreatedEvent) {
+  private ParsingQueueTask(PatchsetCreationData data) {
     this.type = EiffelEventType.SCC;
-    this.repoName = patchsetCreatedEvent.getChange().project;
-    this.branchRefOrTag = patchsetCreatedEvent.getChange().branch;
-    this.commitId = patchsetCreatedEvent.getRevision().commit.commit;
+    this.repoName = data.project;
+    this.branchRefOrTag = data.branch;
+    this.commitId = data.commitId;
     this.updater = null;
     this.updateTime = null;
     this.previousTip = null;
     this.force = null;
-    this.patchsetCreatedEvent = patchsetCreatedEvent;
+    this.patchsetCreationData = data;
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/PatchsetCreationData.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/PatchsetCreationData.java
new file mode 100644
index 0000000..c0ebb7e
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/PatchsetCreationData.java
@@ -0,0 +1,44 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.googlesource.gerrit.plugins.eventseiffel.parsing;
+
+import com.google.gerrit.extensions.common.GitPerson;
+import com.google.gerrit.extensions.events.RevisionCreatedListener;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class PatchsetCreationData {
+  public final GitPerson author;
+  public final String project;
+  public final String branch;
+  public final String commitId;
+  public final List<String> parentCommitIds;
+  public final int changeNumber;
+  public final int patchsetNumber;
+  public final long createdAt;
+
+  public PatchsetCreationData(RevisionCreatedListener.Event event) {
+    this.author = event.getRevision().commit.author;
+    this.project = event.getChange().project;
+    this.branch = event.getChange().branch;
+    this.commitId = event.getRevision().commit.commit;
+    this.parentCommitIds =
+        event.getRevision().commit.parents.stream()
+            .map(ci -> ci.commit)
+            .collect(Collectors.toList());
+    this.changeNumber = event.getChange()._number;
+    this.patchsetNumber = event.getRevision()._number;
+    this.createdAt = event.getWhen().getTime();
+  }
+}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/TestEventPublisher.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/TestEventPublisher.java
index 37e93f2..7b4569e 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/TestEventPublisher.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/TestEventPublisher.java
@@ -16,6 +16,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNull;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
@@ -32,6 +33,9 @@
 
 @Ignore
 public class TestEventPublisher implements Runnable, EiffelEventHub.Consumer {
+  /* Milliseconds after which the publisher-thread is expected to have handled the event. */
+  public static int MILLIS_TO_WAIT = 500;
+
   Map<EventKey, EiffelEvent> publishedEvents = Maps.newConcurrentMap();
   List<EventKey> actualOrder = Lists.newArrayList();
   boolean keepTrying = true;
@@ -88,8 +92,20 @@
         keys.size());
   }
 
-  public EiffelEvent getPublished(EventKey key) {
+  public void assertNotPublished(EventKey key, String message) {
     waitForIt();
+    EiffelEvent event = publishedEvents.getOrDefault(key, null);
+    assertNull(message, event);
+  }
+
+  public EiffelEvent getPublished(EventKey key) {
+    int wait = 50;
+    for (int totalWait = 0; totalWait < MILLIS_TO_WAIT; totalWait += wait) {
+      if (publishedEvents.containsKey(key)) {
+        return publishedEvents.get(key);
+      }
+      waitFor(wait);
+    }
     return publishedEvents.getOrDefault(key, null);
   }
 
@@ -106,10 +122,13 @@
     pause = true;
   }
 
-  /* Give the publisher-thread some time to handle events. */
   private void waitForIt() {
+    waitFor(MILLIS_TO_WAIT);
+  }
+
+  private void waitFor(int millis) {
     try {
-      Thread.sleep(500);
+      Thread.sleep(millis);
     } catch (InterruptedException e) {
       e.printStackTrace();
     }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
index 0527b19..4d0d44d 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
@@ -18,7 +18,6 @@
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCS;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 
 import com.google.common.collect.Lists;
 import com.google.gerrit.acceptance.PushOneCommit;
@@ -87,8 +86,8 @@
 
   @Test
   public void patchSetCreatedForMetaDoesntResultsInEvent() throws Exception {
-    EiffelEvent event = publisher.getPublished(toSccKey(createMetaConfigChange()));
-    assertNull("refs/meta/config change shouldn't result in event", event);
+    publisher.assertNotPublished(
+        toSccKey(createMetaConfigChange()), "refs/meta/config change shouldn't result in event");
   }
 
   @Test
@@ -154,49 +153,45 @@
   @Test
   public void patchSetSubmittedForMetaDoesntResultsInEvent() throws Exception {
     PushOneCommit.Result res = createMetaConfigChange();
-    SourceChangeEventKey sccKey = toSccKey(res);
-    EiffelEvent sccEvent = publisher.getPublished(sccKey);
-    assertNull("refs/meta/config change shouldn't result in event", sccEvent);
+    publisher.assertNotPublished(
+        toSccKey(res), "refs/meta/config change shouldn't result in event");
+
     merge(res);
-    EiffelEvent scsEvent = publisher.getPublished(sccKey.copy(SCS));
-    assertNull("refs/meta/config change shouldn't result in event", scsEvent);
+    publisher.assertNotPublished(
+        toScsKey(res), "refs/meta/config change shouldn't result in event");
   }
 
   @Test
   public void noEventsCreatedWhenDisabled() throws Exception {
     TestEventListenersConfigProvider.disable();
     PushOneCommit.Result res = createChange();
-    SourceChangeEventKey sccKey = toSccKey(res);
-    EiffelEvent sccEvent = publisher.getPublished(sccKey);
-    assertNull("Patch-set created shouldn't result in event when disabled", sccEvent);
+    publisher.assertNotPublished(
+        toSccKey(res), "Patch-set created shouldn't result in event when disabled");
     merge(res);
-    EiffelEvent scsEvent = publisher.getPublished(sccKey.copy(SCS));
-    assertNull("Patch-set submitted shouldn't result in event when disabled", scsEvent);
+    publisher.assertNotPublished(
+        toScsKey(res), "Patch-set submitted shouldn't result in event when disabled");
   }
 
   @Test
   public void noEventsCreatedWhenRefIsBlocked() throws Exception {
     TestEventsFilterProvider.setBlockedRefPatterns("refs/heads/master");
     PushOneCommit.Result res = createChange();
-    SourceChangeEventKey sccKey = toSccKey(res);
-    EiffelEvent sccEvent = publisher.getPublished(sccKey);
-    assertNull("Patch-set created shouldn't result in event when target ref is blocked", sccEvent);
+    publisher.assertNotPublished(
+        toSccKey(res), "Patch-set created shouldn't result in event when target ref is blocked");
     merge(res);
-    EiffelEvent scsEvent = publisher.getPublished(sccKey.copy(SCS));
-    assertNull(
-        "Patch-set submitted shouldn't result in event when target ref is blocked", scsEvent);
+    publisher.assertNotPublished(
+        toScsKey(res), "Patch-set submitted shouldn't result in event when target ref is blocked");
   }
 
   @Test
   public void noEventsCreatedWhenProjectIsBlocked() throws Exception {
     TestEventsFilterProvider.setBlockedProjectPatterns(project.get());
     PushOneCommit.Result res = createChange();
-    SourceChangeEventKey sccKey = toSccKey(res);
-    EiffelEvent sccEvent = publisher.getPublished(sccKey);
-    assertNull("Patch-set created shouldn't result in event when project is blocked", sccEvent);
+    publisher.assertNotPublished(
+        toSccKey(res), "Patch-set created shouldn't result in event when project is blocked");
     merge(res);
-    EiffelEvent scsEvent = publisher.getPublished(sccKey.copy(SCS));
-    assertNull("Patch-set submitted shouldn't result in event when project is blocked", scsEvent);
+    publisher.assertNotPublished(
+        toScsKey(res), "Patch-set submitted shouldn't result in event when project is blocked");
   }
 
   @Test
@@ -237,16 +232,13 @@
     String tagName = createTagRef(true).substring(RefNames.REFS_TAGS.length());
 
     EventKey artcKey = ArtifactEventKey.create(tagPURL(project.get(), tagName));
-    EiffelEvent artcEvent = publisher.getPublished(artcKey);
-    assertNull("Publisher found ARTC event", artcEvent);
+    publisher.assertNotPublished(artcKey, "Publisher found ARTC event");
 
     EventKey cdKey = CompositionDefinedEventKey.create(tagCompositionName(project.get()), tagName);
-    EiffelEvent cdEvent = publisher.getPublished(cdKey);
-    assertNull("Publisher found CD event", cdEvent);
+    publisher.assertNotPublished(cdKey, "Publisher found CD event");
 
     EventKey scsKey = SourceChangeEventKey.scsKey(project.get(), "master", getMaster());
-    EiffelEvent scsEvent = publisher.getPublished(scsKey);
-    assertNull("Publisher found SCS event", scsEvent);
+    publisher.assertNotPublished(scsKey, "Publisher found SCS event");
   }
 
   @Test
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
index ee2b553..94301f7 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
@@ -48,6 +48,7 @@
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelPersonInfo;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeCreatedEventInfo;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeSubmittedEventInfo;
+import com.googlesource.gerrit.plugins.eventseiffel.parsing.PatchsetCreationData;
 import java.net.URLEncoder;
 import java.sql.Timestamp;
 import java.time.Instant;
@@ -82,8 +83,9 @@
   }
 
   @Test
-  public void sccFromRevisionCreatedEvent() throws Exception {
-    EiffelSourceChangeCreatedEventInfo event = mapper.toScc(new TestEvent(), PARENT_UUIDS);
+  public void sccFromPatchsetCreationData() throws Exception {
+    EiffelSourceChangeCreatedEventInfo event =
+        mapper.toScc(new PatchsetCreationData(new TestEvent()), PARENT_UUIDS);
     assertPersonInfo(event.data.author, AUTHOR_NAME, AUTHOR_EMAIL, null);
     assertGitIdentifier(event.data.gitIdentifier, REPO_NAME, BRANCH, COMMIT_SHA1);
     assertChangeInfo(event.data.change, String.valueOf(CHANGE_NUMBER), REPO_NAME, COMMIT_SHA1);
@@ -342,6 +344,7 @@
       author.email = AUTHOR_EMAIL;
       author.name = AUTHOR_NAME;
       cInfo.author = author;
+      cInfo.parents = List.of();
       RevisionInfo rInfo = new RevisionInfo();
       rInfo.commit = cInfo;
       return rInfo;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
index 0923634..8c9ed72 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
@@ -21,7 +21,6 @@
 import com.google.gerrit.acceptance.UseLocalDisk;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.extensions.events.RevisionCreatedListener.Event;
 import com.google.gerrit.server.git.ProjectRunnable;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provider;
@@ -190,7 +189,7 @@
     public NoOpEventParser() {}
 
     @Override
-    public void createAndScheduleSccFromEvent(Event event) {}
+    public void createAndScheduleSccFromPatchsetCreation(PatchsetCreationData data) {}
 
     @Override
     public void createAndScheduleSccFromBranch(String repoName, String branchRef) {}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/rest/EventsEiffelRestIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/rest/EventsEiffelRestIT.java
index 691acf1..e1c4598 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/rest/EventsEiffelRestIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/rest/EventsEiffelRestIT.java
@@ -18,7 +18,6 @@
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCC;
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCS;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 
 import com.google.gerrit.acceptance.PushOneCommit;
 import com.google.gerrit.acceptance.RestResponse;
@@ -84,9 +83,8 @@
   @Test
   public void createSccsAsNonAdminForbidden() throws Exception {
     createSccs("master", false).assertStatus(403);
-    SourceChangeEventKey scc = keyFromMaster(SCC);
-    EiffelEvent event = publisher.getPublished(scc);
-    assertNull(event);
+    publisher.assertNotPublished(
+        keyFromMaster(SCC), "SCC event creation should be blocked for non admin");
   }
 
   @Test
@@ -111,9 +109,8 @@
   @Test
   public void createScssAsNonAdminForbidden() throws Exception {
     createScss("master", false).assertStatus(403);
-    SourceChangeEventKey scs = keyFromMaster(SCS);
-    EiffelEvent event = publisher.getPublished(scs);
-    assertNull(event);
+    publisher.assertNotPublished(
+        keyFromMaster(SCS), "SCS event creation should be blocked for non admin");
   }
 
   @Test
@@ -134,9 +131,9 @@
   public void createArtcAsNonAdminForbidden() throws Exception {
     String tagName = createTagRef(true).substring(RefNames.REFS_TAGS.length());
     createArtcs(tagName, false).assertStatus(403);
-    ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), tagName));
-    EiffelEvent event = publisher.getPublished(artc);
-    assertNull(event);
+    publisher.assertNotPublished(
+        ArtifactEventKey.create(tagPURL(project.get(), tagName)),
+        "ArtC event creation should be blocked for non admin");
   }
 
   @Test
