JAMES-1978 Provide tests for InMemorySubscriptionMapper

With many thanks to:

    Nguyen Thi Mai and Le Thi Huong Lai for their work on Quotas and In memory 
subscriptions
    Tran Thi & My Linh for their work on TooMuchLines
    txc1996 & Van Thanh For improving readability of SMTPAuthIsSuccessfulTest
    thienan090196 & Tran Thi & My Linh for their tests on RecipientIsLocalTest

>From Passerelle Numeriques VietNam


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

Branch: refs/heads/master
Commit: f1ea122561dc701fe869c75eaf14d2eaa1069437
Parents: bde101f
Author: Benoit Tellier <btell...@linagora.com>
Authored: Tue Dec 27 11:31:38 2016 +0700
Committer: benwa <btell...@linagora.com>
Committed: Wed Mar 29 08:00:16 2017 +0700

----------------------------------------------------------------------
 .../user/InMemorySubscriptionMapper.java        |  26 +---
 .../user/InMemorySubscriptionMapperTest.java    | 126 +++++++++++++++++++
 .../user/model/impl/SimpleSubscription.java     |  23 +++-
 3 files changed, 148 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f1ea1225/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
index de5ff53..741799c 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
@@ -28,6 +28,8 @@ import 
org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
 
+import com.google.common.collect.ImmutableList;
+
 public class InMemorySubscriptionMapper extends NonTransactionalMapper 
implements SubscriptionMapper {
     
     private static final int INITIAL_SIZE = 64;
@@ -37,9 +39,6 @@ public class InMemorySubscriptionMapper extends 
NonTransactionalMapper implement
         subscriptionsByUser = new ConcurrentHashMap<String, 
List<Subscription>>(INITIAL_SIZE);
     }
 
-    /**
-     * @see 
org.apache.james.mailbox.store.user.SubscriptionMapper#delete(org.apache.james.mailbox.store.user.model.Subscription)
-     */
     public synchronized void delete(Subscription subscription) {
         final String user = subscription.getUser();
         final List<Subscription> subscriptions = subscriptionsByUser.get(user);
@@ -48,9 +47,6 @@ public class InMemorySubscriptionMapper extends 
NonTransactionalMapper implement
         }
     }
 
-    /**
-     * @see 
org.apache.james.mailbox.store.user.SubscriptionMapper#findMailboxSubscriptionForUser(java.lang.String,
 java.lang.String)
-     */
     public Subscription findMailboxSubscriptionForUser(String user, String 
mailbox) {
         final List<Subscription> subscriptions = subscriptionsByUser.get(user);
         Subscription result = null;
@@ -65,25 +61,17 @@ public class InMemorySubscriptionMapper extends 
NonTransactionalMapper implement
         return result;
     }
 
-    /**
-     * @see 
org.apache.james.mailbox.store.user.SubscriptionMapper#findSubscriptionsForUser(java.lang.String)
-     */
-    @SuppressWarnings("unchecked")
     public List<Subscription> findSubscriptionsForUser(String user) {
         final List<Subscription> subcriptions = subscriptionsByUser.get(user);
         final List<Subscription> results;
         if (subcriptions == null) {
-            results = Collections.EMPTY_LIST;
+            results = ImmutableList.of();
         } else {
-            // Make a copy to prevent concurrent modifications
-            results = new ArrayList<Subscription>(subcriptions);
+            results = ImmutableList.copyOf(subcriptions);
         }
         return results;
     }
 
-    /**
-     * @see 
org.apache.james.mailbox.store.user.SubscriptionMapper#save(org.apache.james.mailbox.store.user.model.Subscription)
-     */
     public synchronized void save(Subscription subscription) {
         final String user = subscription.getUser();
         final List<Subscription> subscriptions = subscriptionsByUser.get(user);
@@ -100,12 +88,8 @@ public class InMemorySubscriptionMapper extends 
NonTransactionalMapper implement
         subscriptionsByUser.clear();
     }
 
-    /**
-     * Do nothing
-     */
     public void endRequest() {
-        // nothing todo
-        
+        // nothing to do
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f1ea1225/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java
new file mode 100644
index 0000000..8ef5b2e
--- /dev/null
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java
@@ -0,0 +1,126 @@
+/****************************************************************
+ * 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.mailbox.inmemory.user;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.List;
+
+import org.apache.james.mailbox.store.user.model.Subscription;
+import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
+import org.junit.Before;
+import org.junit.Test;
+
+public class InMemorySubscriptionMapperTest {
+
+    private static final String USER_1 = "user1";
+    private static final String USER_2 = "user2";
+    private static final String MAILBOX_1 = "mailbox1";
+    private static final String MAILBOX_2 = "mailbox2";
+
+    private InMemorySubscriptionMapper testee;
+
+    @Before
+    public void setUp() {
+        testee = new InMemorySubscriptionMapper();
+    }
+
+    @Test
+    public void findSubscriptionsForUserShouldBeEmptyByDefault() {
+        List<Subscription> subscriptions = 
testee.findSubscriptionsForUser(USER_1);
+
+        assertThat(subscriptions).isEmpty();
+    }
+
+    @Test
+    public void findMailboxSubscriptionForUserShouldReturnNullByDefault() {
+        Subscription subscriptions = 
testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1);
+
+        assertThat(subscriptions).isNull();
+    }
+
+    @Test
+    public void findMailboxSubscriptionForUserShouldReturnSubscription() {
+        SimpleSubscription subscription = new SimpleSubscription(USER_1, 
MAILBOX_1);
+        testee.save(subscription);
+
+        List<Subscription> results = testee.findSubscriptionsForUser(USER_1);
+
+        assertThat(results).containsOnly(subscription);
+    }
+
+    @Test
+    public void findSubscriptionsForUserShouldReturnSubscriptions() {
+        SimpleSubscription subscription1 = new SimpleSubscription(USER_1, 
MAILBOX_1);
+        SimpleSubscription subscription2 = new SimpleSubscription(USER_1, 
MAILBOX_2);
+        testee.save(subscription1);
+        testee.save(subscription2);
+
+        List<Subscription> results = testee.findSubscriptionsForUser(USER_1);
+
+        assertThat(results).containsOnly(subscription1, subscription2);
+    }
+
+    @Test
+    public void findSubscriptionsForUserShouldReturnOnlyUserSubscriptions() {
+        SimpleSubscription subscription1 = new 
SimpleSubscription(USER_1,MAILBOX_1);
+        SimpleSubscription subscription2 = new 
SimpleSubscription(USER_2,MAILBOX_2);
+        testee.save(subscription1);
+        testee.save(subscription2);
+
+        List<Subscription> results = testee.findSubscriptionsForUser(USER_1);
+
+        assertThat(results).containsOnly(subscription1);
+    }
+
+    @Test
+    public void 
findMailboxSubscriptionForUserShouldReturnOnlyUserSubscriptions() {
+        SimpleSubscription subscription1 = new 
SimpleSubscription(USER_1,MAILBOX_1);
+        SimpleSubscription subscription2 = new 
SimpleSubscription(USER_2,MAILBOX_1);
+        testee.save(subscription1);
+        testee.save(subscription2);
+
+        Subscription result = 
testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1);
+
+        assertThat(result).isEqualTo(result);
+    }
+
+    @Test
+    public void 
findMailboxSubscriptionForUserShouldReturnSubscriptionConcerningTheMailbox() {
+        SimpleSubscription subscription1 = new 
SimpleSubscription(USER_1,MAILBOX_1);
+        SimpleSubscription subscription2 = new 
SimpleSubscription(USER_1,MAILBOX_2);
+        testee.save(subscription1);
+        testee.save(subscription2);
+
+        Subscription result = 
testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1);
+
+        assertThat(result).isEqualTo(result);
+    }
+
+    @Test
+    public void deleteShouldRemoveSubscription() {
+        SimpleSubscription subscription = new SimpleSubscription(USER_1, 
MAILBOX_1);
+        testee.save(subscription);
+
+        testee.delete(subscription);
+
+        assertThat(testee.findSubscriptionsForUser(USER_1)).isEmpty();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/f1ea1225/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java
index beb5af6..39bf245 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java
@@ -20,6 +20,8 @@ package org.apache.james.mailbox.store.user.model.impl;
 
 import org.apache.james.mailbox.store.user.model.Subscription;
 
+import com.google.common.base.Objects;
+
 public class SimpleSubscription implements Subscription {
 
     private final String user;
@@ -30,18 +32,27 @@ public class SimpleSubscription implements Subscription {
         this.mailbox = mailbox;
     }
 
-    /**
-     * @see org.apache.james.mailbox.store.user.model.Subscription#getMailbox()
-     */
     public String getMailbox() {
         return mailbox;
     }
 
-    /**
-     * @see org.apache.james.mailbox.store.user.model.Subscription#getUser()
-     */
     public String getUser() {
         return user;
     }
 
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof SimpleSubscription) {
+            SimpleSubscription that = (SimpleSubscription) o;
+
+            return Objects.equal(this.user, that.user)
+                && Objects.equal(this.mailbox, that.mailbox);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hashCode(user, mailbox);
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to