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 2398f98fbc5277580d5d7ceb2bf4f493b409ed65 Author: Quan Tran <[email protected]> AuthorDate: Mon Jul 13 19:36:30 2026 +0700 [BUILD] EmailChangesMethodContract: isolate using different users --- .../DistributedEmailChangeMethodTest.java | 1 + .../contract/EmailChangesMethodContract.scala | 293 +++++++++++---------- .../memory/MemoryEmailChangesMethodTest.java | 1 + .../postgres/PostgresEmailChangesMethodTest.java | 1 + 4 files changed, 163 insertions(+), 133 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/DistributedEmailChangeMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java index 308ac85412..3780b6d44b 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java @@ -59,6 +59,7 @@ public class DistributedEmailChangeMethodTest implements EmailChangesMethodContr .overrideWith(new TestJMAPServerModule()) .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(CassandraMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5))) .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(CassandraEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5)))) + .lifeCycle(JamesServerExtension.Lifecycle.PER_ENCLOSING_CLASS) .build(); @Override 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/EmailChangesMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailChangesMethodContract.scala index df8f204541..891f562e2b 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailChangesMethodContract.scala +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailChangesMethodContract.scala @@ -21,8 +21,10 @@ package org.apache.james.jmap.rfc8621.contract import java.nio.charset.StandardCharsets import java.time.Duration -import java.util.concurrent.TimeUnit +import java.util.UUID +import java.util.concurrent.{TimeUnit, atomic} +import com.google.common.hash.Hashing import io.netty.handler.codec.http.HttpHeaderNames.ACCEPT import io.restassured.RestAssured.{`given`, `with`, requestSpecification} import io.restassured.builder.ResponseSpecBuilder @@ -32,12 +34,13 @@ import net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson import net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER import org.apache.http.HttpStatus.SC_OK import org.apache.james.GuiceJamesServer +import org.apache.james.core.Username import org.apache.james.jmap.JmapGuiceProbe import org.apache.james.jmap.api.change.State import org.apache.james.jmap.api.model.AccountId import org.apache.james.jmap.core.ResponseObject.SESSION_STATE import org.apache.james.jmap.http.UserCredential -import org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, ACCOUNT_ID, ANDRE, ANDRE_ACCOUNT_ID, ANDRE_PASSWORD, BOB, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} +import org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, ANDRE_PASSWORD, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} import org.apache.james.mailbox.MessageManager.AppendCommand import org.apache.james.mailbox.model.MailboxACL.Right import org.apache.james.mailbox.model.{MailboxACL, MailboxPath, MessageId} @@ -49,7 +52,22 @@ import org.awaitility.Awaitility import org.junit.jupiter.api.{BeforeEach, Nested, Test} import play.api.libs.json.{JsString, Json} +object EmailChangesMethodContract { + case class TestContext(bobUsername: Username, bobAccountId: String, andreUsername: Username, andreAccountId: String) + + val currentContext: atomic.AtomicReference[TestContext] = new atomic.AtomicReference[TestContext]() +} + trait EmailChangesMethodContract { + import EmailChangesMethodContract.{TestContext, currentContext} + + def bobUsername: Username = currentContext.get().bobUsername + def bobAccountId: String = currentContext.get().bobAccountId + def andreUsername: Username = currentContext.get().andreUsername + def andreAccountId: String = currentContext.get().andreAccountId + + private def accountId(username: Username): String = + Hashing.sha256().hashString(username.asString(), StandardCharsets.UTF_8).toString private lazy val slowPacedPollInterval = Duration.ofMillis(100) private lazy val calmlyAwait = Awaitility.`with` @@ -62,22 +80,31 @@ trait EmailChangesMethodContract { @BeforeEach def setUp(server: GuiceJamesServer): Unit = { + val uniqueSuffix = UUID.randomUUID().toString.replace("-", "").take(8) + val bob = Username.fromLocalPartWithDomain(s"bob$uniqueSuffix", DOMAIN) + val andre = Username.fromLocalPartWithDomain(s"andre$uniqueSuffix", DOMAIN) + currentContext.set(TestContext( + bobUsername = bob, + bobAccountId = accountId(bob), + andreUsername = andre, + andreAccountId = accountId(andre))) + server.getProbe(classOf[DataProbeImpl]) .fluent .addDomain(DOMAIN.asString) .addDomain("domain-alias.tld") - .addUser(BOB.asString, BOB_PASSWORD) - .addUser(ANDRE.asString, ANDRE_PASSWORD) + .addUser(bob.asString, BOB_PASSWORD) + .addUser(andre.asString, ANDRE_PASSWORD) requestSpecification = baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(BOB, BOB_PASSWORD))) + .setAuth(authScheme(UserCredential(bob, BOB_PASSWORD))) .build } @Test def emailChangesShouldReturnCreatedChanges(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) @@ -86,7 +113,7 @@ trait EmailChangesMethodContract { .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId val request = s"""{ @@ -94,7 +121,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${State.INITIAL.getValue}" | }, | "c1"]] @@ -121,7 +148,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${State.INITIAL.getValue}", | "hasMoreChanges": false, | "created": ["${messageId.serialize}"], @@ -136,7 +163,7 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnUpdatedChangesWhenAddFlags(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) @@ -145,11 +172,11 @@ trait EmailChangesMethodContract { .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId - val oldState: State = waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) + val oldState: State = waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) - JmapRequests.markEmailAsSeen(messageId) + JmapRequests.markEmailAsSeen(messageId, bobUsername) val request = s"""{ @@ -157,7 +184,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${oldState.getValue}" | }, | "c1"]] @@ -184,7 +211,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${oldState.getValue}", | "hasMoreChanges": false, | "created": [], @@ -199,7 +226,7 @@ trait EmailChangesMethodContract { @Test def shouldFailWithCannotCalculateChangesWhenSingleChangeIsTooLarge(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) @@ -208,18 +235,18 @@ trait EmailChangesMethodContract { .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId1: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId - waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) - val messageId2: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId - waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) - val messageId3: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId - waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) - val messageId4: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId - waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) - val messageId5: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId - waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) - val messageId6: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId - val state6: State = waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) + val messageId1: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId + waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) + val messageId2: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId + waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) + val messageId3: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId + waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) + val messageId4: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId + waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) + val messageId5: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId + waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) + val messageId6: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId + val state6: State = waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) val updateEmail = s"""{ @@ -229,7 +256,7 @@ trait EmailChangesMethodContract { | "methodCalls": [ | ["Email/set", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "update": { | "${messageId1.serialize}":{ | "keywords/$$flagged": true @@ -271,7 +298,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "sinceState": "${state6.getValue}" | }, | "c1"]] @@ -309,19 +336,19 @@ trait EmailChangesMethodContract { @Test def shouldReturnUpdatedWhenMessageMove(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) - val mailboxId2 = mailboxProbe.createMailbox(MailboxPath.forUser(BOB, "mailbox2")) + val mailboxId2 = mailboxProbe.createMailbox(MailboxPath.forUser(bobUsername, "mailbox2")) val message: Message = Message.Builder .of .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId - val oldState: State = waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) + val oldState: State = waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) val updateEmail = s"""{ @@ -331,7 +358,7 @@ trait EmailChangesMethodContract { | "methodCalls": [ | ["Email/set", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "update": { | "${messageId.serialize}":{ | "mailboxIds": { @@ -360,7 +387,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "sinceState": "${oldState.getValue}" | }, | "c1"]] @@ -384,7 +411,7 @@ trait EmailChangesMethodContract { .inPath("methodResponses[0][1]") .isEqualTo( s"""{ - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${oldState.getValue}", | "hasMoreChanges": false, | "created": [], @@ -397,19 +424,19 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnUpdatedChangesWhenRemoveFlags(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.builder() .withFlags(new Flags(Flags.Flag.SEEN)) .build("header: value\r\n\r\nbody")) .getMessageId - val oldState: State = waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) + val oldState: State = waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) - JmapRequests.markEmailAsNotSeen(messageId) + JmapRequests.markEmailAsNotSeen(messageId, bobUsername) val request = s"""{ @@ -417,7 +444,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${oldState.getValue}" | }, | "c1"]] @@ -444,7 +471,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${oldState.getValue}", | "hasMoreChanges": false, | "created": [], @@ -459,7 +486,7 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnDestroyedChanges(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) @@ -468,11 +495,11 @@ trait EmailChangesMethodContract { .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId - val oldState: State = waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) + val oldState: State = waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) - JmapRequests.destroyEmail(messageId) + JmapRequests.destroyEmail(messageId, bobUsername) val request = s"""{ @@ -480,7 +507,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${oldState.getValue}" | }, | "c1"]] @@ -507,7 +534,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${oldState.getValue}", | "hasMoreChanges": false, | "created": [], @@ -522,12 +549,12 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnAllTypeOfChanges(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val accountId: AccountId = AccountId.fromUsername(BOB) + val accountId: AccountId = AccountId.fromUsername(bobUsername) - val path1: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path1: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path1) - val path2: MailboxPath = MailboxPath.forUser(BOB, "mailbox2") + val path2: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox2") mailboxProbe.createMailbox(path2) val message: Message = Message.Builder @@ -536,19 +563,19 @@ trait EmailChangesMethodContract { .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId1: MessageId = mailboxProbe.appendMessage(BOB.asString(), path2, AppendCommand.from(message)).getMessageId + val messageId1: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path2, AppendCommand.from(message)).getMessageId val state1: State = waitForNextState(server, accountId, State.INITIAL) - val messageId2: MessageId = mailboxProbe.appendMessage(BOB.asString(), path2, AppendCommand.from(message)).getMessageId + val messageId2: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path2, AppendCommand.from(message)).getMessageId val oldState: State = waitForNextState(server, accountId, state1) - val messageId3: MessageId = mailboxProbe.appendMessage(BOB.asString(), path1, AppendCommand.from(message)).getMessageId + val messageId3: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path1, AppendCommand.from(message)).getMessageId - JmapRequests.markEmailAsSeen(messageId1) + JmapRequests.markEmailAsSeen(messageId1, bobUsername) - JmapRequests.destroyEmail(messageId2) + JmapRequests.destroyEmail(messageId2, bobUsername) val request = s"""{ @@ -556,7 +583,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${oldState.getValue}" | }, | "c1"]] @@ -583,7 +610,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${oldState.getValue}", | "hasMoreChanges": false, | "created": ["${messageId3.serialize}"], @@ -599,7 +626,7 @@ trait EmailChangesMethodContract { def emailChangesShouldNotReturnDuplicatedIdsAccrossCreatedUpdatedOrDestroyed(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path = MailboxPath.forUser(BOB, "mailbox1") + val path = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) val message: Message = Message.Builder @@ -607,13 +634,13 @@ trait EmailChangesMethodContract { .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId1: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId - val messageId2: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId - val messageId3: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId + val messageId1: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId + val messageId2: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId + val messageId3: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId - JmapRequests.markEmailAsSeen(messageId2) + JmapRequests.markEmailAsSeen(messageId2, bobUsername) - JmapRequests.destroyEmail(messageId3) + JmapRequests.destroyEmail(messageId3, bobUsername) val request = s"""{ @@ -621,7 +648,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${State.INITIAL.getValue}" | }, | "c1"]] @@ -648,7 +675,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${State.INITIAL.getValue}", | "hasMoreChanges": false, | "created": ["${messageId1.serialize}", "${messageId2.serialize}"], @@ -665,19 +692,19 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnCreatedChanges(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) server.getProbe(classOf[ACLProbeImpl]) - .replaceRights(path, ANDRE.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) + .replaceRights(path, andreUsername.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) val message: Message = Message.Builder .of .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId val request = s"""{ @@ -685,7 +712,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sinceState": "${State.INITIAL.getValue}" | }, | "c1"]] @@ -694,7 +721,7 @@ trait EmailChangesMethodContract { awaitAtMostTenSeconds.untilAsserted { () => val response = `given`( baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(ANDRE, ANDRE_PASSWORD))) + .setAuth(authScheme(UserCredential(andreUsername, ANDRE_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .setBody(request) .build, new ResponseSpecBuilder().build) @@ -714,7 +741,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "oldState": "${State.INITIAL.getValue}", | "hasMoreChanges": false, | "created": ["${messageId.serialize}"], @@ -729,23 +756,23 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnUpdatedChangesWhenAddFlags(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) server.getProbe(classOf[ACLProbeImpl]) - .replaceRights(path, ANDRE.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) + .replaceRights(path, andreUsername.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) val message: Message = Message.Builder .of .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId - val oldState: State = waitForNextStateWithDelegation(server, AccountId.fromUsername(ANDRE), State.INITIAL) + val oldState: State = waitForNextStateWithDelegation(server, AccountId.fromUsername(andreUsername), State.INITIAL) - JmapRequests.markEmailAsSeen(messageId) + JmapRequests.markEmailAsSeen(messageId, bobUsername) val request = s"""{ @@ -753,7 +780,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sinceState": "${oldState.getValue}" | }, | "c1"]] @@ -762,7 +789,7 @@ trait EmailChangesMethodContract { awaitAtMostTenSeconds.untilAsserted { () => val response = `given`( baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(ANDRE, ANDRE_PASSWORD))) + .setAuth(authScheme(UserCredential(andreUsername, ANDRE_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .setBody(request) .build, new ResponseSpecBuilder().build) @@ -782,7 +809,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "oldState": "${oldState.getValue}", | "hasMoreChanges": false, | "created": [], @@ -797,22 +824,22 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnUpdatedChangesWhenRemoveFlags(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) server.getProbe(classOf[ACLProbeImpl]) - .replaceRights(path, ANDRE.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) + .replaceRights(path, andreUsername.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.builder() .withFlags(new Flags(Flags.Flag.SEEN)) .build("header: value\r\n\r\nbody")) .getMessageId - val oldState: State = waitForNextStateWithDelegation(server, AccountId.fromUsername(ANDRE), State.INITIAL) + val oldState: State = waitForNextStateWithDelegation(server, AccountId.fromUsername(andreUsername), State.INITIAL) - JmapRequests.markEmailAsNotSeen(messageId) + JmapRequests.markEmailAsNotSeen(messageId, bobUsername) val request = s"""{ @@ -820,7 +847,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sinceState": "${oldState.getValue}" | }, | "c1"]] @@ -829,7 +856,7 @@ trait EmailChangesMethodContract { awaitAtMostTenSeconds.untilAsserted { () => val response = `given`( baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(ANDRE, ANDRE_PASSWORD))) + .setAuth(authScheme(UserCredential(andreUsername, ANDRE_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .setBody(request) .build, new ResponseSpecBuilder().build) @@ -849,7 +876,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "oldState": "${oldState.getValue}", | "hasMoreChanges": false, | "created": [], @@ -864,23 +891,23 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnDestroyedChanges(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) server.getProbe(classOf[ACLProbeImpl]) - .replaceRights(path, ANDRE.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) + .replaceRights(path, andreUsername.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) val message: Message = Message.Builder .of .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId: MessageId = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId + val messageId: MessageId = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId - val oldState: State = waitForNextStateWithDelegation(server, AccountId.fromUsername(ANDRE), State.INITIAL) + val oldState: State = waitForNextStateWithDelegation(server, AccountId.fromUsername(andreUsername), State.INITIAL) - JmapRequests.destroyEmail(messageId) + JmapRequests.destroyEmail(messageId, bobUsername) val request = s"""{ @@ -888,7 +915,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sinceState": "${oldState.getValue}" | }, | "c1"]] @@ -897,7 +924,7 @@ trait EmailChangesMethodContract { awaitAtMostTenSeconds.untilAsserted { () => val response = `given`( baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(ANDRE, ANDRE_PASSWORD))) + .setAuth(authScheme(UserCredential(andreUsername, ANDRE_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .setBody(request) .build, new ResponseSpecBuilder().build) @@ -917,7 +944,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "oldState": "${oldState.getValue}", | "hasMoreChanges": false, | "created": [], @@ -933,18 +960,18 @@ trait EmailChangesMethodContract { def emailChangesShouldNotReturnUpdatedChangesWhenMissingSharesCapability(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path = MailboxPath.forUser(BOB, "mailbox1") + val path = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) server.getProbe(classOf[ACLProbeImpl]) - .replaceRights(path, ANDRE.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) + .replaceRights(path, andreUsername.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) val message: Message = Message.Builder .of .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)) + mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)) val request = s"""{ @@ -952,7 +979,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "sinceState": "${State.INITIAL.getValue}" | }, | "c1"]] @@ -961,7 +988,7 @@ trait EmailChangesMethodContract { awaitAtMostTenSeconds.untilAsserted { () => val response = `given`( baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(ANDRE, ANDRE_PASSWORD))) + .setAuth(authScheme(UserCredential(andreUsername, ANDRE_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .setBody(request) .build, new ResponseSpecBuilder().build) @@ -981,7 +1008,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "oldState": "${State.INITIAL.getValue}", | "hasMoreChanges": false, | "created": [], @@ -997,7 +1024,7 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnHasMoreChangesWhenTrue(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) @@ -1007,12 +1034,12 @@ trait EmailChangesMethodContract { .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId1: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId2: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId3: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId4: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId5: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)) + val messageId1: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId2: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId3: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId4: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId5: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)) val request = s"""{ @@ -1020,7 +1047,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${State.INITIAL.getValue}" | }, | "c1"]] @@ -1047,7 +1074,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${State.INITIAL.getValue}", | "hasMoreChanges": true, | "created": ["$messageId1", "$messageId2", "$messageId3", "$messageId4", "$messageId5"], @@ -1062,7 +1089,7 @@ trait EmailChangesMethodContract { @Test def maxChangesShouldBeTakenIntoAccount(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) @@ -1072,12 +1099,12 @@ trait EmailChangesMethodContract { .setBody("testmail", StandardCharsets.UTF_8) .build - val messageId1: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId2: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId3: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId4: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId5: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize - val messageId6: String = mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId1: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId2: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId3: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId4: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId5: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize + val messageId6: String = mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)).getMessageId.serialize val request = s"""{ @@ -1085,7 +1112,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${State.INITIAL.getValue}", | "maxChanges": 38 | }, @@ -1113,7 +1140,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${State.INITIAL.getValue}", | "hasMoreChanges": false, | "created": ["$messageId1", "$messageId2", "$messageId3", "$messageId4", "$messageId5", "$messageId6"], @@ -1133,7 +1160,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${State.INITIAL.getValue}" | }, | "c1"]] @@ -1159,7 +1186,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "${State.INITIAL.getValue}", | "newState": "${State.INITIAL.getValue}", | "hasMoreChanges": false, @@ -1175,7 +1202,7 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldReturnDifferentStateThanOldState(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path: MailboxPath = MailboxPath.forUser(BOB, "mailbox1") + val path: MailboxPath = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) @@ -1184,7 +1211,7 @@ trait EmailChangesMethodContract { .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)) + mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)) val request = s"""{ @@ -1192,7 +1219,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${State.INITIAL.getValue}" | }, | "c1"]] @@ -1224,7 +1251,7 @@ trait EmailChangesMethodContract { @Test def emailChangesShouldEventuallyReturnNoChanges(server: GuiceJamesServer): Unit = { val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl]) - val path = MailboxPath.forUser(BOB, "mailbox1") + val path = MailboxPath.forUser(bobUsername, "mailbox1") mailboxProbe.createMailbox(path) val message: Message = Message.Builder @@ -1232,9 +1259,9 @@ trait EmailChangesMethodContract { .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build - mailboxProbe.appendMessage(BOB.asString(), path, AppendCommand.from(message)) + mailboxProbe.appendMessage(bobUsername.asString(), path, AppendCommand.from(message)) - waitForNextState(server, AccountId.fromUsername(BOB), State.INITIAL) + waitForNextState(server, AccountId.fromUsername(bobUsername), State.INITIAL) val request1 = s"""{ @@ -1242,7 +1269,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "${State.INITIAL.getValue}" | }, | "c1"]] @@ -1272,7 +1299,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "$newState" | }, | "c1"]] @@ -1297,7 +1324,7 @@ trait EmailChangesMethodContract { | "sessionState": "${SESSION_STATE.value}", | "methodResponses": [ | [ "Email/changes", { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "oldState": "$newState", | "newState": "$newState", | "hasMoreChanges": false, @@ -1361,7 +1388,7 @@ trait EmailChangesMethodContract { | "methodCalls": [[ | "Email/changes", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "sinceState": "$state" | }, | "c1"]] 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/MemoryEmailChangesMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java index 8c6c14db34..a5f4bc4d63 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java @@ -47,6 +47,7 @@ public class MemoryEmailChangesMethodTest implements EmailChangesMethodContract .overrideWith(new TestJMAPServerModule()) .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(MemoryMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5))) .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(MemoryEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5)))) + .lifeCycle(JamesServerExtension.Lifecycle.PER_ENCLOSING_CLASS) .build(); @Override 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/PostgresEmailChangesMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailChangesMethodTest.java index 0bc5bdae28..f908c24a96 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailChangesMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailChangesMethodTest.java @@ -60,6 +60,7 @@ public class PostgresEmailChangesMethodTest implements EmailChangesMethodContrac .overrideWith(new TestJMAPServerModule()) .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(PostgresEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5))) .overrideWith(binder -> binder.bind(Limit.class).annotatedWith(Names.named(PostgresEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(5)))) + .lifeCycle(JamesServerExtension.Lifecycle.PER_ENCLOSING_CLASS) .build(); @Override --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
