/**
* Copyright (C) 2015 Caratarse Auth Team <lucio.benfante@gmail.com>
*
* This file is part of Caratarse Auth Model.
*
* Licensed under the Apache 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://www.apache.org/licenses/LICENSE-2.0
*
* 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.caratarse.auth.model.dao;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.caratarse.auth.model.po.Authorization;
import org.caratarse.auth.model.po.Permissions;
import org.caratarse.auth.model.po.User;
import org.caratarse.auth.model.test.AdjustableDateTimeProvider;
import org.caratarse.auth.model.test.BaseTest;
import org.caratarse.auth.model.util.DateTimeProviderHolder;
import static org.hamcrest.CoreMatchers.*;
import org.junit.After;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.lambico.dao.spring.hibernate.HibernateGenericDao;
import static org.lambico.test.ExtraAssert.*;
/**
* Tests on {@link UserDao}.
*
* @author <a href="mailto:lucio.benfante@gmail.com">Lucio Benfante</a>
*/
public class UserDaoTest extends BaseTest {
@Resource
private UserDao userDao;
@Resource
private AuthorizationDao authorizationDao;
@Before
public void setFilters() {
((HibernateGenericDao)userDao).setFilterNames("limitByNotDeleted");
((HibernateGenericDao)authorizationDao).setFilterNames("limitByNotDeleted");
}
@After
public void removeFilters() {
((HibernateGenericDao)userDao).setFilterNames();
((HibernateGenericDao)authorizationDao).setFilterNames();
}
@Test
public void testAllUsers() {
List<User> users = userDao.findAll();
assertSize(3, users);
}
@Test
public void testActiveUsers() {
List<User> users = userDao.findAllActive();
assertSize(2, users);
}
@Test
public void testFindByUuid() {
String uuid = "12345678-1234-1234-1234-123456781234";
User user = userDao.findByUuid(uuid);
assertNotNull(user);
assertThat(user.getUuid(), is(uuid));
}
@Test
public void creationDateIsSet() {
String uuid = "12345678-1234-1234-1234-123456781234";
User user = userDao.findByUuid(uuid);
assertNotNull(user.getCreationDate());
}
@Test
public void updatedDateIsSet() {
String uuid = "12345678-1234-1234-1234-123456781234";
User user = userDao.findByUuid(uuid);
assertNotNull(user.getUpdatedDate());
assertEquals(user.getCreationDate(), user.getUpdatedDate());
}
@Test
public void updatedDateIsUpdated() {
String uuid = "12345678-1234-1234-1234-123456781234";
User user = userDao.findByUuid(uuid);
Date oldUpdatedDate = user.getUpdatedDate();
user.setLastLogin(new Date());
userDao.store(user);
((HibernateGenericDao)userDao).getHibernateTemplate().flush();
((HibernateGenericDao)userDao).getHibernateTemplate().evict(user);
user = userDao.findByUuid(uuid);
Date newUpdatedDate = user.getUpdatedDate();
assertNotEquals(oldUpdatedDate, newUpdatedDate);
}
@Test
public void testFindByUsername() {
String username = "user1";
User user = userDao.findByUsername(username);
assertNotNull(user);
assertThat(user.getUsername(), is(username));
assertFalse(user.checkDeleted());
}
@Test
public void testLogicDelete() {
String username = "user1";
User user = userDao.findByUsername(username);
final AdjustableDateTimeProvider dateTimeProvider = new AdjustableDateTimeProvider();
final LocalDateTime deleteDate = LocalDateTime.of(2015, 3, 25, 12, 54, 22);
dateTimeProvider.setNow(deleteDate);
DateTimeProviderHolder.setDateTimeProvider(dateTimeProvider);
user.delete();
assertThat(user.getDeleted(), is(Date.from(deleteDate.toInstant(ZoneOffset.UTC))));
}
@Test
public void addAutorizationToUser() {
String username = "user1";
User user = userDao.findByUsername(username);
int oldSize = user.getUserAuthorizations().size();
Authorization authorization = authorizationDao.findByName("ROLE_FOURTH");
user.addAuthorization(authorization, Permissions.R);
userDao.store(user);
((HibernateGenericDao)userDao).getHibernateTemplate().flush();
((HibernateGenericDao)userDao).getHibernateTemplate().clear();
user = userDao.findByUsername(username);
assertSize(oldSize + 1, user.getUserAuthorizations());
assertTrue(user.hasAuthorization(authorization));
}
}