Package org.onebusaway.users.impl

Source Code of org.onebusaway.users.impl.UserDaoImplTest

/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
* Copyright (C) 2012 Google, Inc.
*
* 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.onebusaway.users.impl;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.onebusaway.users.model.User;
import org.onebusaway.users.model.UserIndex;
import org.onebusaway.users.model.UserIndexKey;
import org.onebusaway.users.model.UserPropertiesV1;
import org.onebusaway.users.model.UserRole;
import org.onebusaway.users.model.properties.UserPropertiesV2;

public class UserDaoImplTest {

  private SessionFactory _sessionFactory;

  private UserDaoImpl _dao;

  @Before
  public void setup() throws IOException {

    Configuration config = new AnnotationConfiguration();
    config = config.configure("org/onebusaway/users/hibernate-configuration.xml");
    _sessionFactory = config.buildSessionFactory();

    _dao = new UserDaoImpl();
    _dao.setSessionFactory(_sessionFactory);
  }

  @After
  public void teardown() {
    if (_sessionFactory != null)
      _sessionFactory.close();
  }

  @Test
  public void test() {

    assertEquals(0, _dao.getNumberOfUserRoles());

    UserRole adminRole = new UserRole("admin");
    UserRole userRole = new UserRole("user");

    _dao.saveOrUpdateUserRole(adminRole);
    _dao.saveOrUpdateUserRole(userRole);

    assertEquals(2, _dao.getNumberOfUserRoles());

    assertEquals(0, _dao.getNumberOfUsersWithRole(adminRole));
    assertEquals(0, _dao.getNumberOfUsersWithRole(userRole));

    User userA = new User();
    userA.setCreationTime(new Date());
    userA.setProperties(new UserPropertiesV1());
    userA.getRoles().add(userRole);

    _dao.saveOrUpdateUser(userA);

    assertEquals(0, _dao.getNumberOfUsersWithRole(adminRole));
    assertEquals(1, _dao.getNumberOfUsersWithRole(userRole));

    User userB = new User();
    userB.setCreationTime(new Date());
    userB.setProperties(new UserPropertiesV1());
    userB.getRoles().add(adminRole);

    _dao.saveOrUpdateUser(userB);

    assertEquals(1, _dao.getNumberOfUsersWithRole(adminRole));
    assertEquals(1, _dao.getNumberOfUsersWithRole(userRole));

    userA.getRoles().add(adminRole);

    _dao.saveOrUpdateUser(userA);

    assertEquals(2, _dao.getNumberOfUsersWithRole(adminRole));
    assertEquals(1, _dao.getNumberOfUsersWithRole(userRole));
  }

  @Test
  public void testGetNumberOfUsers() {

    assertEquals(0, _dao.getNumberOfUsers());

    User userA = new User();
    userA.setCreationTime(new Date());
    userA.setProperties(new UserPropertiesV1());

    _dao.saveOrUpdateUser(userA);

    assertEquals(1, _dao.getNumberOfUsers());

    User userB = new User();
    userB.setCreationTime(new Date());
    userB.setProperties(new UserPropertiesV1());

    _dao.saveOrUpdateUser(userB);

    assertEquals(2, _dao.getNumberOfUsers());
  }
 
  @Test
  public void testGetNumberOfStaleUsers() {
   
    Calendar c = Calendar.getInstance();
    c.add(Calendar.MONTH, -1);
    Date oneMonth = c.getTime();
    c.add(Calendar.MONTH, -1);
    Date twoMonth = c.getTime();
    c.add(Calendar.MONTH, -1);
    Date threeMonth = c.getTime();

    assertEquals(0, _dao.getNumberOfStaleUsers(oneMonth));

    User userA = new User();
    userA.setCreationTime(new Date());
    userA.setLastAccessTime(twoMonth);
    userA.setProperties(new UserPropertiesV2());

    _dao.saveOrUpdateUser(userA);

    assertEquals(1, _dao.getNumberOfStaleUsers(oneMonth));
    assertEquals(0, _dao.getNumberOfStaleUsers(twoMonth));
    assertEquals(0, _dao.getNumberOfStaleUsers(threeMonth));

    User userB = new User();
    userB.setCreationTime(new Date());
    userB.setLastAccessTime(threeMonth);
    userB.setProperties(new UserPropertiesV2());

    _dao.saveOrUpdateUser(userB);

    assertEquals(2, _dao.getNumberOfStaleUsers(oneMonth));
    assertEquals(1, _dao.getNumberOfStaleUsers(twoMonth));
    assertEquals(0, _dao.getNumberOfStaleUsers(threeMonth));
  }

  @Test
  public void testGetAllUserIds() {

    Set<Integer> ids = new HashSet<Integer>();

    for (int i = 0; i < 100; i++) {

      User userA = new User();
      userA.setCreationTime(new Date());
      userA.setProperties(new UserPropertiesV1());

      _dao.saveOrUpdateUser(userA);

      ids.add(userA.getId());
    }

    int n = _dao.getNumberOfUsers();
    assertEquals(100, n);

    Set<Integer> retreivedIds = new HashSet<Integer>();
    final int limit = 20;

    for (int i = 0; i < n; i += limit) {
      List<Integer> pageOfIds = _dao.getAllUserIdsInRange(i, limit);
      assertTrue(pageOfIds.size() <= limit);
      retreivedIds.addAll(pageOfIds);
    }

    assertEquals(ids, retreivedIds);
  }

  @Test
  public void deleteUser() {

    UserRole userRole = new UserRole("user");

    _dao.saveOrUpdateUserRole(userRole);

    User user = new User();
    user.setCreationTime(new Date());
    user.setProperties(new UserPropertiesV2());
    user.getRoles().add(userRole);

    UserIndexKey key = new UserIndexKey("phone", "2065551234");

    UserIndex index = new UserIndex();
    index.setId(key);
    index.setUser(user);
    user.getUserIndices().add(index);

    _dao.saveOrUpdateUser(user);

    assertEquals(1, _dao.getNumberOfUsers());

    UserIndex index2 = _dao.getUserIndexForId(key);
    assertEquals(key, index2.getId());
    assertEquals(user, index2.getUser());

    _dao.deleteUser(user);

    assertEquals(0, _dao.getNumberOfUsers());
    index2 = _dao.getUserIndexForId(key);
    assertNull(index2);
  }

  @Test
  public void testTransitionUserIndex() {

    User userA = new User();
    userA.setCreationTime(new Date());
    userA.setProperties(new UserPropertiesV2());

    UserIndex index = new UserIndex();
    index.setId(new UserIndexKey("test", "A"));
    index.setUser(userA);
    userA.getUserIndices().add(index);

    _dao.saveOrUpdateUser(userA);

    User userB = new User();
    userB.setCreationTime(new Date());
    userB.setProperties(new UserPropertiesV2());

    _dao.saveOrUpdateUser(userB);

    assertEquals(1, _dao.getUserForId(userA.getId()).getUserIndices().size());
    assertEquals(0, _dao.getUserForId(userB.getId()).getUserIndices().size());

    index.setUser(userB);
    userA.getUserIndices().remove(index);
    userB.getUserIndices().add(index);

    _dao.saveOrUpdateUsers(userA, userB);

    assertEquals(0, _dao.getUserForId(userA.getId()).getUserIndices().size());
    assertEquals(1, _dao.getUserForId(userB.getId()).getUserIndices().size());
  }
}
TOP

Related Classes of org.onebusaway.users.impl.UserDaoImplTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.