/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community 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://opensource.org/licenses/ecl2.txt * * 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.opencastproject.adminui.usersettings; import static org.junit.Assert.assertEquals; import org.opencastproject.adminui.usersettings.persistence.UserSettingDto; import org.opencastproject.adminui.usersettings.persistence.UserSettingsServiceException; import org.opencastproject.messages.persistence.MessageSignatureDto; import org.opencastproject.security.api.Organization; import org.opencastproject.security.api.SecurityService; import org.opencastproject.security.api.User; import org.opencastproject.security.api.UserDirectoryService; import org.easymock.Capture; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import java.util.LinkedList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Query; public class UserSettingsServiceTest { private static final String KEY_PREFIX = "Key-"; private static final String ORG = "org-1"; private static final String USER_NAME = "user1"; private static final String VALUE_PREFIX = "Value-"; private SecurityService securityService; private UserDirectoryService userDirectoryService; @Before public void before() { User user = EasyMock.createNiceMock(User.class); EasyMock.expect(user.getUsername()).andReturn(USER_NAME); EasyMock.replay(user); Organization organization = EasyMock.createNiceMock(Organization.class); EasyMock.expect(organization.getId()).andReturn(ORG).anyTimes(); EasyMock.replay(organization); securityService = EasyMock.createNiceMock(SecurityService.class); EasyMock.expect(securityService.getUser()).andReturn(user).anyTimes(); EasyMock.expect(securityService.getOrganization()).andReturn(organization).anyTimes(); EasyMock.replay(securityService); userDirectoryService = EasyMock.createNiceMock(UserDirectoryService.class); EasyMock.expect(userDirectoryService.loadUser(USER_NAME)).andReturn(user).anyTimes(); EasyMock.replay(userDirectoryService); } private List<MessageSignatureDto> createSignatureList(int signatureCount) { LinkedList<MessageSignatureDto> signatures = new LinkedList<MessageSignatureDto>(); for (int i = 0; i < signatureCount; i++) { // MessageSignatureDto messageSignatureDto = new MessageSignatureDto(NAME_PREFIX + i, ORG, USER_NAME, SENDER_PREFIX // + i, SENDER_NAME_PREFIX + i, REPLY_TO_PREFIX + i, REPLY_TO_PREFIX + 1, SIGNATURE_PREFIX + i, // creationDate, new LinkedList<CommentDto>()); // signatures.add(messageSignatureDto); } return signatures; } private List<UserSettingDto> createUserSettingsList(int settingCount) { LinkedList<UserSettingDto> userSettings = new LinkedList<UserSettingDto>(); for (int i = 0; i < settingCount; i++) { UserSettingDto userSettingDto = new UserSettingDto(i, KEY_PREFIX + i, VALUE_PREFIX + i, USER_NAME, ORG); userSettings.add(userSettingDto); } return userSettings; } private EntityManager setupUserSettingEntityManager(int signatureCount, int offset, int limit) { Query userSettingsQuery = EasyMock.createMock(Query.class); EasyMock.expect(userSettingsQuery.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject())).andReturn(userSettingsQuery).anyTimes(); EasyMock.expect(userSettingsQuery.setFirstResult(offset)).andReturn(userSettingsQuery).anyTimes(); EasyMock.expect(userSettingsQuery.setMaxResults(limit)).andReturn(userSettingsQuery).anyTimes(); EasyMock.expect(userSettingsQuery.getResultList()).andReturn(createUserSettingsList(signatureCount)); EasyMock.replay(userSettingsQuery); EntityManager findSettings = EasyMock.createMock(EntityManager.class); EasyMock.expect(findSettings.createNamedQuery("UserSettings.findByUserName")).andReturn(userSettingsQuery); findSettings.close(); EasyMock.expectLastCall(); EasyMock.replay(findSettings); return findSettings; } private EntityManager setupSignatureCountEntityManager(int total, int offset, int limit) { Number totalNumber = EasyMock.createMock(Number.class); EasyMock.expect(totalNumber.intValue()).andReturn(total); EasyMock.replay(totalNumber); Query userSettingsQuery = EasyMock.createMock(Query.class); EasyMock.expect(userSettingsQuery.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject())).andReturn(userSettingsQuery).anyTimes(); EasyMock.expect(userSettingsQuery.getSingleResult()).andReturn(totalNumber); EasyMock.replay(userSettingsQuery); EntityManager findSettings = EasyMock.createMock(EntityManager.class); EasyMock.expect(findSettings.createNamedQuery("MessageSignature.countByCreator")).andReturn(userSettingsQuery); findSettings.close(); EasyMock.expectLastCall(); EasyMock.replay(findSettings); return findSettings; } private EntityManager setupUserSettingCountEntityManager(int total, int offset, int limit) { Number totalNumber = EasyMock.createMock(Number.class); EasyMock.expect(totalNumber.intValue()).andReturn(total); EasyMock.replay(totalNumber); Query userSettingsQuery = EasyMock.createMock(Query.class); EasyMock.expect(userSettingsQuery.setParameter(EasyMock.anyObject(String.class), EasyMock.anyObject())).andReturn(userSettingsQuery).anyTimes(); EasyMock.expect(userSettingsQuery.getSingleResult()).andReturn(totalNumber); EasyMock.replay(userSettingsQuery); EntityManager findSettings = EasyMock.createMock(EntityManager.class); EasyMock.expect(findSettings.createNamedQuery("UserSettings.countByUserName")).andReturn(userSettingsQuery); findSettings.close(); EasyMock.expectLastCall(); EasyMock.replay(findSettings); return findSettings; } private EntityManagerFactory setupEntityManagerFactory(int settingCount, int signatureCount, int settingTotal, int signatureTotal, int offset, int limit) { EntityManagerFactory emf = EasyMock.createMock(EntityManagerFactory.class); EasyMock.expect(emf.createEntityManager()).andReturn(setupUserSettingEntityManager(settingCount, offset, limit)); EasyMock.expect(emf.createEntityManager()).andReturn(setupUserSettingCountEntityManager(settingTotal, offset, limit)); EasyMock.replay(emf); return emf; } private UserSettingsService setupUserSettingsService(EntityManagerFactory emf) { UserSettingsService userSettingsService = new UserSettingsService(); userSettingsService.setSecurityService(securityService); userSettingsService.setEntityManagerFactory(emf); userSettingsService.setUserDirectoryService(userDirectoryService); return userSettingsService; } @Test public void findUserSettingsInputNoSettingsNoSignaturesExpectsEmptyUserSettings() throws UserSettingsServiceException { int offset = 0; int limit = 10; EntityManagerFactory emf = setupEntityManagerFactory(0, 0, limit, limit, offset, limit); UserSettingsService userSettingsService = setupUserSettingsService(emf); userSettingsService.findUserSettings(limit, offset); } @Test public void findUserSettingsInputOneSettingsOneSignaturesExpectsProperUserSettings() throws UserSettingsServiceException { int offset = 0; int limit = 1; EntityManagerFactory emf = setupEntityManagerFactory(limit, limit, limit, limit, offset, limit); UserSettingsService userSettingsService = setupUserSettingsService(emf); userSettingsService.findUserSettings(limit, offset); } @Test public void findUserSettingsInputManySettingsManySignaturesExpectsProperUserSettings() throws UserSettingsServiceException { int offset = 0; int limit = 10; EntityManagerFactory emf = setupEntityManagerFactory(limit, limit, limit, limit, offset, limit); UserSettingsService userSettingsService = setupUserSettingsService(emf); userSettingsService.findUserSettings(limit, offset); } @Test public void addUserSettingInputNormalValuesExpectsSavedSetting() throws UserSettingsServiceException { String key = "newKey"; String value = "newValue"; Capture<UserSettingDto> userSettingDto = new Capture<UserSettingDto>(); EntityTransaction tx = EasyMock.createNiceMock(EntityTransaction.class); EasyMock.replay(tx); EntityManager em = EasyMock.createNiceMock(EntityManager.class); EasyMock.expect(em.getTransaction()).andReturn(tx); em.persist(EasyMock.capture(userSettingDto)); EasyMock.expectLastCall(); EasyMock.replay(em); EntityManagerFactory emf = EasyMock.createNiceMock(EntityManagerFactory.class); EasyMock.expect(emf.createEntityManager()).andReturn(em); EasyMock.replay(emf); UserSettingsService userSettingsService = new UserSettingsService(); userSettingsService.setSecurityService(securityService); userSettingsService.setEntityManagerFactory(emf); userSettingsService.setUserDirectoryService(userDirectoryService); userSettingsService.addUserSetting(key, value); assertEquals(userSettingDto.getValues().get(0).getKey(), key); assertEquals(userSettingDto.getValues().get(0).getValue(), value); } @Test public void updateUserSettingInputNoIdExpectsSavedSetting() throws UserSettingsServiceException { long id = 7L; String key = "newKey"; String value = "newValue"; String oldValue = "oldValue"; UserSettingDto userSettingDto = new UserSettingDto(id, key, oldValue, securityService.getUser().getUsername(), securityService.getOrganization().getId()); LinkedList<UserSettingDto> userSettingDtos = new LinkedList<UserSettingDto>(); userSettingDtos.add(userSettingDto); EntityTransaction tx = EasyMock.createNiceMock(EntityTransaction.class); EasyMock.replay(tx); Query query = EasyMock.createNiceMock(Query.class); EasyMock.expect(query.setParameter("key", key)).andReturn(query); EasyMock.expect(query.setParameter("username", securityService.getUser().getUsername())).andReturn(query); EasyMock.expect(query.setParameter("org", securityService.getOrganization().getId())).andReturn(query); EasyMock.expect(query.getResultList()).andReturn(userSettingDtos); EasyMock.replay(query); EntityManager em = EasyMock.createNiceMock(EntityManager.class); EasyMock.expect(em.createNamedQuery("UserSettings.findByKey")).andReturn(query); EasyMock.expectLastCall(); EasyMock.expect(em.getTransaction()).andReturn(tx); EasyMock.expect(em.find(UserSettingDto.class, id)).andReturn(userSettingDto); EasyMock.replay(em); EntityManagerFactory emf = EasyMock.createNiceMock(EntityManagerFactory.class); EasyMock.expect(emf.createEntityManager()).andReturn(em).anyTimes(); EasyMock.replay(emf); UserSettingsService userSettingsService = new UserSettingsService(); userSettingsService.setSecurityService(securityService); userSettingsService.setEntityManagerFactory(emf); userSettingsService.setUserDirectoryService(userDirectoryService); UserSetting result = userSettingsService.updateUserSetting(key, value, oldValue); assertEquals(result.getId(), id); assertEquals(result.getKey(), key); assertEquals(result.getValue(), value); } @Test public void deleteUserSettingInputNoIdExpectsSavedSetting() throws UserSettingsServiceException { long id = 8L; String key = "newKey"; String oldValue = "oldValue"; UserSettingDto userSettingDto = new UserSettingDto(id, key, oldValue, securityService.getUser().getUsername(), securityService.getOrganization().getId()); LinkedList<UserSettingDto> userSettingDtos = new LinkedList<UserSettingDto>(); userSettingDtos.add(userSettingDto); EntityTransaction tx = EasyMock.createNiceMock(EntityTransaction.class); EasyMock.replay(tx); Query query = EasyMock.createNiceMock(Query.class); EasyMock.expect(query.setParameter("key", key)).andReturn(query); EasyMock.expect(query.setParameter("username", securityService.getUser().getUsername())).andReturn(query); EasyMock.expect(query.setParameter("org", securityService.getOrganization().getId())).andReturn(query); EasyMock.expect(query.getResultList()).andReturn(userSettingDtos); EasyMock.replay(query); EntityManager em = EasyMock.createNiceMock(EntityManager.class); EasyMock.expect(em.getTransaction()).andReturn(tx); EasyMock.expect(em.find(UserSettingDto.class, id)).andReturn(userSettingDto); em.remove(userSettingDto); EasyMock.expectLastCall(); EasyMock.replay(em); EntityManagerFactory emf = EasyMock.createNiceMock(EntityManagerFactory.class); EasyMock.expect(emf.createEntityManager()).andReturn(em).anyTimes(); EasyMock.replay(emf); UserSettingsService userSettingsService = new UserSettingsService(); userSettingsService.setSecurityService(securityService); userSettingsService.setEntityManagerFactory(emf); userSettingsService.setUserDirectoryService(userDirectoryService); userSettingsService.deleteUserSetting(id); } }