This is an automated email from the ASF dual-hosted git repository. quantranhong1999 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 3cd94b9eadb5d0266adde47784f8494ef52fd096 Author: Quan Tran <[email protected]> AuthorDate: Fri Jun 19 09:45:57 2026 +0700 [BUILD] EmailSubmissionSetMethodContract: isolate using different users ### Before - memory: 20 sec - postgres: 32 sec - distributed: 2 min 56 sec ### After - memory: 5 sec - postgres: 10 sec - distributed: 19 sec --- .../DistributedEmailSubmissionSetMethodtest.java | 2 +- .../EmailSubmissionSetMethodContract.scala | 620 +++++++++++---------- .../memory/MemoryEmailSubmissionSetMethodTest.java | 2 +- .../PostgresEmailSubmissionSetMethodTest.java | 2 +- 4 files changed, 326 insertions(+), 300 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/DistributedEmailSubmissionSetMethodtest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java index 6f0f8ca27c..0981af78e5 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java @@ -25,7 +25,7 @@ import org.apache.james.mailbox.model.MessageId; import com.datastax.oss.driver.api.core.uuid.Uuids; -class DistributedEmailSubmissionSetMethodtest extends DistributedBase implements EmailSubmissionSetMethodContract { +class DistributedEmailSubmissionSetMethodtest extends PerClassDistributedBase implements EmailSubmissionSetMethodContract { public static final CassandraMessageId.Factory MESSAGE_ID_FACTORY = new CassandraMessageId.Factory(); @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/EmailSubmissionSetMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSubmissionSetMethodContract.scala index 046187459a..8cfe655dc8 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSubmissionSetMethodContract.scala +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSubmissionSetMethodContract.scala @@ -20,8 +20,11 @@ package org.apache.james.jmap.rfc8621.contract import java.nio.charset.StandardCharsets +import java.util.UUID import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference +import com.google.common.hash.Hashing import io.netty.handler.codec.http.HttpHeaderNames.ACCEPT import io.restassured.RestAssured.{`given`, requestSpecification} import io.restassured.builder.ResponseSpecBuilder @@ -29,10 +32,12 @@ import io.restassured.http.ContentType.JSON import net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson import org.apache.http.HttpStatus.{SC_CREATED, SC_OK} import org.apache.james.GuiceJamesServer +import org.apache.james.core.Username import org.apache.james.jmap.core.ResponseObject.SESSION_STATE import org.apache.james.jmap.core.UuidState.INSTANCE 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.EmailSubmissionSetMethodContract.TestContext +import org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, ANDRE_PASSWORD, BOB_PASSWORD, DOMAIN, authScheme, baseRequestSpecBuilder} import org.apache.james.mailbox.DefaultMailboxes import org.apache.james.mailbox.MessageManager.AppendCommand import org.apache.james.mailbox.model.MailboxACL.Right @@ -45,7 +50,18 @@ import org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS import org.junit.jupiter.api.{BeforeEach, Test} import play.api.libs.json.{JsString, Json} +object EmailSubmissionSetMethodContract { + case class TestContext(bobUsername: Username, bobAccountId: String, + andreUsername: Username, andreAccountId: String) + val currentContext: AtomicReference[TestContext] = new AtomicReference[TestContext]() +} + trait EmailSubmissionSetMethodContract { + def bobUsername: Username = EmailSubmissionSetMethodContract.currentContext.get().bobUsername + def bobAccountId: String = EmailSubmissionSetMethodContract.currentContext.get().bobAccountId + def andreUsername: Username = EmailSubmissionSetMethodContract.currentContext.get().andreUsername + def andreAccountId: String = EmailSubmissionSetMethodContract.currentContext.get().andreAccountId + private lazy val slowPacedPollInterval = ONE_HUNDRED_MILLISECONDS private lazy val calmlyAwait = Awaitility.`with` .pollInterval(slowPacedPollInterval) @@ -55,14 +71,23 @@ trait EmailSubmissionSetMethodContract { @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) + EmailSubmissionSetMethodContract.currentContext.set(TestContext( + bobUsername = bob, + bobAccountId = Hashing.sha256().hashString(bob.asString(), StandardCharsets.UTF_8).toString, + andreUsername = andre, + andreAccountId = Hashing.sha256().hashString(andre.asString(), StandardCharsets.UTF_8).toString)) + server.getProbe(classOf[DataProbeImpl]) .fluent .addDomain(DOMAIN.asString) - .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 } @@ -73,19 +98,19 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId - val andreInboxPath = MailboxPath.inbox(ANDRE) + val andreInboxPath = MailboxPath.inbox(andreUsername) val andreInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreInboxPath) val requestBob = @@ -93,13 +118,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -120,7 +145,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "filter": {"inMailbox": "${andreInboxId.serialize}"} | }, | "c1"]] @@ -129,7 +154,7 @@ trait EmailSubmissionSetMethodContract { 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(requestAndre) .build, new ResponseSpecBuilder().build) @@ -153,19 +178,19 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom("BOB <" + BOB.asString + ">") - .setTo(ANDRE.asString, "BOB <" + BOB.asString + ">") + .setSender(bobUsername.asString) + .setFrom(s"Bob <${bobUsername.asString}>") + .setTo(andreUsername.asString, s"Bob <${bobUsername.asString}>") .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId - val andreInboxPath = MailboxPath.inbox(ANDRE) + val andreInboxPath = MailboxPath.inbox(andreUsername) val andreInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreInboxPath) val requestBob = @@ -173,13 +198,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -200,7 +225,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "filter": {"inMailbox": "${andreInboxId.serialize}"} | }, | "c1"]] @@ -209,7 +234,7 @@ trait EmailSubmissionSetMethodContract { 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(requestAndre) .build, new ResponseSpecBuilder().build) @@ -233,19 +258,19 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId - val andreInboxPath = MailboxPath.inbox(ANDRE) + val andreInboxPath = MailboxPath.inbox(andreUsername) val andreInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreInboxPath) val requestBob = @@ -253,7 +278,7 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}" @@ -276,7 +301,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "filter": {"inMailbox": "${andreInboxId.serialize}"} | }, | "c1"]] @@ -285,7 +310,7 @@ trait EmailSubmissionSetMethodContract { 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(requestAndre) .build, new ResponseSpecBuilder().build) @@ -309,16 +334,16 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB)) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername)) + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -327,13 +352,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${BOB.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${bobUsername.asString}"}] | } | } | } @@ -354,7 +379,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobInboxId.serialize}"} | }, | "c1"]] @@ -385,18 +410,18 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender("[email protected]") - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(s"bob.alias@${DOMAIN.asString}") + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - server.getProbe(classOf[DataProbeImpl]).addUserAliasMapping("bob.alias", DOMAIN.asString(), "[email protected]") + server.getProbe(classOf[DataProbeImpl]).addUserAliasMapping("bob.alias", DOMAIN.asString(), bobUsername.asString) - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB)) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername)) + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -405,13 +430,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${BOB.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${bobUsername.asString}"}] | } | } | } @@ -432,7 +457,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobInboxId.serialize}"} | }, | "c1"]] @@ -463,18 +488,18 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom("[email protected]") - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(s"bob.alias@${DOMAIN.asString}") + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - server.getProbe(classOf[DataProbeImpl]).addUserAliasMapping("bob.alias", DOMAIN.asString(), "[email protected]") + server.getProbe(classOf[DataProbeImpl]).addUserAliasMapping("bob.alias", DOMAIN.asString(), bobUsername.asString) - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB)) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername)) + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -483,13 +508,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${BOB.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${bobUsername.asString}"}] | } | } | } @@ -510,7 +535,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobInboxId.serialize}"} | }, | "c1"]] @@ -541,18 +566,18 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - server.getProbe(classOf[DataProbeImpl]).addUserAliasMapping("bob.alias", DOMAIN.asString(), "[email protected]") + server.getProbe(classOf[DataProbeImpl]).addUserAliasMapping("bob.alias", DOMAIN.asString(), bobUsername.asString) - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB)) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername)) + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -561,13 +586,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "[email protected]"}, - | "rcptTo": [{"email": "${BOB.asString}"}] + | "mailFrom": {"email": "bob.alias@${DOMAIN.asString}"}, + | "rcptTo": [{"email": "${bobUsername.asString}"}] | } | } | } @@ -588,7 +613,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobInboxId.serialize}"} | }, | "c1"]] @@ -619,18 +644,18 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB)) - val andreInboxPath = MailboxPath.inbox(ANDRE) + val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername)) + val andreInboxPath = MailboxPath.inbox(andreUsername) val andreInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreInboxPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -640,13 +665,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${BOB.asString}"}, {"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${bobUsername.asString}"}, {"email": "${andreUsername.asString}"}] | } | } | } @@ -667,7 +692,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobInboxId.serialize}"} | }, | "c1"]] @@ -679,7 +704,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "filter": {"inMailbox": "${andreInboxId.serialize}"} | }, | "c1"]] @@ -699,7 +724,7 @@ trait EmailSubmissionSetMethodContract { .asString val responseAndre = `given`( baseRequestSpecBuilder(server) - .setAuth(authScheme(UserCredential(ANDRE, ANDRE_PASSWORD))) + .setAuth(authScheme(UserCredential(andreUsername, ANDRE_PASSWORD))) .addHeader(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) .setBody(requestReadMailAndre) .build, new ResponseSpecBuilder().build) @@ -724,32 +749,32 @@ trait EmailSubmissionSetMethodContract { @Test def emailSubmissionSetCanBeChainedAfterEmailSet(server: GuiceJamesServer): Unit = { - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) val draftId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB)) + val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername)) val requestBob = s"""{ | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["Email/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "e1526":{ | "mailboxIds": {"${draftId.serialize}": true}, - | "to": [{"email": "${BOB.asString}"}], - | "from": [{"email": "${BOB.asString}"}] + | "to": [{"email": "${bobUsername.asString}"}], + | "from": [{"email": "${bobUsername.asString}"}] | } | } | }, "c1"], | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "#e1526", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${BOB.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${bobUsername.asString}"}] | } | } | } @@ -770,7 +795,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobInboxId.serialize}"} | }, | "c1"]] @@ -801,15 +826,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -818,13 +843,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -855,15 +880,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -872,14 +897,14 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", - | "identityId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "identityId": "$bobAccountId", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -910,15 +935,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -927,13 +952,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | }, @@ -945,7 +970,7 @@ trait EmailSubmissionSetMethodContract { | }, "c1"], | ["Email/get", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "ids": ["${messageId.serialize}"], | "properties": ["keywords"] | }, @@ -976,7 +1001,7 @@ trait EmailSubmissionSetMethodContract { | [ | "EmailSubmission/set", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "newState": "${INSTANCE.value}", | "created": { | "k1490": "f0850507-bb63-4675-b14f-d560f8dca21f" @@ -987,7 +1012,7 @@ trait EmailSubmissionSetMethodContract { | [ | "Email/set", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "newState": "${INSTANCE.value}", | "updated": { | "${messageId.serialize}": null @@ -998,7 +1023,7 @@ trait EmailSubmissionSetMethodContract { | [ | "Email/get", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "list": [ | { | "keywords": {"$$sent": true}, @@ -1018,15 +1043,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1035,13 +1060,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | }, @@ -1086,15 +1111,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1103,13 +1128,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | }, @@ -1154,15 +1179,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1171,13 +1196,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | }, @@ -1185,7 +1210,7 @@ trait EmailSubmissionSetMethodContract { | }, "c1"], | ["Email/get", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "ids": ["${messageId.serialize}"], | "properties": ["keywords"] | }, @@ -1216,7 +1241,7 @@ trait EmailSubmissionSetMethodContract { | [ | "EmailSubmission/set", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "newState": "${INSTANCE.value}", | "created": { | "k1490": "f0850507-bb63-4675-b14f-d560f8dca21f" @@ -1227,7 +1252,7 @@ trait EmailSubmissionSetMethodContract { | [ | "Email/set", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "newState": "${INSTANCE.value}", | "destroyed": ["${messageId.serialize}"] | }, @@ -1236,7 +1261,7 @@ trait EmailSubmissionSetMethodContract { | [ | "Email/get", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "list":[], | "notFound": ["${messageId.serialize}"] | }, @@ -1251,15 +1276,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1268,13 +1293,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | }, @@ -1315,15 +1340,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1332,13 +1357,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | }, @@ -1379,30 +1404,31 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId + val otherAccountId = UUID.randomUUID().toString val requestBob = s"""{ | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$otherAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1435,15 +1461,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1452,13 +1478,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1496,13 +1522,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${randomMessageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1537,15 +1563,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(ANDRE.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(andreUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1554,13 +1580,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1591,14 +1617,14 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${randomMessageId.serialize}", | "extra": true, | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1633,15 +1659,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val andreDraftsPath = MailboxPath.forUser(ANDRE, DefaultMailboxes.DRAFTS) + val andreDraftsPath = MailboxPath.forUser(andreUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(ANDRE.asString(), andreDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(andreUsername.asString(), andreDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1650,13 +1676,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1691,18 +1717,18 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(BOB.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(bobUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val andreDraftsPath = MailboxPath.forUser(ANDRE, DefaultMailboxes.DRAFTS) + val andreDraftsPath = MailboxPath.forUser(andreUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreDraftsPath) - val bobInboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB)) + val bobInboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername)) server.getProbe(classOf[ACLProbeImpl]) - .replaceRights(andreDraftsPath, BOB.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(ANDRE.asString(), andreDraftsPath, AppendCommand.builder() + .replaceRights(andreDraftsPath, bobUsername.asString, new MailboxACL.Rfc4314Rights(Right.Lookup, Right.Read)) + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(andreUsername.asString(), andreDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1711,13 +1737,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${BOB.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${bobUsername.asString}"}] | } | } | } @@ -1738,7 +1764,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobInboxId.serialize}"} | }, | "c1"]] @@ -1769,15 +1795,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(ANDRE.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(andreUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1786,13 +1812,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1813,10 +1839,10 @@ trait EmailSubmissionSetMethodContract { assertThatJson(response) .inPath("methodResponses[0][1].notCreated") - .isEqualTo("""{ + .isEqualTo(s"""{ | "k1490": { | "type": "forbiddenMailFrom", - | "description": "Attempt to send a mail whose MimeMessage From and Sender fields not allowed for connected user: List([email protected])" + | "description": "Attempt to send a mail whose MimeMessage From and Sender fields not allowed for connected user: List(${andreUsername.asString})" | } |}""".stripMargin) } @@ -1826,15 +1852,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString, ANDRE.asString()) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString, andreUsername.asString()) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1843,13 +1869,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1870,10 +1896,10 @@ trait EmailSubmissionSetMethodContract { assertThatJson(response) .inPath("methodResponses[0][1].notCreated") - .isEqualTo("""{ + .isEqualTo(s"""{ | "k1490": { | "type": "forbiddenMailFrom", - | "description": "Attempt to send a mail whose MimeMessage From and Sender fields not allowed for connected user: List([email protected])" + | "description": "Attempt to send a mail whose MimeMessage From and Sender fields not allowed for connected user: List(${andreUsername.asString})" | } |}""".stripMargin) } @@ -1883,13 +1909,13 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setTo(ANDRE.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1898,13 +1924,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1938,15 +1964,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -1955,13 +1981,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${ANDRE.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${andreUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | } @@ -1982,10 +2008,10 @@ trait EmailSubmissionSetMethodContract { assertThatJson(response) .inPath("methodResponses[0][1].notCreated") - .isEqualTo("""{ + .isEqualTo(s"""{ | "k1490": { | "type": "forbiddenFrom", - | "description": "Attempt to send a mail whose envelope From not allowed for connected user: [email protected]", + | "description": "Attempt to send a mail whose envelope From not allowed for connected user: ${andreUsername.asString}", | "properties":["envelope.mailFrom"] | } |}""".stripMargin) @@ -1996,15 +2022,15 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId @@ -2013,12 +2039,12 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, + | "mailFrom": {"email": "${bobUsername.asString}"}, | "rcptTo": [] | } | } @@ -2053,19 +2079,19 @@ trait EmailSubmissionSetMethodContract { val message: Message = Message.Builder .of .setSubject("test") - .setSender(BOB.asString) - .setFrom(BOB.asString) - .setTo(ANDRE.asString) + .setSender(bobUsername.asString) + .setFrom(bobUsername.asString) + .setTo(andreUsername.asString) .setBody("testmail", StandardCharsets.UTF_8) .build - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(BOB.asString(), bobDraftsPath, AppendCommand.builder() + val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl]).appendMessage(bobUsername.asString(), bobDraftsPath, AppendCommand.builder() .build(message)) .getMessageId - val andreInboxPath = MailboxPath.inbox(ANDRE) + val andreInboxPath = MailboxPath.inbox(andreUsername) val andreInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(andreInboxPath) `given` @@ -2074,13 +2100,13 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${messageId.serialize}", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString.toUpperCase}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString.toUpperCase}"}] | } | } | } @@ -2098,7 +2124,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ANDRE_ACCOUNT_ID", + | "accountId": "$andreAccountId", | "filter": {"inMailbox": "${andreInboxId.serialize}"} | }, | "c1"]] @@ -2107,7 +2133,7 @@ trait EmailSubmissionSetMethodContract { 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(queryAndreInboxRequest) .build, new ResponseSpecBuilder().build) @@ -2133,14 +2159,14 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${randomMessageId.serialize}", | "extra": true, | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | }, @@ -2171,7 +2197,7 @@ trait EmailSubmissionSetMethodContract { | [ | "EmailSubmission/set", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "newState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943", | "notCreated": { | "k1490": { @@ -2196,14 +2222,14 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "${randomMessageId.serialize}", | "extra": true, | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${ANDRE.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${andreUsername.asString}"}] | } | } | }, @@ -2230,7 +2256,7 @@ trait EmailSubmissionSetMethodContract { | [ | "EmailSubmission/set", | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", + | "accountId": "$bobAccountId", | "newState": "2c9f1b12-b35a-43e6-9af2-0106fb53a943", | "notCreated": { | "k1490": { @@ -2250,10 +2276,10 @@ trait EmailSubmissionSetMethodContract { @Test def emailSubmissionSetShouldSetCorrectlyHasAttachmentPropertyOnMessageInSentMailbox(server: GuiceJamesServer): Unit = { - val bobDraftsPath = MailboxPath.forUser(BOB, DefaultMailboxes.DRAFTS) + val bobDraftsPath = MailboxPath.forUser(bobUsername, DefaultMailboxes.DRAFTS) val draftId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobDraftsPath) - val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(BOB)) - val bobSentId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.forUser(BOB, DefaultMailboxes.SENT)) + val bobInboxId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.inbox(bobUsername)) + val bobSentId: MailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(MailboxPath.forUser(bobUsername, DefaultMailboxes.SENT)) val payload = "123456789\r\n".getBytes(StandardCharsets.UTF_8) @@ -2263,7 +2289,7 @@ trait EmailSubmissionSetMethodContract { .contentType("text/plain") .body(payload) .when - .post(s"/upload/$ACCOUNT_ID") + .post(s"/upload/$bobAccountId") .`then` .statusCode(SC_CREATED) .extract @@ -2277,12 +2303,12 @@ trait EmailSubmissionSetMethodContract { | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail", "urn:ietf:params:jmap:submission"], | "methodCalls": [ | ["Email/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "e1526":{ | "mailboxIds": {"${draftId.serialize}": true}, - | "to": [{"email": "${BOB.asString}"}], - | "from": [{"email": "${BOB.asString}"}], + | "to": [{"email": "${bobUsername.asString}"}], + | "from": [{"email": "${bobUsername.asString}"}], | "subject": "World domination", | "attachments": [ | { @@ -2298,13 +2324,13 @@ trait EmailSubmissionSetMethodContract { | } | }, "c0"], | ["EmailSubmission/set", { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "create": { | "k1490": { | "emailId": "#e1526", | "envelope": { - | "mailFrom": {"email": "${BOB.asString}"}, - | "rcptTo": [{"email": "${BOB.asString}"}] + | "mailFrom": {"email": "${bobUsername.asString}"}, + | "rcptTo": [{"email": "${bobUsername.asString}"}] | } | } | }, @@ -2333,7 +2359,7 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobSentId.serialize}"} | }, | "c0"]] @@ -2364,14 +2390,14 @@ trait EmailSubmissionSetMethodContract { | "methodCalls": [[ | "Email/query", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "filter": {"inMailbox": "${bobSentId.serialize}"} | }, | "c0"], | [ | "Email/get", | { - | "accountId": "$ACCOUNT_ID", + | "accountId": "$bobAccountId", | "#ids": { | "resultOf": "c0", | "name": "Email/query", 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/MemoryEmailSubmissionSetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSubmissionSetMethodTest.java index 7f0931afa1..08d03acc57 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSubmissionSetMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSubmissionSetMethodTest.java @@ -25,7 +25,7 @@ import org.apache.james.jmap.rfc8621.contract.EmailSubmissionSetMethodContract; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.model.MessageId; -class MemoryEmailSubmissionSetMethodTest extends MemoryBase implements EmailSubmissionSetMethodContract { +class MemoryEmailSubmissionSetMethodTest extends PerClassMemoryBase implements EmailSubmissionSetMethodContract { @Override public MessageId randomMessageId() { return InMemoryMessageId.of(ThreadLocalRandom.current().nextInt(100000) + 100); 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/PostgresEmailSubmissionSetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailSubmissionSetMethodTest.java index 536a5928d3..033cb2f0a4 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailSubmissionSetMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/postgres/PostgresEmailSubmissionSetMethodTest.java @@ -23,7 +23,7 @@ import org.apache.james.jmap.rfc8621.contract.EmailSubmissionSetMethodContract; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.postgres.PostgresMessageId; -public class PostgresEmailSubmissionSetMethodTest extends PostgresBase implements EmailSubmissionSetMethodContract { +public class PostgresEmailSubmissionSetMethodTest extends PerClassPostgresBase implements EmailSubmissionSetMethodContract { public static final PostgresMessageId.Factory MESSAGE_ID_FACTORY = new PostgresMessageId.Factory(); @Override --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
