From 659da861f2edf89d200ee240f453607f44d34240 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 25 Nov 2014 08:13:48 +0100 Subject: [PATCH] create default accounts only, if no other user exists in the dao --- .../sonia/scm/user/DefaultUserManager.java | 7 +- .../scm/user/DefaultUserManagerTest.java | 95 ++++++++++++++++--- 2 files changed, 88 insertions(+), 14 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java index 3b82269bde..4dce1df549 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java +++ b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java @@ -102,7 +102,6 @@ public class DefaultUserManager extends AbstractUserManager * Constructs ... * * - * @param scurityContextProvider * @param userDAO * @param userListenerProvider */ @@ -234,8 +233,8 @@ public class DefaultUserManager extends AbstractUserManager public void init(SCMContextProvider context) { - // TODO improve - if (!userDAO.contains("scmadmin") &&!userDAO.contains("anonymous")) + // create default account only, if no other account is available + if (userDAO.getAll().isEmpty()) { createDefaultAccounts(); } @@ -531,6 +530,8 @@ public class DefaultUserManager extends AbstractUserManager { try { + logger.info("create default accounts"); + JAXBContext context = JAXBContext.newInstance(User.class); Unmarshaller unmarshaller = context.createUnmarshaller(); diff --git a/scm-webapp/src/test/java/sonia/scm/user/DefaultUserManagerTest.java b/scm-webapp/src/test/java/sonia/scm/user/DefaultUserManagerTest.java index d18dac8bb6..426cf21ded 100644 --- a/scm-webapp/src/test/java/sonia/scm/user/DefaultUserManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/user/DefaultUserManagerTest.java @@ -35,20 +35,27 @@ package sonia.scm.user; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.collect.Lists; import com.google.inject.Provider; +import org.junit.Before; +import org.junit.Test; + import sonia.scm.store.JAXBStoreFactory; import sonia.scm.store.StoreFactory; import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.util.MockUtil; +import static org.junit.Assert.*; + import static org.mockito.Mockito.*; //~--- JDK imports ------------------------------------------------------------ +import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; -import org.junit.Before; /** * @@ -56,11 +63,6 @@ import org.junit.Before; */ public class DefaultUserManagerTest extends UserManagerTestBase { - - @Before - public void setAdminSubject(){ - setSubject(MockUtil.createAdminSubject()); - } /** * Method description @@ -71,16 +73,87 @@ public class DefaultUserManagerTest extends UserManagerTestBase @Override public UserManager createManager() { - StoreFactory factory = new JAXBStoreFactory(); + return new DefaultUserManager(createXmlUserDAO(), createListenerProvider()); + } - factory.init(contextProvider); + /** + * Method description + * + */ + @Test + public void testDefaultAccountAfterFristStart() + { + UserDAO userDAO = mock(UserDAO.class); + List users = Lists.newArrayList(new User("tuser")); + when(userDAO.getAll()).thenReturn(users); + + UserManager userManager = new DefaultUserManager(userDAO, + createListenerProvider()); + + userManager.init(contextProvider); + verify(userDAO, never()).add(any(User.class)); + } + + /** + * Method description + * + */ + @Test + public void testDefaultAccountCreation() + { + UserDAO userDAO = mock(UserDAO.class); + + when(userDAO.getAll()).thenReturn(Collections.EMPTY_LIST); + + UserManager userManager = new DefaultUserManager(userDAO, + createListenerProvider()); + + userManager.init(contextProvider); + verify(userDAO, times(2)).add(any(User.class)); + } + + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + */ + @Before + public void setAdminSubject() + { + setSubject(MockUtil.createAdminSubject()); + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + private Provider> createListenerProvider() + { Provider> listenerProvider = mock(Provider.class); when(listenerProvider.get()).thenReturn(new HashSet()); - XmlUserDAO userDAO = new XmlUserDAO(factory); - - return new DefaultUserManager(userDAO, listenerProvider); + return listenerProvider; + } + + /** + * Method description + * + * + * @return + */ + private XmlUserDAO createXmlUserDAO() + { + StoreFactory factory = new JAXBStoreFactory(); + + factory.init(contextProvider); + + return new XmlUserDAO(factory); } }