You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2026/07/15 10:17:43 UTC
(james-project) 28/39: [BUILD] JmapPreviewContract: isolate using different users
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 <hq...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org