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 3294aacee39dd122c5d3a63a1306eda8fc15a600
Author: Quan Tran <[email protected]>
AuthorDate: Tue Jul 14 12:08:08 2026 +0700

    [BUILD] ProvisioningContract: isolate using different users
    
    Use a generated Basic-auth user and account per test while retaining the 
fixed signed JWT fixture. Reuse servers for Memory, Postgres, and Distributed 
implementors.
---
 .../distributed/DistributedProvisioningTest.java   |  2 +-
 .../rfc8621/contract/ProvisioningContract.scala    | 38 +++++++++++++++++++---
 .../rfc8621/memory/MemoryProvisioningTest.java     |  2 +-
 .../rfc8621/postgres/PostgresProvisioningTest.java |  2 +-
 4 files changed, 36 insertions(+), 8 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/DistributedProvisioningTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
index 132c540614..3393cf1246 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
@@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.distributed;
 
 import org.apache.james.jmap.rfc8621.contract.ProvisioningContract;
 
-public class DistributedProvisioningTest extends DistributedBase implements 
ProvisioningContract {
+public class DistributedProvisioningTest extends PerClassDistributedBase 
implements ProvisioningContract {
 
 }
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/ProvisioningContract.scala
 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ProvisioningContract.scala
index baa67e2bb3..131b6ad264 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ProvisioningContract.scala
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ProvisioningContract.scala
@@ -19,13 +19,18 @@
 
 package org.apache.james.jmap.rfc8621.contract
 
+import java.util.UUID
+import java.util.concurrent.atomic.AtomicReference
+
 import io.netty.handler.codec.http.HttpHeaderNames.ACCEPT
 import io.restassured.RestAssured.{`given`, requestSpecification}
 import io.restassured.authentication.NoAuthScheme
 import io.restassured.http.Header
 import org.apache.http.HttpStatus.SC_OK
 import org.apache.james.GuiceJamesServer
-import org.apache.james.jmap.rfc8621.contract.Fixture._
+import org.apache.james.core.Username
+import org.apache.james.jmap.core.AccountId
+import 
org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, 
AUTHORIZATION_HEADER, BOB_PASSWORD, DOMAIN, USER, USER_TOKEN, 
baseRequestSpecBuilder, toBase64}
 import org.apache.james.jmap.rfc8621.contract.tags.CategoryTags
 import org.apache.james.mailbox.DefaultMailboxes
 import org.apache.james.utils.DataProbeImpl
@@ -35,17 +40,40 @@ import org.junit.jupiter.api.{BeforeEach, Tag, Test}
 
 object ProvisioningContract {
   private val ARGUMENTS: String = "methodResponses[0][1]"
+
+  case class TestContext(bobAccountId: String, bobBasicAuthHeader: Header)
+
+  val currentContext: AtomicReference[TestContext] = new 
AtomicReference[TestContext]()
 }
 
 trait ProvisioningContract {
   import ProvisioningContract._
 
+  private def getAllMailboxesRequest(accountId: String): String =
+    s"""{
+       |  "using": [
+       |    "urn:ietf:params:jmap:core",
+       |    "urn:ietf:params:jmap:mail"],
+       |  "methodCalls": [[
+       |      "Mailbox/get",
+       |      {
+       |        "accountId": "$accountId",
+       |        "ids": null
+       |      },
+       |      "c1"]]
+       |}""".stripMargin
+
   @BeforeEach
   def setup(server: GuiceJamesServer): Unit = {
+    val bob = 
Username.fromLocalPartWithDomain(s"bob${UUID.randomUUID().toString.replace("-", 
"").take(8)}", DOMAIN)
+    val bobAccountId = AccountId.from(bob).toOption.get.id.value
+    val bobBasicAuthHeader = new Header(AUTHORIZATION_HEADER, s"Basic 
${toBase64(s"${bob.asString}:$BOB_PASSWORD")}")
+    currentContext.set(TestContext(bobAccountId, bobBasicAuthHeader))
+
     server.getProbe(classOf[DataProbeImpl])
       .fluent
       .addDomain(DOMAIN.asString)
-      .addUser(BOB.asString, BOB_PASSWORD)
+      .addUser(bob.asString, BOB_PASSWORD)
 
     requestSpecification = baseRequestSpecBuilder(server)
       .setAuth(new NoAuthScheme())
@@ -58,7 +86,7 @@ trait ProvisioningContract {
     `given`
       .header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
       .header(new Header(AUTHORIZATION_HEADER, s"Bearer $USER_TOKEN"))
-      .body(GET_ALL_MAILBOXES_REQUEST)
+      .body(getAllMailboxesRequest(currentContext.get().bobAccountId))
     .when
       .post
 
@@ -71,8 +99,8 @@ trait ProvisioningContract {
   def provisionMailboxesShouldCreateMissingMailboxes(): Unit = {
     `given`
       .header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
-      .header(BOB_BASIC_AUTH_HEADER)
-      .body(GET_ALL_MAILBOXES_REQUEST)
+      .header(currentContext.get().bobBasicAuthHeader)
+      .body(getAllMailboxesRequest(currentContext.get().bobAccountId))
     .when
       .post
     .`then`
diff --git 
a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
index 6afccc6da2..aa49474790 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
@@ -21,6 +21,6 @@ package org.apache.james.jmap.rfc8621.memory;
 
 import org.apache.james.jmap.rfc8621.contract.ProvisioningContract;
 
-class MemoryProvisioningTest extends MemoryBase implements 
ProvisioningContract {
+class MemoryProvisioningTest extends PerClassMemoryBase implements 
ProvisioningContract {
 
 }
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/PostgresProvisioningTest.java
 
b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresProvisioningTest.java
index 83877ba90e..00e09b2139 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresProvisioningTest.java
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresProvisioningTest.java
@@ -21,5 +21,5 @@ package org.apache.james.jmap.rfc8621.postgres;
 
 import org.apache.james.jmap.rfc8621.contract.ProvisioningContract;
 
-public class PostgresProvisioningTest extends PostgresBase implements 
ProvisioningContract {
+public class PostgresProvisioningTest extends PerClassPostgresBase implements 
ProvisioningContract {
 }


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

Reply via email to