This is an automated email from the ASF dual-hosted git repository.

chibenwa pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit d622e87867f8bd79fbc5b832f7d768693efd80e7
Author: Quan Tran <[email protected]>
AuthorDate: Mon Jul 13 22:58:39 2026 +0700

    [BUILD] JmapPreviewContract: isolate using different users
---
 .../distributed/DistributedJmapPreviewTest.java    |  2 +-
 .../rfc8621/contract/JmapPreviewContract.scala     | 50 ++++++++++++++--------
 .../rfc8621/postgres/PostgresJmapPreviewTest.java  |  2 +-
 3 files changed, 33 insertions(+), 21 deletions(-)

diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java
index 343a755662..a2b470caeb 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedJmapPreviewTest.java
@@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.distributed;
 
 import org.apache.james.jmap.rfc8621.contract.JmapPreviewContract;
 
-public class DistributedJmapPreviewTest extends DistributedBase implements 
JmapPreviewContract {
+public class DistributedJmapPreviewTest extends PerClassDistributedBase 
implements JmapPreviewContract {
 
 }
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala
 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala
index 1a56137bb9..fe74cab039 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapPreviewContract.scala
@@ -22,7 +22,9 @@ package org.apache.james.jmap.rfc8621.contract
 import java.nio.charset.StandardCharsets
 import java.time.Duration
 import java.util.Optional
+import java.util.UUID
 import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicReference
 
 import com.google.common.collect.ImmutableList
 import com.google.inject.AbstractModule
@@ -30,9 +32,10 @@ import com.google.inject.multibindings.Multibinder
 import io.restassured.RestAssured.requestSpecification
 import jakarta.inject.Inject
 import org.apache.james.GuiceJamesServer
+import org.apache.james.core.Username
 import 
org.apache.james.jmap.api.projections.{MessageFastViewPrecomputedProperties, 
MessageFastViewProjection}
 import org.apache.james.jmap.http.UserCredential
-import org.apache.james.jmap.rfc8621.contract.Fixture.{ANDRE, BOB, 
BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder}
+import org.apache.james.jmap.rfc8621.contract.Fixture.{BOB_PASSWORD, DOMAIN, 
authScheme, baseRequestSpecBuilder}
 import 
org.apache.james.jmap.rfc8621.contract.JmapPreviewContract.createTestMessage
 import org.apache.james.mailbox.DefaultMailboxes
 import org.apache.james.mailbox.MessageManager.AppendCommand
@@ -60,18 +63,26 @@ class JmapPreviewProbeModule extends AbstractModule {
 }
 
 object JmapPreviewContract {
-  private def createTestMessage: Message = Message.Builder
+  def createTestMessage(sender: Username): Message = Message.Builder
     .of
     .setSubject("test")
-    .setSender(ANDRE.asString())
-    .setFrom(ANDRE.asString())
+    .setSender(sender.asString())
+    .setFrom(sender.asString())
     .setSubject("World domination \r\n" +
       " and this is also part of the header")
     .setBody("testmail", StandardCharsets.UTF_8)
     .build
 }
 
+object JmapPreviewContractContext {
+  val currentUsername: AtomicReference[Username] = new 
AtomicReference[Username]()
+}
+
 trait JmapPreviewContract {
+  import JmapPreviewContractContext.currentUsername
+
+  def bobUsername: Username = currentUsername.get()
+
   private lazy val slowPacedPollInterval = Duration.ofMillis(100)
   private lazy val calmlyAwait = Awaitility.`with`
     .pollInterval(slowPacedPollInterval)
@@ -81,57 +92,58 @@ trait JmapPreviewContract {
 
   @BeforeEach
   def setUp(server: GuiceJamesServer): Unit = {
+    currentUsername.set(Username.of("user" + 
UUID.randomUUID().toString.replace("-", "").take(8) + "@" + DOMAIN.asString))
     server.getProbe(classOf[DataProbeImpl])
       .fluent
       .addDomain(DOMAIN.asString)
-      .addUser(BOB.asString, BOB_PASSWORD)
+      .addUser(bobUsername.asString, BOB_PASSWORD)
 
     requestSpecification = baseRequestSpecBuilder(server)
-      .setAuth(authScheme(UserCredential(BOB, BOB_PASSWORD)))
+      .setAuth(authScheme(UserCredential(bobUsername, BOB_PASSWORD)))
       .build
   }
 
   @Test
   def jmapPreviewShouldBeWellRemovedWhenDeleteMailbox(server: 
GuiceJamesServer): Unit = {
     val mailboxProbe = server.getProbe(classOf[MailboxProbeImpl])
-    mailboxProbe.createMailbox("#private", BOB.asString, 
DefaultMailboxes.INBOX)
+    mailboxProbe.createMailbox("#private", bobUsername.asString, 
DefaultMailboxes.INBOX)
 
-    val messageId = mailboxProbe.appendMessage(BOB.asString, 
MailboxPath.inbox(BOB), AppendCommand.builder()
-        .build(createTestMessage))
+    val messageId = mailboxProbe.appendMessage(bobUsername.asString, 
MailboxPath.inbox(bobUsername), AppendCommand.builder()
+        .build(createTestMessage(bobUsername)))
       .getMessageId
 
     val messageFastViewProjectionProbe: MessageFastViewProjectionProbe = 
server.getProbe(classOf[MessageFastViewProjectionProbe])
     awaitAtMostTenSeconds.until(() => 
messageFastViewProjectionProbe.retrieve(messageId).isPresent)
 
-    mailboxProbe.deleteMailbox("#private", BOB.asString, 
DefaultMailboxes.INBOX)
+    mailboxProbe.deleteMailbox("#private", bobUsername.asString, 
DefaultMailboxes.INBOX)
     awaitAtMostTenSeconds.until(() => 
messageFastViewProjectionProbe.retrieve(messageId).isEmpty)
   }
 
   @Test
   def jmapPreviewShouldBeWellRemovedWhenDeleteMessage(server: 
GuiceJamesServer): Unit = {
     val mailboxProbe = server.getProbe(classOf[MailboxProbeImpl])
-    mailboxProbe.createMailbox("#private", BOB.asString, 
DefaultMailboxes.INBOX)
+    mailboxProbe.createMailbox("#private", bobUsername.asString, 
DefaultMailboxes.INBOX)
 
-    val composedMessageId = mailboxProbe.appendMessage(BOB.asString, 
MailboxPath.inbox(BOB), AppendCommand.builder()
-        .build(createTestMessage))
+    val composedMessageId = mailboxProbe.appendMessage(bobUsername.asString, 
MailboxPath.inbox(bobUsername), AppendCommand.builder()
+        .build(createTestMessage(bobUsername)))
 
     val messageFastViewProjectionProbe: MessageFastViewProjectionProbe = 
server.getProbe(classOf[MessageFastViewProjectionProbe])
     awaitAtMostTenSeconds.until(() => 
messageFastViewProjectionProbe.retrieve(composedMessageId.getMessageId).isPresent)
 
-    mailboxProbe.deleteMessage(ImmutableList.of(composedMessageId.getUid), 
MailboxPath.inbox(BOB), BOB)
+    mailboxProbe.deleteMessage(ImmutableList.of(composedMessageId.getUid), 
MailboxPath.inbox(bobUsername), bobUsername)
     awaitAtMostTenSeconds.until(() => 
messageFastViewProjectionProbe.retrieve(composedMessageId.getMessageId).isEmpty)
   }
 
   @Test
   def shouldKeepPreviewWhenExpungedAndStillReferenced(server: 
GuiceJamesServer): Unit = {
     val mailboxProbe = server.getProbe(classOf[MailboxProbeImpl])
-    mailboxProbe.createMailbox("#private", BOB.asString, 
DefaultMailboxes.INBOX)
-    mailboxProbe.createMailbox("#private", BOB.asString, "otherBox")
+    mailboxProbe.createMailbox("#private", bobUsername.asString, 
DefaultMailboxes.INBOX)
+    mailboxProbe.createMailbox("#private", bobUsername.asString, "otherBox")
 
-    val composedMessageId = mailboxProbe.appendMessage(BOB.asString, 
MailboxPath.inbox(BOB), AppendCommand.builder()
-      .build(createTestMessage))
+    val composedMessageId = mailboxProbe.appendMessage(bobUsername.asString, 
MailboxPath.inbox(bobUsername), AppendCommand.builder()
+      .build(createTestMessage(bobUsername)))
 
-    mailboxProbe.moveMessages(MessageRange.all, MailboxPath.inbox(BOB), 
MailboxPath.forUser(BOB, "otherBox"), BOB)
+    mailboxProbe.moveMessages(MessageRange.all, 
MailboxPath.inbox(bobUsername), MailboxPath.forUser(bobUsername, "otherBox"), 
bobUsername)
 
     val messageFastViewProjectionProbe: MessageFastViewProjectionProbe = 
server.getProbe(classOf[MessageFastViewProjectionProbe])
     awaitAtMostTenSeconds.until(() => 
messageFastViewProjectionProbe.retrieve(composedMessageId.getMessageId).isPresent)
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java
index 9e954d91f7..972278582b 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresJmapPreviewTest.java
@@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.postgres;
 
 import org.apache.james.jmap.rfc8621.contract.JmapPreviewContract;
 
-public class PostgresJmapPreviewTest extends PostgresBase implements 
JmapPreviewContract {
+public class PostgresJmapPreviewTest extends PerClassPostgresBase implements 
JmapPreviewContract {
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to