JAMES-2293 Reading a non-existing mailRepository should not create it

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e7274332
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e7274332
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e7274332

Branch: refs/heads/master
Commit: e72743323ba94107fb86e40fe86251c416167df9
Parents: abf91be
Author: benwa <[email protected]>
Authored: Tue Jan 23 11:04:53 2018 +0700
Committer: benwa <[email protected]>
Committed: Thu Jan 25 11:39:29 2018 +0700

----------------------------------------------------------------------
 .../utils/InMemoryMailRepositoryStore.java      |  6 ++
 .../utils/InMemoryMailRepositoryStoreTest.java  | 16 +++++
 .../MailRepositoryStoreBeanFactory.java         |  6 ++
 .../mailrepository/api/MailRepositoryStore.java |  9 ++-
 .../mock/MockMailRepositoryStore.java           |  9 +--
 .../WebAdminServerIntegrationTest.java          | 16 +++++
 .../service/MailRepositoryStoreService.java     | 23 +++++--
 .../routes/MailRepositoriesRoutesTest.java      | 71 ++++++++++++++------
 .../service/MailRepositoryStoreServiceTest.java | 10 +--
 9 files changed, 131 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
index dd6bcf1..abf63a6 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
@@ -22,6 +22,7 @@ package org.apache.james.utils;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -86,6 +87,11 @@ public class InMemoryMailRepositoryStore implements 
MailRepositoryStore, Configu
     }
 
     @Override
+    public Optional<MailRepository> get(String url) throws 
MailRepositoryStoreException {
+        return 
Optional.ofNullable(destinationToRepositoryAssociations.get(url));
+    }
+
+    @Override
     public MailRepository select(String destination) throws 
MailRepositoryStoreException {
         MailRepository mailRepository = 
destinationToRepositoryAssociations.get(destination);
         if (mailRepository != null) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
index 6aa89a2..ceec2cd 100644
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
+++ 
b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/InMemoryMailRepositoryStoreTest.java
@@ -25,6 +25,7 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.file.FileMailRepository;
 import org.apache.james.modules.server.MailStoreRepositoryModule;
@@ -116,4 +117,19 @@ public class InMemoryMailRepositoryStoreTest {
         assertThat(repositoryStore.getUrls()).containsExactly(url1);
     }
 
+    @Test
+    public void getShouldReturnEmptyWhenUrlNotInUse() throws Exception {
+        assertThat(repositoryStore.get("file://repo"))
+            .isEmpty();
+    }
+
+    @Test
+    public void getShouldReturnPreviouslyCreatedMailRepository() throws 
Exception {
+        String url = "file://repo";
+        MailRepository mailRepository = repositoryStore.select(url);
+
+        assertThat(repositoryStore.get(url))
+            .contains(mailRepository);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
----------------------------------------------------------------------
diff --git 
a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
 
b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
index 5e48cf4..404ac21 100644
--- 
a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
+++ 
b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import javax.annotation.PostConstruct;
 
@@ -88,6 +89,11 @@ public class MailRepositoryStoreBeanFactory extends 
AbstractBeanFactory implemen
 
     }
 
+    @Override
+    public Optional<MailRepository> get(String url) throws 
MailRepositoryStoreException {
+        return Optional.ofNullable(repositories.get(url));
+    }
+
     /**
      * <p>
      * Registers a new mail repository type in the mail store's registry based

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
 
b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
index d44d669..a454767 100644
--- 
a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
+++ 
b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
@@ -20,11 +20,12 @@
 package org.apache.james.mailrepository.api;
 
 import java.util.List;
+import java.util.Optional;
 
 public interface MailRepositoryStore {
 
     /**
-     * Select the {@link MailRepository} for the given url
+     * Select the {@link MailRepository} for the given url. Repository will be 
created if it does not exist already.
      * 
      * @param url
      * @return repository
@@ -33,6 +34,12 @@ public interface MailRepositoryStore {
     MailRepository select(String url) throws MailRepositoryStoreException;
 
     /**
+     * Returns the {@link MailRepository} for the given url.
+     * This mail repository will not be created if it does not exist.
+     */
+    Optional<MailRepository> get(String url) throws 
MailRepositoryStoreException;
+
+    /**
      * Return a {@link List} which contains all urls of the selected
      * {@link MailRepository}'s
      * 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
 
b/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
index 6d16b4c..ef9e085 100644
--- 
a/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
+++ 
b/server/data/data-library/src/test/java/org/apache/james/mailrepository/mock/MockMailRepositoryStore.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
@@ -37,12 +38,12 @@ public class MockMailRepositoryStore implements 
MailRepositoryStore {
 
     @Override
     public MailRepository select(String url) throws 
MailRepositoryStoreException {
-        return get(url);
+        return storedObjectMap.get(url);
     }
 
-    private MailRepository get(String key) {
-        System.out.println(key);
-        return storedObjectMap.get(key);
+    @Override
+    public Optional<MailRepository> get(String url) throws 
MailRepositoryStoreException {
+        return Optional.ofNullable(storedObjectMap.get(url));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
index 96d488d..eb8236e 100644
--- 
a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
@@ -118,6 +118,22 @@ public class WebAdminServerIntegrationTest {
     }
 
     @Test
+    public void gettingANonExistingMailRepositoryShouldNotCreateIt() throws 
Exception {
+        given()
+            .get(MailRepositoriesRoutes.MAIL_REPOSITORIES + 
"file%3A%2F%2Fvar%2Fmail%2Fcustom%2F");
+
+        when()
+            .get(MailRepositoriesRoutes.MAIL_REPOSITORIES)
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .body("repository", containsInAnyOrder(
+                "file://var/mail/error/",
+                "file://var/mail/relay-denied/",
+                "file://var/mail/spam/",
+                "file://var/mail/address-error/"));
+    }
+
+    @Test
     public void deleteShouldRemoveTheGivenDomain() throws Exception {
         dataProbe.addDomain(DOMAIN);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
 
b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
index fd17507..0f7c752 100644
--- 
a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
+++ 
b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
@@ -34,6 +34,8 @@ import org.apache.james.util.streams.Offset;
 import org.apache.james.webadmin.dto.MailDto;
 import org.apache.james.webadmin.dto.MailKey;
 import org.apache.james.webadmin.dto.MailRepositoryResponse;
+import org.apache.james.webadmin.utils.ErrorResponder;
+import org.eclipse.jetty.http.HttpStatus;
 
 import com.github.fge.lambdas.Throwing;
 import com.github.fge.lambdas.functions.ThrowingFunction;
@@ -54,8 +56,9 @@ public class MailRepositoryStoreService {
             .collect(Guavate.toImmutableList());
     }
 
+
     public Optional<List<MailKey>> listMails(String url, Offset offset, Limit 
limit) throws MailRepositoryStore.MailRepositoryStoreException, 
MessagingException {
-        Optional<MailRepository> mailRepository = 
Optional.ofNullable(mailRepositoryStore.select(url));
+        Optional<MailRepository> mailRepository = 
Optional.ofNullable(getRepository(url));
         ThrowingFunction<MailRepository, List<MailKey>> list = repository -> 
list(repository, offset, limit);
         return mailRepository.map(Throwing.function(list).sneakyThrow());
     }
@@ -68,26 +71,34 @@ public class MailRepositoryStoreService {
                 .collect(Guavate.toImmutableList());
     }
 
-
     public Optional<Long> size(String url) throws 
MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        Optional<MailRepository> mailRepository = 
Optional.ofNullable(mailRepositoryStore.select(url));
+        Optional<MailRepository> mailRepository = 
Optional.ofNullable(getRepository(url));
         return 
mailRepository.map(Throwing.function(MailRepository::size).sneakyThrow());
     }
 
     public Optional<MailDto> retrieveMail(String url, String mailKey) throws 
MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        MailRepository mailRepository = mailRepositoryStore.select(url);
+        MailRepository mailRepository = getRepository(url);
 
         return Optional.ofNullable(mailRepository.retrieve(mailKey))
             .map(Throwing.function(MailDto::fromMail).sneakyThrow());
     }
 
     public void deleteMail(String url, String mailKey) throws 
MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        mailRepositoryStore.select(url)
+        getRepository(url)
             .remove(mailKey);
     }
 
     public Task createClearMailRepositoryTask(String url) throws 
MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        return new ClearMailRepositoryTask(mailRepositoryStore.select(url), 
url);
+        return new ClearMailRepositoryTask(getRepository(url), url);
+    }
+
+    private MailRepository getRepository(String url) throws 
MailRepositoryStore.MailRepositoryStoreException {
+        return mailRepositoryStore.get(url)
+            .orElseThrow(() -> ErrorResponder.builder()
+                .statusCode(HttpStatus.NOT_FOUND_404)
+                .type(ErrorResponder.ErrorType.NOT_FOUND)
+                .message(url + "does not exist")
+                .haltError());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 34edfdf..14a6b8a 100644
--- 
a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -36,6 +36,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
@@ -143,6 +144,8 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnNotFoundWhenNoRepository() throws 
Exception {
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
+
         when()
             .get(MY_REPO_MAILS)
         .then()
@@ -151,7 +154,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnEmptyWhenNoMail() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .get(MY_REPO_MAILS)
@@ -162,7 +165,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnContainedKeys() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -181,7 +184,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldApplyLimitAndOffset() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -203,7 +206,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldHandleErrorGracefully() throws Exception {
-        when(mailRepositoryStore.select(URL_MY_REPO))
+        when(mailRepositoryStore.get(URL_MY_REPO))
             .thenThrow(new 
MailRepositoryStore.MailRepositoryStoreException("message"));
 
         when()
@@ -240,7 +243,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldReturnEmptyWhenOffsetExceedsSize() throws 
Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -283,7 +286,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void listingKeysShouldIgnoreZeroedOffset() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -313,6 +316,8 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositoryShouldReturnNotFoundWhenNone() throws 
Exception {
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
+
         given()
             .get(URL_ESCAPED_MY_REPO)
         .then()
@@ -321,7 +326,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositoryShouldReturnBasicInformation() throws 
Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         given()
             .get(URL_ESCAPED_MY_REPO)
@@ -334,7 +339,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositorySizeShouldReturnZeroWhenEmpty() throws 
Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         given()
             .get(URL_ESCAPED_MY_REPO)
@@ -346,7 +351,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingRepositorySizeShouldReturnNumberOfContainedMails() 
throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -362,7 +367,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldDisplayItsInformation() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name = "name1";
         String sender = "sender@domain";
@@ -391,7 +396,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldNotFailWhenOnlyNameProperty() throws 
Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name = "name1";
         mailRepository.store(FakeMail.builder()
@@ -411,7 +416,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void retrievingAMailShouldFailWhenUnknown() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name = "name";
         when()
@@ -425,7 +430,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldRemoveIt() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name1 = "name1";
         String name2 = "name2";
@@ -449,7 +454,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldReturnOkWhenExist() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name1 = "name1";
         mailRepository.store(FakeMail.builder()
@@ -464,7 +469,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAMailShouldReturnOkWhenNotExist() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .delete(URL_ESCAPED_MY_REPO + "/mails/name")
@@ -474,7 +479,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void deletingAllMailsShouldCreateATask() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
@@ -486,7 +491,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void patchShouldOnlySupportClear() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .patch(URL_ESCAPED_MY_REPO + "/mails?action=invalid")
@@ -499,7 +504,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void patchShouldRequireAnAction() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         when()
             .patch(URL_ESCAPED_MY_REPO + "/mails")
@@ -512,7 +517,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void clearTaskShouldHaveDetails() throws Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         String name1 = "name1";
         String name2 = "name2";
@@ -546,7 +551,7 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void clearTaskShouldRemoveAllTheMailsFromTheMailRepository() throws 
Exception {
-        
when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository);
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
         mailRepository.store(FakeMail.builder()
             .name("name1")
@@ -571,4 +576,30 @@ public class MailRepositoriesRoutesTest {
             .body("", hasSize(0));
     }
 
+    @Test
+    public void patchShouldReturnNotFoundWhenNoMailRepository() throws 
Exception {
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
+
+        when()
+            .patch(URL_ESCAPED_MY_REPO + "/mails?action=clear")
+        .then()
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .body("statusCode", is(404))
+            .body("type", is(ErrorResponder.ErrorType.NOT_FOUND.getType()))
+            .body("message", is(URL_MY_REPO + "does not exist"));
+    }
+
+    @Test
+    public void deleteShouldReturnNotFoundWhenNoMailRepository() throws 
Exception {
+        
when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.empty());
+
+        when()
+            .delete(URL_ESCAPED_MY_REPO + "/mails/any")
+        .then()
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .body("statusCode", is(404))
+            .body("type", is(ErrorResponder.ErrorType.NOT_FOUND.getType()))
+            .body("message", is(URL_MY_REPO + "does not exist"));
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7274332/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
 
b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
index 505d5ca..fb6fd66 100644
--- 
a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
@@ -23,6 +23,8 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.util.Optional;
+
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
 import org.apache.james.util.streams.Limit;
@@ -77,7 +79,7 @@ public class MailRepositoryStoreServiceTest {
 
     @Test
     public void listMailsShouldThrowWhenMailRepositoryStoreThrows() throws 
Exception {
-        when(mailRepositoryStore.select(FIRST_REPOSITORY))
+        when(mailRepositoryStore.get(FIRST_REPOSITORY))
             .thenThrow(new 
MailRepositoryStore.MailRepositoryStoreException("message"));
 
         assertThatThrownBy(() -> testee.listMails(FIRST_REPOSITORY, 
Offset.none(), Limit.unlimited()))
@@ -86,7 +88,7 @@ public class MailRepositoryStoreServiceTest {
 
     @Test
     public void listMailsShouldReturnEmptyWhenMailRepositoryIsEmpty() throws 
Exception {
-        
when(mailRepositoryStore.select(FIRST_REPOSITORY)).thenReturn(repository);
+        
when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
 
         assertThat(testee.listMails(FIRST_REPOSITORY, Offset.none(), 
Limit.unlimited()).get())
             .isEmpty();
@@ -94,7 +96,7 @@ public class MailRepositoryStoreServiceTest {
 
     @Test
     public void listMailsShouldReturnContainedMailKeys() throws Exception {
-        
when(mailRepositoryStore.select(FIRST_REPOSITORY)).thenReturn(repository);
+        
when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
 
         repository.store(FakeMail.builder()
             .name(NAME_1)
@@ -109,7 +111,7 @@ public class MailRepositoryStoreServiceTest {
 
     @Test
     public void listMailsShouldApplyLimitAndOffset() throws Exception {
-        
when(mailRepositoryStore.select(FIRST_REPOSITORY)).thenReturn(repository);
+        
when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
 
         repository.store(FakeMail.builder()
             .name(NAME_1)


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

Reply via email to