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