/*
* LinShare is an open source filesharing software, part of the LinPKI software
* suite, developed by Linagora.
*
* Copyright (C) 2015 LINAGORA
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version, provided you comply with the Additional Terms applicable for
* LinShare software by Linagora pursuant to Section 7 of the GNU Affero General
* Public License, subsections (b), (c), and (e), pursuant to which you must
* notably (i) retain the display of the “LinShare™” trademark/logo at the top
* of the interface window, the display of the “You are using the Open Source
* and free version of LinShare™, powered by Linagora © 2009–2015. Contribute to
* Linshare R&D by subscribing to an Enterprise offer!” infobox and in the
* e-mails sent with the Program, (ii) retain all hypertext links between
* LinShare and linshare.org, between linagora.com and Linagora, and (iii)
* refrain from infringing Linagora intellectual property rights over its
* trademarks and commercial brands. Other Additional Terms apply, see
* <http://www.linagora.com/licenses/> for more details.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License and
* its applicable Additional Terms for LinShare along with this program. If not,
* see <http://www.gnu.org/licenses/> for the GNU Affero General Public License
* version 3 and <http://www.linagora.com/licenses/> for the Additional Terms
* applicable to LinShare software.
*/
package org.linagora.linshare.service;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.linagora.linshare.core.domain.constants.LinShareTestConstants;
import org.linagora.linshare.core.domain.entities.AbstractDomain;
import org.linagora.linshare.core.domain.entities.Internal;
import org.linagora.linshare.core.domain.entities.User;
import org.linagora.linshare.core.exception.BusinessException;
import org.linagora.linshare.core.exception.LinShareNotSuchElementException;
import org.linagora.linshare.core.repository.AbstractDomainRepository;
import org.linagora.linshare.core.repository.DomainPolicyRepository;
import org.linagora.linshare.core.repository.FunctionalityRepository;
import org.linagora.linshare.core.repository.UserRepository;
import org.linagora.linshare.core.repository.hibernate.RecipientFavouriteRepositoryImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
@ContextConfiguration(locations={"classpath:springContext-test.xml",
"classpath:springContext-datasource.xml",
"classpath:springContext-repository.xml"})
public class RecipientFavouriteRepositoryImplTest extends AbstractTransactionalJUnit4SpringContextTests{
private static Logger logger = LoggerFactory.getLogger(RecipientFavouriteRepositoryImplTest.class);
@Qualifier("recipientFavouriteRepository")
@Autowired
private RecipientFavouriteRepositoryImpl favouriteRepository;
@Autowired
private FunctionalityRepository functionalityRepository;
@Autowired
private AbstractDomainRepository abstractDomainRepository;
@Autowired
private DomainPolicyRepository domainPolicyRepository;
@Qualifier("userRepository")
@Autowired
private UserRepository<User> userRepository;
private User user1; /* John Doe */
private User user2; /* Jane Smith */
private User user3; /* Foo Bar */
public User getUser1() {
return user1;
}
public User getUser2() {
return user2;
}
public User getUser3() {
return user3;
}
@Before
public void setUp() throws Exception {
logger.debug(LinShareTestConstants.BEGIN_SETUP);
user1 = new Internal("John","Doe","user1@linshare.org", null);
user2 = new Internal("Jane","Smith","user2@linshare.org", null);
user3 = new Internal("Foo","Bar","user3@linshare.org", null);
AbstractDomain userGuestDomain = abstractDomainRepository.findById(LoadingServiceTestDatas.guestDomainName1);
user1.setLocale(userGuestDomain.getDefaultTapestryLocale());
user2.setLocale(userGuestDomain.getDefaultTapestryLocale());
user3.setLocale(userGuestDomain.getDefaultTapestryLocale());
user1.setCmisLocale(userGuestDomain.getDefaultTapestryLocale().toString());
user2.setCmisLocale(userGuestDomain.getDefaultTapestryLocale().toString());
user3.setCmisLocale(userGuestDomain.getDefaultTapestryLocale().toString());
user1.setDomain(abstractDomainRepository.findById(LoadingServiceTestDatas.topDomainName));
user2.setDomain(abstractDomainRepository.findById(LoadingServiceTestDatas.subDomainName1));
user3.setDomain(abstractDomainRepository.findById(LoadingServiceTestDatas.guestDomainName1));
user1 = userRepository.create(user1);
user2 = userRepository.create(user2);
user3 = userRepository.create(user3);
logger.debug(LinShareTestConstants.END_SETUP);
}
@After
public void tearDown() throws Exception {
logger.debug(LinShareTestConstants.BEGIN_TEARDOWN);
userRepository.delete(user1);
userRepository.delete(user2);
userRepository.delete(user3);
logger.debug(LinShareTestConstants.END_TEARDOWN);
}
@Test
public void testIncrement() throws LinShareNotSuchElementException, BusinessException{
logger.info(LinShareTestConstants.BEGIN_TEST);
User owner = getUser1();
String user2 = getUser2().getLogin();
String user3 = getUser3().getLogin();
List<String> recipients = new ArrayList<String>();
recipients.add(user2);
recipients.add(user3);
favouriteRepository.incAndCreate(owner, recipients);
Assert.assertTrue(favouriteRepository.existFavourite(owner, user2));
Assert.assertTrue(favouriteRepository.existFavourite(owner, user3));
logger.debug(LinShareTestConstants.END_TEST);
}
@Test
public void testRecipientsOrderedByWeightDesc() throws LinShareNotSuchElementException, BusinessException{
logger.info(LinShareTestConstants.BEGIN_TEST);
User owner = user1;
String user2 = getUser2().getMail();
String user3 = getUser3().getMail();
List<String> recipients = new ArrayList<String>();
recipients.add(user2);
recipients.add(user3);
List<String> elementsOrderByWeightDesc = favouriteRepository.getElementsOrderByWeight(owner);
favouriteRepository.incAndCreate(owner, recipients);
elementsOrderByWeightDesc = favouriteRepository.getElementsOrderByWeight(owner);
favouriteRepository.incAndCreate(owner, user3);
elementsOrderByWeightDesc = favouriteRepository.getElementsOrderByWeight(owner);
Assert.assertTrue(elementsOrderByWeightDesc.get(1).equals(user3));
Assert.assertTrue(elementsOrderByWeightDesc.get(0).equals(user2));
List<String> recipientsOrderedByWeightDesc = favouriteRepository.reorderElementsByWeightDesc(elementsOrderByWeightDesc, owner);
Assert.assertTrue(recipientsOrderedByWeightDesc.get(1).equals(user2));
Assert.assertTrue(recipientsOrderedByWeightDesc.get(0).equals(user3));
logger.debug(LinShareTestConstants.END_TEST);
}
@Test
public void testReorderRecipientsByWeightDesc() throws LinShareNotSuchElementException, BusinessException{
logger.info(LinShareTestConstants.BEGIN_TEST);
User owner = getUser1();
String user2 = getUser2().getLogin();
String user3 = getUser3().getLogin();
List<String> recipients = new ArrayList<String>();
recipients.add(user2);
recipients.add(user3);
favouriteRepository.incAndCreate(owner, recipients);
favouriteRepository.incAndCreate(owner, user3);
List<String> recipientsOrderedByWeightDesc = favouriteRepository.reorderElementsByWeightDesc(recipients, owner);
Assert.assertTrue(recipientsOrderedByWeightDesc.get(0).equals(user3));
Assert.assertTrue(recipientsOrderedByWeightDesc.get(1).equals(user2));
List<String> elementsOrderByWeightDesc = favouriteRepository.getElementsOrderByWeightDesc(owner);
Assert.assertTrue(elementsOrderByWeightDesc.get(0).equals(user3));
Assert.assertTrue(elementsOrderByWeightDesc.get(1).equals(user2));
logger.debug(LinShareTestConstants.END_TEST);
}
@Test
public void testFindRecipientFavorite() throws LinShareNotSuchElementException, BusinessException{
logger.info(LinShareTestConstants.BEGIN_TEST);
User owner = getUser1();
String user2 = getUser2().getLogin();
String user3 = getUser3().getLogin();
List<String> recipients = new ArrayList<String>();
recipients.add(user2);
recipients.add(user3);
favouriteRepository.incAndCreate(owner, recipients);
favouriteRepository.incAndCreate(owner, user3);
Assert.assertFalse(favouriteRepository.findMatchElementsOrderByWeight( getUser3().getMail(), owner).isEmpty());
Assert.assertTrue(favouriteRepository.findMatchElementsOrderByWeight( "failMail@mail.com", owner).isEmpty());
logger.debug(LinShareTestConstants.END_TEST);
}
@Test
public void testDeleteFavoritesOfUser() throws LinShareNotSuchElementException, BusinessException{
logger.info(LinShareTestConstants.BEGIN_TEST);
User owner = getUser1();
String user3 = getUser3().getLogin();
List<String> recipients = new ArrayList<String>();
recipients.add(user3);
favouriteRepository.incAndCreate(owner, recipients);
Assert.assertFalse(favouriteRepository.findMatchElementsOrderByWeight(getUser3().getMail(), owner).isEmpty());
favouriteRepository.deleteFavoritesOfUser(owner);
Assert.assertTrue(favouriteRepository.findMatchElementsOrderByWeight( getUser3().getMail(), owner).isEmpty());
logger.debug(LinShareTestConstants.END_TEST);
}
}