Author: matthieu
Date: Tue Jan 26 11:17:06 2016
New Revision: 1726774

URL: http://svn.apache.org/viewvc?rev=1726774&view=rev
Log:
JAMES-1668 Enhance AbstractUsersRepositoryTest to match best test practice

        Contributed by Laura Royet

Modified:
    
james/project/trunk/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
    
james/project/trunk/server/data/data-file/src/main/java/org/apache/james/user/file/UsersFileRepository.java
    
james/project/trunk/server/data/data-file/src/test/java/org/apache/james/user/file/UsersFileRepositoryTest.java
    
james/project/trunk/server/data/data-hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java
    james/project/trunk/server/data/data-jcr/pom.xml
    
james/project/trunk/server/data/data-jdbc/src/test/java/org/apache/james/user/jdbc/AbstractUsersJdbcRepositoryTest.java
    
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
    
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
    
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
    
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
    
james/project/trunk/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java

Modified: 
james/project/trunk/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
 (original)
+++ 
james/project/trunk/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
 Tue Jan 26 11:17:06 2016
@@ -19,6 +19,20 @@
 
 package org.apache.james.mailrepository.file;
 
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.core.MimeMessageCopyOnWriteProxy;
@@ -29,20 +43,6 @@ import org.apache.james.repository.file.
 import org.apache.james.repository.file.FilePersistentStreamRepository;
 import org.apache.mailet.Mail;
 
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
 /**
  * <p>
  * Implementation of a MailRepository on a FileSystem.
@@ -250,8 +250,9 @@ public class FileMailRepository extends
 
     @Override
     protected void internalRemove(String key) throws MessagingException {
-        if (keys != null)
+        if (keys != null) {
             keys.remove(key);
+        }
         streamRepository.remove(key);
         objectRepository.remove(key);
     }

Modified: 
james/project/trunk/server/data/data-file/src/main/java/org/apache/james/user/file/UsersFileRepository.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-file/src/main/java/org/apache/james/user/file/UsersFileRepository.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-file/src/main/java/org/apache/james/user/file/UsersFileRepository.java
 (original)
+++ 
james/project/trunk/server/data/data-file/src/main/java/org/apache/james/user/file/UsersFileRepository.java
 Tue Jan 26 11:17:06 2016
@@ -206,7 +206,9 @@ public class UsersFileRepository extends
      * @see 
org.apache.james.user.api.UsersRepository#removeUser(java.lang.String)
      */
     public synchronized void removeUser(String name) throws 
UsersRepositoryException {
-        objectRepository.remove(name);
+        if (!objectRepository.remove(name)) {
+            throw new UsersRepositoryException("User " + name + " does not 
exist");
+        }
     }
 
     /**

Modified: 
james/project/trunk/server/data/data-file/src/test/java/org/apache/james/user/file/UsersFileRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-file/src/test/java/org/apache/james/user/file/UsersFileRepositoryTest.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-file/src/test/java/org/apache/james/user/file/UsersFileRepositoryTest.java
 (original)
+++ 
james/project/trunk/server/data/data-file/src/test/java/org/apache/james/user/file/UsersFileRepositoryTest.java
 Tue Jan 26 11:17:06 2016
@@ -35,6 +35,8 @@ import org.apache.james.user.lib.Abstrac
 import org.apache.james.user.lib.AbstractUsersRepositoryTest;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.slf4j.LoggerFactory;
 
 /**
@@ -45,9 +47,6 @@ public class UsersFileRepositoryTest ext
     private static final String TARGET_REPOSITORY_FOLDER = "target/var/users";
        private File targetRepositoryFolder;
 
-    /**
-     * @see junit.framework.TestCase#setUp()
-     */
     @Before
     @Override
     public void setUp() throws Exception {
@@ -61,12 +60,6 @@ public class UsersFileRepositoryTest ext
         FileUtils.forceDelete(targetRepositoryFolder);
     }
 
-    /**
-     * Create the repository to be tested.
-     * 
-     * @return the user repository
-     * @throws Exception
-     */
     @SuppressWarnings("deprecation")
     @Override
     protected AbstractUsersRepository getUsersRepository() throws Exception {
@@ -103,15 +96,12 @@ public class UsersFileRepositoryTest ext
         return res;
     }
     
-    /* Disable testUpperCaseSameUser test.
-     *
-     * @see 
org.apache.james.user.lib.AbstractUsersRepositoryTest#testUpperCaseSameUser()
-     */
     @Override
-    public void testUpperCaseSameUser() throws UsersRepositoryException {
+    @Ignore
+    @Test
+    public void addUserShouldThrowWhenSameUsernameWithDifferentCase() throws 
UsersRepositoryException {
     }
 
-
     protected void disposeUsersRepository() throws UsersRepositoryException {
         if (this.usersRepository != null) {
             Iterator<String> i = this.usersRepository.list();
@@ -121,5 +111,4 @@ public class UsersFileRepositoryTest ext
             LifecycleUtil.dispose(this.usersRepository);
         }
     }
-
 }

Modified: 
james/project/trunk/server/data/data-hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java
 (original)
+++ 
james/project/trunk/server/data/data-hbase/src/test/java/org/apache/james/user/hbase/HBaseUsersRepositoryTest.java
 Tue Jan 26 11:17:06 2016
@@ -29,6 +29,8 @@ import org.apache.james.user.lib.Abstrac
 import org.apache.james.user.lib.AbstractUsersRepositoryTest;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.slf4j.LoggerFactory;
 
 /**
@@ -79,4 +81,10 @@ public class HBaseUsersRepositoryTest ex
         userRepository.configure(new DefaultConfigurationBuilder());
         return userRepository;
     }
+    
+    @Override
+    @Ignore
+    @Test(expected = UsersRepositoryException.class)
+    public void removeUserShouldThrowWhenUserNotInRepository() throws 
UsersRepositoryException {
+    }
 }

Modified: james/project/trunk/server/data/data-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-jcr/pom.xml?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- james/project/trunk/server/data/data-jcr/pom.xml (original)
+++ james/project/trunk/server/data/data-jcr/pom.xml Tue Jan 26 11:17:06 2016
@@ -88,6 +88,12 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <version>${assertj-1.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>jackrabbit-core</artifactId>
             <scope>test</scope>

Modified: 
james/project/trunk/server/data/data-jdbc/src/test/java/org/apache/james/user/jdbc/AbstractUsersJdbcRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-jdbc/src/test/java/org/apache/james/user/jdbc/AbstractUsersJdbcRepositoryTest.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-jdbc/src/test/java/org/apache/james/user/jdbc/AbstractUsersJdbcRepositoryTest.java
 (original)
+++ 
james/project/trunk/server/data/data-jdbc/src/test/java/org/apache/james/user/jdbc/AbstractUsersJdbcRepositoryTest.java
 Tue Jan 26 11:17:06 2016
@@ -18,53 +18,16 @@
  ****************************************************************/
 package org.apache.james.user.jdbc;
 
+import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.lib.AbstractUsersRepositoryTest;
+import org.junit.Ignore;
+import org.junit.Test;
 
 public abstract class AbstractUsersJdbcRepositoryTest extends 
AbstractUsersRepositoryTest {
     
-    /* Deactivate this test for the Jdbc implementation
-     * Should be disable via @Ignore with JUnit4
-     * 
-     * @see 
org.apache.james.user.lib.AbstractUsersRepositoryTest#testUsersRepositoryEmpty()
-     */
     @Override
-    public void testUserListing() {
+    @Ignore
+    @Test(expected = UsersRepositoryException.class)
+    public void addUserShouldThrowWhenSameUsernameWithDifferentCase() throws 
UsersRepositoryException {
     }
-
-    /* Deactivate this test for the Jdbc implementation
-     * Should be disable via @Ignore with JUnit4
-     * 
-     * @see 
org.apache.james.user.lib.AbstractUsersRepositoryTest#testUsersRepositoryEmpty()
-     */
-    @Override
-    public void testUpperCaseSameUser() {
-    }
-
-    /* Deactivate this test for the Jdbc implementation
-     * Should be disable via @Ignore with JUnit4
-     * 
-     * @see 
org.apache.james.user.lib.AbstractUsersRepositoryTest#testUsersRepositoryEmpty()
-     */
-    @Override
-    public void testUserAddedIsFound() {
-    }
-
-    /* Deactivate this test for the Jdbc implementation
-     * Should be disable via @Ignore with JUnit4
-     * 
-     * @see 
org.apache.james.user.lib.AbstractUsersRepositoryTest#testUsersRepositoryEmpty()
-     */
-    @Override
-    public void testUserPassword() {
-    }
-
-    /* Deactivate this test for the Jdbc implementation
-     * Should be disable via @Ignore with JUnit4
-     * 
-     * @see 
org.apache.james.user.lib.AbstractUsersRepositoryTest#testUsersRepositoryEmpty()
-     */
-    @Override
-    public void testUserAddRemoveCycle() {
-    }
-
 }

Modified: 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
 (original)
+++ 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
 Tue Jan 26 11:17:06 2016
@@ -33,5 +33,5 @@ public interface ObjectRepository extend
 
     void put(String key, Object value);
 
-    void remove(String key);
+    boolean remove(String key);
 }

Modified: 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
 (original)
+++ 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
 Tue Jan 26 11:17:06 2016
@@ -31,5 +31,5 @@ public interface StreamRepository extend
 
     OutputStream put(String key);
 
-    void remove(String key);
+    boolean remove(String key);
 }

Modified: 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
 (original)
+++ 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
 Tue Jan 26 11:17:06 2016
@@ -261,19 +261,19 @@ public abstract class AbstractFileReposi
      * 
      * @param key
      *            the key to remove
+     * @throws IOException 
      */
-    public synchronized void remove(final String key) {
+    
+    public synchronized boolean remove(final String key) {
         try {
             FileUtils.forceDelete(getFile(key));
-            if (DEBUG)
-                getLogger().debug("removed key " + key);
-        } catch (FileNotFoundException e) {
-            getLogger().debug("File for " + key + " not found: wasn't able to 
remove");
+            return true;
+        } catch (FileNotFoundException e) { 
+            return false;
         } catch (Exception e) {
             throw new RuntimeException("Exception caught while removing" + " 
an object: " + e);
         }
     }
-
     /**
      * 
      * Indicates if the given key is associated to a contained object

Modified: 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
 (original)
+++ 
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
 Tue Jan 26 11:17:06 2016
@@ -60,7 +60,6 @@ public abstract class AbstractUsersRepos
     }
 
     protected void doConfigure(HierarchicalConfiguration config) throws 
ConfigurationException {
-
     }
 
     public void setEnableVirtualHosting(boolean virtualHosting) {

Modified: 
james/project/trunk/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java?rev=1726774&r1=1726773&r2=1726774&view=diff
==============================================================================
--- 
james/project/trunk/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
 (original)
+++ 
james/project/trunk/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
 Tue Jan 26 11:17:06 2016
@@ -18,12 +18,7 @@
  ****************************************************************/
 package org.apache.james.user.lib;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -36,16 +31,12 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-/**
- * Test basic behaviors of UsersFileRepository
- */
+
 public abstract class AbstractUsersRepositoryTest {
 
-    private static final String DOMAIN = "domain";
-    /**
-     * Users repository
-     */
-    protected AbstractUsersRepository usersRepository;
+    private static final String DOMAIN = "domain"; 
+
+    protected AbstractUsersRepository usersRepository; 
 
     /**
      * Create the repository to be tested.
@@ -59,11 +50,8 @@ public abstract class AbstractUsersRepos
     private String user2;
     private String user3;
     
-    /**
-     * @see junit.framework.TestCase#setUp()
-     */
-    @Before
-    public void setUp() throws Exception {
+    @Before 
+    public void setUp() throws Exception { 
         this.usersRepository = getUsersRepository();
         SimpleDomainList domainList = new SimpleDomainList();
         domainList.addDomain(DOMAIN);
@@ -73,14 +61,11 @@ public abstract class AbstractUsersRepos
         user3 = login("username3");
     }
 
-    /**
-     * @see junit.framework.TestCase#tearDown()
-     */
     @After
     public void tearDown() throws Exception {
         disposeUsersRepository();
     }
-
+    
     private String login(String login) throws UsersRepositoryException {
         if (usersRepository.supportVirtualHosting()) {
             return login + '@' + DOMAIN;
@@ -90,47 +75,42 @@ public abstract class AbstractUsersRepos
     }
     
     @Test
-    public void testUsersRepositoryEmpty() throws UsersRepositoryException {
-        assertEquals("users repository not empty", 0, 
usersRepository.countUsers());
-        assertFalse("users repository not empty", 
usersRepository.list().hasNext());
+    public void countUsersShouldReturnZeroWhenEmptyRepository() throws 
UsersRepositoryException {
+        //Given
+        int expected = 0;
+        //When
+        int actual = usersRepository.countUsers();
+        //Then
+        assertThat(actual).isEqualTo(expected);
     }
-
+    
     @Test
-    public void testAddUserOnce() throws UsersRepositoryException {
-        usersRepository.addUser(user1, "password");
-        try {
-            usersRepository.addUser(user1, "password2");
-            fail("User added twice!");
-        } catch (UsersRepositoryException e) {
-            // UsersRepositoryException must be thrown by implementation.
-        }
-        try {
-            usersRepository.addUser(user2, "password2");
-            assertTrue(usersRepository.contains(user2));
-            usersRepository.addUser(user3, "password3");
-            assertTrue(usersRepository.contains(user3));
-        } catch (UnsupportedOperationException e) {
+    public void countUsersShouldReturnNumberOfUsersWhenNotEmptyRepository() 
throws UsersRepositoryException {
+        //Given
+        ArrayList<String> keys = new ArrayList<String>(3);
+        keys.add(user1);
+        keys.add(user2);
+        keys.add(user3);
+        for (String username : keys) {
+            usersRepository.addUser(username, username);
         }
+        //When
+        int actual = usersRepository.countUsers();
+        //Then
+        assertThat(actual).isEqualTo(keys.size());
     }
-
+    
     @Test
-    public void testUserAddedIsFound() throws UsersRepositoryException {
-        usersRepository.addUser(user1, "password");
-        User user = usersRepository.getUserByName(user1);
-        assertNotNull(user);
-        assertEquals("username does not match", user.getUserName(), user1);
-        assertTrue("user not contained in the repository", 
usersRepository.contains(user1));
-
-        User u = usersRepository.getUserByName("uSERNAMe");
-        assertNull("found the user searching for a different case!", u);
-
-        // String realname = usersRepository.getRealName("uSERNAMe");
-        // assertNull("name is not null", realname);
-        // assertEquals("name is different", user1, realname);
+    public void listShouldReturnEmptyIteratorWhenEmptyRepository() throws 
UsersRepositoryException {
+        //When
+        Iterator<String> actual = usersRepository.list();
+        //Then
+        assertThat(actual).isEmpty();
     }
-
+    
     @Test
-    public void testUserListing() throws UsersRepositoryException {
+    public void listShouldReturnExactlyUsersInRepository() throws 
UsersRepositoryException {
+        //Given
         ArrayList<String> keys = new ArrayList<String>(3);
         keys.add(user1);
         keys.add(user2);
@@ -138,98 +118,188 @@ public abstract class AbstractUsersRepos
         for (String username : keys) {
             usersRepository.addUser(username, username);
         }
-        assertEquals("Wrong number of users found", keys.size(), 
usersRepository.countUsers());
-
-        // check list return all and only the expected users
-        ArrayList<String> check = new ArrayList<String>(keys);
-        for (Iterator<String> i = usersRepository.list(); i.hasNext();) {
-            String username = i.next();
-            if (getPasswordsEnabled()) {
-                assertTrue(usersRepository.test(username, username));
-                User u = usersRepository.getUserByName(username);
-                u.setPassword("newpass");
-                usersRepository.updateUser(u);
-            }
-            assertTrue(check.contains(username));
-            check.remove(username);
-        }
-        assertEquals("Some user has not be found", 0, check.size());
+        //When
+        Iterator<String> actual = usersRepository.list();
+        //Then
+        assertThat(actual).containsOnly(user1, user2, user3);
     }
-
+    
     @Test
-    public void testUpperCaseSameUser() throws UsersRepositoryException {
+    public void addUserShouldAddAUserWhenEmptyRepository() throws 
UsersRepositoryException {
+        //When
+        usersRepository.addUser(user2, "password2");
+        //Then
+        assertThat(usersRepository.contains(user2)).isTrue();
+    }
+    
+    @Test 
+    public void addUserShouldAddAUserWhenNotEmptyRepository() throws 
UsersRepositoryException {
+        //Given
+        usersRepository.addUser(user2, "password2");
+        //When
+        usersRepository.addUser(user3, "password3");
+        //Then
+        assertThat(usersRepository.contains(user3)).isTrue();
+    }
+    
+    @Test(expected = UsersRepositoryException.class)
+    public void addUserShouldThrowWhenSameUsernameWithDifferentCase() throws 
UsersRepositoryException {
+        //Given
         usersRepository.addUser(login("myUsername"), "password");
-        try {
-            usersRepository.addUser(login("MyUsername"), "password");
-            fail("We should not be able to insert same users, even with 
different cases");
-        } catch (UsersRepositoryException e) {
-            assertTrue("The exception message must contain the username value 
but was=" + e.getMessage(), e.
-                    getMessage().contains("MyUsername"));
-        }
+        //When
+        usersRepository.addUser(login("MyUsername"), "password"); 
+    }
+    
+    @Test(expected = UsersRepositoryException.class)
+    public void addUserShouldThrowWhenUserAlreadyPresentInRepository() throws 
UsersRepositoryException {
+        //Given
+        usersRepository.addUser(user1, "password");
+       //When
+        usersRepository.addUser(user1, "password2");
+    }
+    
+    @Test
+    public void getUserByNameShouldReturnAUserWhenContainedInRepository () 
throws UsersRepositoryException {
+        //Given
+        usersRepository.addUser(user1, "password");
+        //When
+        User actual = usersRepository.getUserByName(user1);
+        //Then
+        assertThat(actual).isNotNull();
+        assertThat(actual.getUserName()).isEqualTo(user1);
     }
 
     @Test
-    public void testUserPassword() throws UsersRepositoryException {
+    public void getUserByNameShouldReturnNullWhenDifferentCase() throws 
UsersRepositoryException {
+        //Given
+        usersRepository.addUser(login("username"), "password");
+        //When
+        User actual = usersRepository.getUserByName(login("uSERNAMe"));
+        //Then
+        assertThat(actual).isNull();
+    }
+   
+    @Test
+    public void testShouldReturnTrueWhenAUserHasACorrectPassword() throws 
UsersRepositoryException { 
+        //Given
         usersRepository.addUser(user1, "password");
-        assertEquals("didn't accept the correct password ", 
usersRepository.test(user1, "password"),
-                getPasswordsEnabled());
-        assertFalse("accepted the wrong password #1", 
usersRepository.test(user1, "password2"));
-        assertFalse("accepted the wrong password #2", 
usersRepository.test("username2", "password"));
-        assertFalse("accepted the wrong password #3", 
usersRepository.test(user1, "Password"));
-        assertFalse("accepted the wrong password #4", 
usersRepository.test(user1, "passwords"));
-        assertFalse("accepted the wrong password #5", 
usersRepository.test("userName", "password"));
+        //When
+        boolean actual = usersRepository.test(user1, "password");
+        //Then
+        assertThat(actual).isTrue();
+    }
+    
+    @Test
+    public void testShouldReturnFalseWhenAUserHasAnIncorrectPassword() throws 
UsersRepositoryException { 
+        //Given
+        usersRepository.addUser(user1, "password");
+        //When
+        boolean actual = usersRepository.test(user1, "password2");
+        //Then
+        assertThat(actual).isFalse();
+    }
+    
+    @Test
+    public void testShouldReturnFalseWhenAUserHasAnIncorrectCasePassword() 
throws UsersRepositoryException { 
+        //Given
+        usersRepository.addUser(user1, "password");
+        //When
+        boolean actual = usersRepository.test(user1, "Password");
+        //Then
+        assertThat(actual).isFalse();
+    }
+    
+    @Test
+    public void testShouldReturnFalseWhenAUserIsNotInRepository() throws 
UsersRepositoryException { 
+        //Given
+        usersRepository.addUser(login("username"), "password");
+        //When
+        boolean actual = usersRepository.test(login("username2"), "password"); 
+        //Then
+        assertThat(actual).isFalse();
     }
 
     @Test
-    public void testUserAddRemoveCycle() throws UsersRepositoryException {
-        assertFalse("accepted login when no user existed", 
usersRepository.test(user1, "password"));
-        try {
-            usersRepository.removeUser(user1);
-            // UsersFileRepository accept this call for every argument
-            // fail("removing an unknown user didn't fail!");
-        } catch (UsersRepositoryException e) {
-            // Do nothing, we should come here if test works.
-        }
+    public void testShouldReturnFalseWhenAUserHasAnIncorrectCaseName() throws 
UsersRepositoryException {
+        //Given
+        usersRepository.addUser(login("username"), "password");
+        //When
+        boolean actual= usersRepository.test(login("userName"), "password");
+        //Then
+        assertThat(actual).isFalse();
+    }
+
+    @Test
+    public void testShouldReturnFalseWhenEmptyRepository() throws 
UsersRepositoryException {
+        //When
+        boolean actual = usersRepository.test(user1, "password");
+        //Then
+        assertThat(actual).isFalse();
+    }
+
+    @Test
+    public void testShouldReturnFalseWhenAUserIsRemovedFromRepository() throws 
UsersRepositoryException {
+        //Given
+        usersRepository.addUser(user1, "password");
+        usersRepository.removeUser(user1);
+        //When
+        boolean actual = usersRepository.test(user1, "password");
+        //Then
+        assertThat(actual).isFalse();
+    }
+    
+    @Test
+    public void removeUserShouldRemoveAUserWhenPresentInRepository() throws 
UsersRepositoryException {
+        //Given
+        usersRepository.addUser(user1, "password");
+        //When
+        usersRepository.removeUser(user1);
+        //Then
+        assertThat(usersRepository.contains(user1)).isFalse();
+    }
+    
+    @Test(expected = UsersRepositoryException.class)
+    public void removeUserShouldThrowWhenUserNotInRepository() throws 
UsersRepositoryException {
+        //When
+        usersRepository.removeUser(user1);
+    }
+    
+    @Test
+    public void updateUserShouldAllowToAuthenticateWithNewPassword() throws 
UsersRepositoryException { 
+      //Given
         usersRepository.addUser(user1, "password");
-        assertEquals("didn't accept the correct password", 
getPasswordsEnabled(), usersRepository.test(user1, "password"));
         User user = usersRepository.getUserByName(user1);
         user.setPassword("newpass");
-        try {
-            usersRepository.updateUser(user);
-            assertEquals("new password accepted", getPasswordsEnabled(), 
usersRepository.test(user1, "newpass"));
-            assertFalse("old password rejected", usersRepository.test(user1, 
"password"));
-        } catch (UnsupportedOperationException e) {
-            // if updating users is not allowed check that this is a repository
-            // without password checking
-            assertFalse(getPasswordsEnabled());
-        }
-        try {
-            usersRepository.removeUser(user1);
-        } catch (Exception e) {
-            e.printStackTrace();
-            fail("removing the user failed!");
-        }
-        assertFalse("user not existing", usersRepository.contains(user1));
-        assertFalse("new password rejected", usersRepository.test(user1, 
"newpass"));
-        try {
-            usersRepository.updateUser(user);
-            fail();
-        } catch (UsersRepositoryException e) {
-        }
+        //When
+        usersRepository.updateUser(user);
+        //Then
+        assertThat(usersRepository.test(user1, "newpass")).isTrue();
     }
-
-    /**
-     * Dispose the repository
-     *
-     * @throws UsersRepositoryException
-     */
-    protected void disposeUsersRepository() throws UsersRepositoryException {
-        if (usersRepository != null) {
-            LifecycleUtil.dispose(this.usersRepository);
-        }
+   
+    @Test
+    public void updateUserShouldNotAllowToAuthenticateWithOldPassword() throws 
UsersRepositoryException {
+        //Given
+        usersRepository.addUser(user1, "password");
+        User user = usersRepository.getUserByName(user1);
+        user.setPassword("newpass");
+        //When
+        usersRepository.updateUser(user);
+        //Then
+        assertThat(usersRepository.test(user1, "password")).isFalse();
+    }
+    
+    @Test(expected = UsersRepositoryException.class)
+    public void updateUserShouldThrowWhenAUserIsNoMoreInRepository() throws 
UsersRepositoryException {
+        //Given
+        usersRepository.addUser(user1, "password");
+        User user = usersRepository.getUserByName(user1);
+        usersRepository.removeUser(user1);
+        //When
+        usersRepository.updateUser(user);
     }
 
-    private boolean getPasswordsEnabled() {
-        return true;
+
+    protected void disposeUsersRepository() throws UsersRepositoryException {
+        LifecycleUtil.dispose(this.usersRepository);
     }
 }



---------------------------------------------------------------------
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