You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rc...@apache.org on 2020/02/18 02:48:18 UTC
[james-project] 07/08: JAMES-3057 Add a create default method in
MailboxMapper
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit d9d098d9a1b326a0266f836e6e96e8051a76384e
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Tue Feb 11 11:49:32 2020 +0700
JAMES-3057 Add a create default method in MailboxMapper
---
.../james/mailbox/store/StoreMailboxManager.java | 2 +-
.../james/mailbox/store/mail/MailboxMapper.java | 13 +++++++-
.../store/mail/model/MailboxMapperTest.java | 37 +++++++++++++++++++++-
3 files changed, 49 insertions(+), 3 deletions(-)
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index bcad33d..f023f5f 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -385,7 +385,7 @@ public class StoreMailboxManager implements MailboxManager {
Mailbox mailbox = doCreateMailbox(mailboxPath);
MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
try {
- mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(mailbox))));
+ mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.create(mailbox))));
// notify listeners
eventBus.dispatch(EventFactory.mailboxAdded()
.randomEventId()
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
index 3ca9c5f..65a7489 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
@@ -32,13 +32,24 @@ import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.search.MailboxQuery;
import org.apache.james.mailbox.store.transaction.Mapper;
+import com.google.common.base.Preconditions;
+
/**
* Mapper for {@link Mailbox} actions. A {@link MailboxMapper} has a lifecycle from the start of a request
* to the end of the request.
*
*/
public interface MailboxMapper extends Mapper {
-
+
+ /**
+ * Create the given {@link Mailbox} to the underlying storage
+ */
+ default MailboxId create(Mailbox mailbox) throws MailboxException {
+ Preconditions.checkArgument(mailbox.getMailboxId() == null, "A mailbox we want to create should not have a mailboxId set already");
+
+ return save(mailbox);
+ }
+
/**
* Save the give {@link Mailbox} to the underlying storage
*/
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
index e90e01c..125292b 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
@@ -82,12 +82,47 @@ public abstract class MailboxMapperTest {
}
@Test
- void findMailboxByPathWhenAbsentShouldFail() throws MailboxException {
+ void findMailboxByPathWhenAbsentShouldFail() {
assertThatThrownBy(() -> mailboxMapper.findMailboxByPath(MailboxPath.forUser(BENWA, "INBOX")))
.isInstanceOf(MailboxNotFoundException.class);
}
@Test
+ void createShouldPersistTheMailbox() throws MailboxException {
+ benwaInboxMailbox.setMailboxId(null);
+ mailboxMapper.create(benwaInboxMailbox);
+
+ MailboxAssert.assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath)).isEqualTo(benwaInboxMailbox);
+ MailboxAssert.assertThat(mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())).isEqualTo(benwaInboxMailbox);
+ }
+
+ @Test
+ void createShouldThrowWhenMailboxAlreadyExists() throws MailboxException {
+ benwaInboxMailbox.setMailboxId(null);
+ mailboxMapper.create(benwaInboxMailbox);
+
+ Mailbox mailbox = new Mailbox(benwaInboxMailbox);
+ mailbox.setMailboxId(null);
+
+ assertThatThrownBy(() -> mailboxMapper.create(mailbox))
+ .isInstanceOf(MailboxExistsException.class);
+ }
+
+ @Test
+ void createShouldSetAMailboxIdForMailbox() throws MailboxException {
+ benwaInboxMailbox.setMailboxId(null);
+ MailboxId mailboxId = mailboxMapper.create(benwaInboxMailbox);
+
+ assertThat(mailboxId).isNotNull();
+ }
+
+ @Test
+ void createShouldThrowWhenMailboxIdNotNull() {
+ assertThatThrownBy(() -> mailboxMapper.create(benwaInboxMailbox))
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
void saveShouldPersistTheMailbox() throws MailboxException {
mailboxMapper.save(benwaInboxMailbox);
assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath)).isEqualTo(benwaInboxMailbox);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org