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 e9e38a5ef2c1e1a9c3193d570db9fb8c78b6d8c9
Author: Tran Tien Duc <[email protected]>
AuthorDate: Fri Feb 14 10:20:49 2020 +0700

    JAMES-3056 Distinct on StoreMailboxManager.list()
---
 .../CassandraMailboxManagerConsistencyTest.java    | 115 +++++++++++++++++++--
 .../james/mailbox/store/StoreMailboxManager.java   |   1 +
 2 files changed, 110 insertions(+), 6 deletions(-)

diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java
index 2278c2a..5ec2154 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java
@@ -103,7 +103,7 @@ class CassandraMailboxManagerConsistencyTest {
     }
 
     @Nested
-    class FailsOnCreate {
+    class FailuresDuringCreation {
 
         @Test
         void createMailboxShouldBeConsistentWhenMailboxDaoFails() {
@@ -137,7 +137,7 @@ class CassandraMailboxManagerConsistencyTest {
             }));
         }
 
-        @Disabled("JAMES-3056 createMailbox() return an empty Optional")
+        @Disabled("JAMES-3056 createMailbox() doesn't return mailboxId while 
it's supposed to")
         @Test
         void 
createMailboxAfterAFailedCreationShouldCreateTheMailboxWhenMailboxDaoFails() 
throws Exception {
             doReturn(Mono.error(new RuntimeException("mock exception")))
@@ -174,7 +174,7 @@ class CassandraMailboxManagerConsistencyTest {
             }));
         }
 
-        @Disabled("JAMES-3056 createMailbox() return an empty Optional")
+        @Disabled("JAMES-3056 createMailbox() doesn't return mailboxId while 
it's supposed to")
         @Test
         void 
createMailboxAfterDeletingShouldCreateTheMailboxWhenMailboxDaoFails() throws 
Exception {
             doReturn(Mono.error(new RuntimeException("mock exception")))
@@ -215,7 +215,7 @@ class CassandraMailboxManagerConsistencyTest {
     }
 
     @Nested
-    class FailsOnRename {
+    class FailuresDuringRenaming {
 
         @Test
         void renameShouldBeConsistentWhenMailboxDaoFails() throws Exception {
@@ -367,7 +367,7 @@ class CassandraMailboxManagerConsistencyTest {
     }
 
     @Nested
-    class FailsOnDelete {
+    class FailuresOnDeletion {
 
         @Nested
         class DeleteOnce {
@@ -463,6 +463,110 @@ class CassandraMailboxManagerConsistencyTest {
         }
 
         @Nested
+        class DeleteOnceThenCreate {
+
+            @Test
+            void createMailboxShouldCreateWhenMailboxDaoFailsOnDeleteByPath() 
throws Exception {
+                testee.createMailbox(inboxPath, mailboxSession);
+
+                doReturn(Mono.error(new RuntimeException("mock exception")))
+                    .doCallRealMethod()
+                    .when(mailboxDAO)
+                    .delete(any(CassandraId.class));
+
+                doQuietly(() -> testee.deleteMailbox(inboxPath, 
mailboxSession));
+                MailboxId inboxId = testee.createMailbox(inboxPath, 
mailboxSession)
+                    .get();
+
+                SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
+                    softly.assertThat(testee.search(allMailboxesSearchQuery, 
mailboxSession))
+                        .hasOnlyOneElementSatisfying(mailboxMetaData -> {
+                            
softly.assertThat(mailboxMetaData.getId()).isEqualTo(inboxId);
+                            
softly.assertThat(mailboxMetaData.getPath()).isEqualTo(inboxPath);
+                        });
+                    softly.assertThat(testee.list(mailboxSession))
+                        .containsExactly(inboxPath);
+                }));
+            }
+
+            @Test
+            void createMailboxShouldCreateWhenMailboxDaoFailsOnDeleteById() 
throws Exception {
+                MailboxId inboxId = testee.createMailbox(inboxPath, 
mailboxSession)
+                    .get();
+
+                doReturn(Mono.error(new RuntimeException("mock exception")))
+                    .doCallRealMethod()
+                    .when(mailboxDAO)
+                    .delete(any(CassandraId.class));
+
+                doQuietly(() -> testee.deleteMailbox(inboxId, mailboxSession));
+                MailboxId inboxNewId = testee.createMailbox(inboxPath, 
mailboxSession)
+                    .get();
+
+                SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
+                    softly.assertThat(testee.search(allMailboxesSearchQuery, 
mailboxSession))
+                        .hasOnlyOneElementSatisfying(mailboxMetaData -> {
+                            
softly.assertThat(mailboxMetaData.getId()).isEqualTo(inboxNewId);
+                            
softly.assertThat(mailboxMetaData.getPath()).isEqualTo(inboxPath);
+                        });
+                    softly.assertThat(testee.list(mailboxSession))
+                        .containsExactly(inboxPath);
+                }));
+            }
+
+            @Disabled("JAMES-3056 cannot create because mailbox already 
exists")
+            @Test
+            void 
createMailboxShouldCreateWhenMailboxPathDaoFailsOnDeleteByPath() throws 
Exception {
+                testee.createMailbox(inboxPath, mailboxSession);
+
+                doReturn(Mono.error(new RuntimeException("mock exception")))
+                    .doCallRealMethod()
+                    .when(mailboxPathV2DAO)
+                    .delete(inboxPath);
+
+                doQuietly(() -> testee.deleteMailbox(inboxPath, 
mailboxSession));
+                MailboxId inboxNewId = testee.createMailbox(inboxPath, 
mailboxSession)
+                    .get();
+
+                SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
+                    softly.assertThat(testee.search(allMailboxesSearchQuery, 
mailboxSession))
+                        .hasOnlyOneElementSatisfying(mailboxMetaData -> {
+                            
softly.assertThat(mailboxMetaData.getId()).isEqualTo(inboxNewId);
+                            
softly.assertThat(mailboxMetaData.getPath()).isEqualTo(inboxPath);
+                        });
+                    softly.assertThat(testee.list(mailboxSession))
+                        .containsExactly(inboxPath);
+                }));
+            }
+
+            @Disabled("JAMES-3056 cannot create because mailbox already 
exists")
+            @Test
+            void 
createMailboxShouldCreateWhenMailboxPathDaoFailsOnDeleteById() throws Exception 
{
+                MailboxId inboxId = testee.createMailbox(inboxPath, 
mailboxSession)
+                    .get();
+
+                doReturn(Mono.error(new RuntimeException("mock exception")))
+                    .doCallRealMethod()
+                    .when(mailboxPathV2DAO)
+                    .delete(inboxPath);
+
+                doQuietly(() -> testee.deleteMailbox(inboxId, mailboxSession));
+                MailboxId inboxNewId = testee.createMailbox(inboxPath, 
mailboxSession)
+                    .get();
+
+                SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
+                    softly.assertThat(testee.search(allMailboxesSearchQuery, 
mailboxSession))
+                        .hasOnlyOneElementSatisfying(mailboxMetaData -> {
+                            
softly.assertThat(mailboxMetaData.getId()).isEqualTo(inboxNewId);
+                            
softly.assertThat(mailboxMetaData.getPath()).isEqualTo(inboxPath);
+                        });
+                    softly.assertThat(testee.list(mailboxSession))
+                        .containsExactly(inboxPath);
+                }));
+            }
+        }
+
+        @Nested
         class DeleteTwice {
 
             @Disabled("JAMES-3056 list() returns one element with inboxPath")
@@ -552,7 +656,6 @@ class CassandraMailboxManagerConsistencyTest {
         @Nested
         class DeleteTwiceThenCreate {
 
-            @Disabled("JAMES-3056 list() returns two element with inboxPath 
being duplicated")
             @Test
             void createMailboxShouldCreateWhenMailboxDaoFailsOnDeleteByPath() 
throws Exception {
                 testee.createMailbox(inboxPath, mailboxSession);
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 f023f5f..31f7f7b 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
@@ -742,6 +742,7 @@ public class StoreMailboxManager implements MailboxManager {
             .list()
             .stream()
             .map(Mailbox::generateAssociatedPath)
+            .distinct()
             .collect(Guavate.toImmutableList());
     }
 


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

Reply via email to