org.onebusaway.users.impl.UserDaoImplTest.java Source code

Java tutorial

Introduction

Here is the source code for org.onebusaway.users.impl.UserDaoImplTest.java

Source

/**
 * 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());
    }
}