This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 705b600150bff1e02364cba9d7a395e7f0b03ee8
Author: Benoit Tellier <[email protected]>
AuthorDate: Fri Feb 22 12:02:49 2019 +0700

    MAILBOX-381 Contract for DeletedMessageVault
---
 mailbox/plugin/deleted-messages-vault/pom.xml      |   5 +
 .../apache/james/vault/DeletedMessageFixture.java  |  74 +++++++++++++
 .../org/apache/james/vault/DeletedMessageTest.java |  85 +++++----------
 .../james/vault/DeletedMessageVaultContract.java   | 114 +++++++++++++++++++++
 4 files changed, 219 insertions(+), 59 deletions(-)

diff --git a/mailbox/plugin/deleted-messages-vault/pom.xml 
b/mailbox/plugin/deleted-messages-vault/pom.xml
index d931dd7..5423077 100644
--- a/mailbox/plugin/deleted-messages-vault/pom.xml
+++ b/mailbox/plugin/deleted-messages-vault/pom.xml
@@ -46,6 +46,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>apache-mailet-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageFixture.java
 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageFixture.java
new file mode 100644
index 0000000..69f58e0
--- /dev/null
+++ 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageFixture.java
@@ -0,0 +1,74 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.vault;
+
+import static org.apache.mailet.base.MailAddressFixture.RECIPIENT1;
+import static org.apache.mailet.base.MailAddressFixture.RECIPIENT2;
+import static org.apache.mailet.base.MailAddressFixture.SENDER;
+
+import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
+import java.time.ZonedDateTime;
+import java.util.function.Supplier;
+
+import org.apache.james.core.MaybeSender;
+import org.apache.james.core.User;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.inmemory.InMemoryMessageId;
+
+public interface DeletedMessageFixture {
+    InMemoryMessageId MESSAGE_ID = InMemoryMessageId.of(42);
+    InMemoryMessageId MESSAGE_ID_2 = InMemoryMessageId.of(45);
+    InMemoryId MAILBOX_ID_1 = InMemoryId.of(43);
+    InMemoryId MAILBOX_ID_2 = InMemoryId.of(44);
+    User USER = User.fromUsername("[email protected]");
+    User USER_2 = User.fromUsername("[email protected]");
+    ZonedDateTime DELIVERY_DATE = ZonedDateTime.parse("2014-10-30T14:12:00Z");
+    ZonedDateTime DELETION_DATE = ZonedDateTime.parse("2015-10-30T14:12:00Z");
+    byte[] CONTENT = "header: 
value\r\n\r\ncontent".getBytes(StandardCharsets.UTF_8);
+    String SUBJECT = "subject";
+
+
+    Supplier<DeletedMessage.Builder.FinalStage> FINAL_STAGE = () -> 
DeletedMessage.builder()
+        .messageId(MESSAGE_ID)
+        .originMailboxes(MAILBOX_ID_1, MAILBOX_ID_2)
+        .user(USER)
+        .deliveryDate(DELIVERY_DATE)
+        .deletionDate(DELETION_DATE)
+        .content(() -> new ByteArrayInputStream(CONTENT))
+        .sender(MaybeSender.of(SENDER))
+        .recipients(RECIPIENT1, RECIPIENT2)
+        .hasAttachment(false);
+    DeletedMessage DELETED_MESSAGE_WITH_SUBJECT = FINAL_STAGE.get()
+        .subject(SUBJECT)
+        .build();
+    DeletedMessage DELETED_MESSAGE = FINAL_STAGE.get().build();
+    DeletedMessage DELETED_MESSAGE_2 = DeletedMessage.builder()
+        .messageId(MESSAGE_ID_2)
+        .originMailboxes(MAILBOX_ID_1, MAILBOX_ID_2)
+        .user(USER)
+        .deliveryDate(DELIVERY_DATE)
+        .deletionDate(DELETION_DATE)
+        .content(() -> new ByteArrayInputStream(CONTENT))
+        .sender(MaybeSender.of(SENDER))
+        .recipients(RECIPIENT1, RECIPIENT2)
+        .hasAttachment(false)
+        .build();
+}
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageTest.java
 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageTest.java
index 1ea1b6a..1426d74 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageTest.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageTest.java
@@ -19,32 +19,30 @@
 
 package org.apache.james.vault;
 
+import static org.apache.james.vault.DeletedMessageFixture.CONTENT;
+import static org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE;
+import static 
org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE_WITH_SUBJECT;
+import static org.apache.james.vault.DeletedMessageFixture.DELETION_DATE;
+import static org.apache.james.vault.DeletedMessageFixture.DELIVERY_DATE;
+import static org.apache.james.vault.DeletedMessageFixture.MAILBOX_ID_1;
+import static org.apache.james.vault.DeletedMessageFixture.MAILBOX_ID_2;
+import static org.apache.james.vault.DeletedMessageFixture.MESSAGE_ID;
+import static org.apache.james.vault.DeletedMessageFixture.SUBJECT;
+import static org.apache.james.vault.DeletedMessageFixture.USER;
+import static org.apache.mailet.base.MailAddressFixture.RECIPIENT1;
+import static org.apache.mailet.base.MailAddressFixture.RECIPIENT2;
+import static org.apache.mailet.base.MailAddressFixture.SENDER;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.ByteArrayInputStream;
-import java.nio.charset.StandardCharsets;
-import java.time.ZonedDateTime;
 
-import org.apache.james.core.MailAddress;
 import org.apache.james.core.MaybeSender;
-import org.apache.james.core.User;
-import org.apache.james.mailbox.inmemory.InMemoryId;
-import org.apache.james.mailbox.inmemory.InMemoryMessageId;
 import org.assertj.core.api.SoftAssertions;
 import org.junit.jupiter.api.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class DeletedMessageTest {
-    private static final InMemoryMessageId MESSAGE_ID = 
InMemoryMessageId.of(42);
-    private static final InMemoryId MAILBOX_ID_1 = InMemoryId.of(43);
-    private static final InMemoryId MAILBOX_ID_2 = InMemoryId.of(44);
-    private static final User USER = User.fromUsername("[email protected]");
-    private static final ZonedDateTime DELIVERY_DATE = 
ZonedDateTime.parse("2014-10-30T14:12:00Z");
-    private static final ZonedDateTime DELETION_DATE = 
ZonedDateTime.parse("2015-10-30T14:12:00Z");
-    private static final byte[] CONTENT = "header: 
value\r\n\r\ncontent".getBytes(StandardCharsets.UTF_8);
-    private static final String SUBJECT = "subject";
-
     @Test
     void deletedMessageShouldMatchBeanContract() {
         EqualsVerifier.forClass(DeletedMessage.class)
@@ -52,56 +50,25 @@ class DeletedMessageTest {
     }
 
     @Test
-    void buildShouldReturnDeletedMessageWithAllCompulsoryFields() throws 
Exception {
-        MaybeSender sender = MaybeSender.of(new 
MailAddress("[email protected]"));
-        MailAddress recipient1 = new MailAddress("[email protected]");
-        MailAddress recipient2 = new MailAddress("[email protected]");
-        DeletedMessage deletedMessage = DeletedMessage.builder()
-            .messageId(MESSAGE_ID)
-            .originMailboxes(MAILBOX_ID_1, MAILBOX_ID_2)
-            .user(USER)
-            .deliveryDate(DELIVERY_DATE)
-            .deletionDate(DELETION_DATE)
-            .content(() -> new ByteArrayInputStream(CONTENT))
-            .sender(sender)
-            .recipients(recipient1, recipient2)
-            .hasAttachment(false)
-            .build();
-
+    void buildShouldReturnDeletedMessageWithAllCompulsoryFields() {
         SoftAssertions.assertSoftly(
             soft -> {
-                
soft.assertThat(deletedMessage.getMessageId()).isEqualTo(MESSAGE_ID);
-                
soft.assertThat(deletedMessage.getOriginMailboxes()).containsOnly(MAILBOX_ID_1, 
MAILBOX_ID_2);
-                soft.assertThat(deletedMessage.getOwner()).isEqualTo(USER);
-                
soft.assertThat(deletedMessage.getDeliveryDate()).isEqualTo(DELIVERY_DATE);
-                
soft.assertThat(deletedMessage.getDeletionDate()).isEqualTo(DELETION_DATE);
-                
soft.assertThat(deletedMessage.getContent().get()).hasSameContentAs(new 
ByteArrayInputStream(CONTENT));
-                soft.assertThat(deletedMessage.getSender()).isEqualTo(sender);
-                
soft.assertThat(deletedMessage.getRecipients()).containsOnly(recipient1, 
recipient2);
-                soft.assertThat(deletedMessage.hasAttachment()).isFalse();
-                soft.assertThat(deletedMessage.getSubject()).isEmpty();
+                
soft.assertThat(DELETED_MESSAGE.getMessageId()).isEqualTo(MESSAGE_ID);
+                
soft.assertThat(DELETED_MESSAGE.getOriginMailboxes()).containsOnly(MAILBOX_ID_1,
 MAILBOX_ID_2);
+                soft.assertThat(DELETED_MESSAGE.getOwner()).isEqualTo(USER);
+                
soft.assertThat(DELETED_MESSAGE.getDeliveryDate()).isEqualTo(DELIVERY_DATE);
+                
soft.assertThat(DELETED_MESSAGE.getDeletionDate()).isEqualTo(DELETION_DATE);
+                
soft.assertThat(DELETED_MESSAGE.getContent().get()).hasSameContentAs(new 
ByteArrayInputStream(CONTENT));
+                
soft.assertThat(DELETED_MESSAGE.getSender()).isEqualTo(MaybeSender.of(SENDER));
+                
soft.assertThat(DELETED_MESSAGE.getRecipients()).containsOnly(RECIPIENT1, 
RECIPIENT2);
+                soft.assertThat(DELETED_MESSAGE.hasAttachment()).isFalse();
+                soft.assertThat(DELETED_MESSAGE.getSubject()).isEmpty();
             }
         );
     }
 
     @Test
-    void buildShouldReturnDeletedMessageWithSubject() throws Exception {
-        MaybeSender sender = MaybeSender.of(new 
MailAddress("[email protected]"));
-        MailAddress recipient1 = new MailAddress("[email protected]");
-        MailAddress recipient2 = new MailAddress("[email protected]");
-        DeletedMessage deletedMessage = DeletedMessage.builder()
-            .messageId(MESSAGE_ID)
-            .originMailboxes(MAILBOX_ID_1, MAILBOX_ID_2)
-            .user(USER)
-            .deliveryDate(DELIVERY_DATE)
-            .deletionDate(DELETION_DATE)
-            .content(() -> new ByteArrayInputStream(CONTENT))
-            .sender(sender)
-            .recipients(recipient1, recipient2)
-            .hasAttachment(false)
-            .subject(SUBJECT)
-            .build();
-
-        assertThat(deletedMessage.getSubject()).contains(SUBJECT);
+    void buildShouldReturnDeletedMessageWithSubject() {
+        
assertThat(DELETED_MESSAGE_WITH_SUBJECT.getSubject()).contains(SUBJECT);
     }
 }
\ No newline at end of file
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java
 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java
new file mode 100644
index 0000000..1474763
--- /dev/null
+++ 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java
@@ -0,0 +1,114 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.vault;
+
+import static org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE;
+import static org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE_2;
+import static org.apache.james.vault.DeletedMessageFixture.MESSAGE_ID;
+import static org.apache.james.vault.DeletedMessageFixture.USER;
+import static org.apache.james.vault.DeletedMessageFixture.USER_2;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.junit.jupiter.api.Test;
+
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+public interface DeletedMessageVaultContract {
+    DeletedMessageVault getVault();
+
+    @Test
+    default void searchAllShouldThrowOnNullUser() {
+       assertThatThrownBy(() -> getVault().search(null, Query.all()))
+           .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    default void searchAllShouldThrowOnNullQuery() {
+       assertThatThrownBy(() -> getVault().search(USER, null))
+           .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    default void appendShouldThrowOnNullMessage() {
+       assertThatThrownBy(() -> getVault().append(USER, null))
+           .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    default void appendShouldThrowOnNullUser() {
+       assertThatThrownBy(() -> getVault().append(null, DELETED_MESSAGE))
+           .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    default void deleteShouldThrowOnNullMessageId() {
+       assertThatThrownBy(() -> getVault().delete(null, MESSAGE_ID))
+           .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    default void deleteShouldThrowOnNullUser() {
+       assertThatThrownBy(() -> getVault().delete(USER, null))
+           .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    default void searchAllShouldReturnEmptyWhenNoItem() {
+        assertThat(Flux.from(getVault().search(USER, 
Query.all())).collectList().block())
+            .isEmpty();
+    }
+
+    @Test
+    default void searchAllShouldReturnContainedItems() {
+        Mono.from(getVault().append(USER, DELETED_MESSAGE)).block();
+
+        assertThat(Flux.from(getVault().search(USER, 
Query.all())).collectList().block())
+            .containsOnly(DELETED_MESSAGE);
+    }
+
+    @Test
+    default void searchAllShouldReturnAllContainedItems() {
+        Mono.from(getVault().append(USER, DELETED_MESSAGE)).block();
+        Mono.from(getVault().append(USER, DELETED_MESSAGE_2)).block();
+
+        assertThat(Flux.from(getVault().search(USER, 
Query.all())).collectList().block())
+            .containsOnly(DELETED_MESSAGE, DELETED_MESSAGE_2);
+    }
+
+    @Test
+    default void vaultShouldBePartitionnedByUser() {
+        Mono.from(getVault().append(USER, DELETED_MESSAGE)).block();
+
+        assertThat(Flux.from(getVault().search(USER_2, 
Query.all())).collectList().block())
+            .isEmpty();
+    }
+
+    @Test
+    default void searchAllShouldNotReturnDeletedItems() {
+        Mono.from(getVault().append(USER, DELETED_MESSAGE)).block();
+
+        Mono.from(getVault().delete(USER, MESSAGE_ID)).block();
+
+        assertThat(Flux.from(getVault().search(USER, 
Query.all())).collectList().block())
+            .isEmpty();
+    }
+}


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

Reply via email to