com.cubusmail.server.user.UserAccountDaoTest.java Source code

Java tutorial

Introduction

Here is the source code for com.cubusmail.server.user.UserAccountDaoTest.java

Source

/* UserAccountDaoTest.java
    
   Copyright (c) 2010 Juergen Schlierf, All Rights Reserved
       
   This file is part of Cubusmail (http://code.google.com/p/cubusmail/).
       
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 3 of the License, or (at your option) any later version.
       
   This library 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
   Lesser General Public License for more details.
       
   You should have received a copy of the GNU Lesser General Public
   License along with Cubusmail. If not, see <http://www.gnu.org/licenses/>.
 */
package com.cubusmail.server.user;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import junit.framework.Assert;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.cubusmail.common.model.Address;
import com.cubusmail.common.model.AddressFolder;
import com.cubusmail.common.model.UserAccount;
import com.cubusmail.server.util.DBManager;

/**
 * Unittests for UserAccountDao
 * 
 * @author Juergen Schlierf
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml",
        "classpath:com/cubusmail/server/user/testDataSourceContext.xml",
        "classpath:com/cubusmail/server/user/testUserAcountContext.xml" })
@SuppressWarnings("unchecked")
public class UserAccountDaoTest implements ApplicationContextAware {

    private final Log log = LogFactory.getLog(getClass());

    private ApplicationContext applicationContext;

    private SingleConnectionDataSource dataSource;

    private IUserAccountDao userAccountDao;

    private UserAccount testUserAccount;

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.springframework.context.ApplicationContextAware#setApplicationContext
     * (org.springframework.context.ApplicationContext)
     */
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

        this.applicationContext = applicationContext;
    }

    @Before
    public void initDB() {

        this.userAccountDao = this.applicationContext.getBean(IUserAccountDao.class);
        this.testUserAccount = this.applicationContext.getBean("testUserAccount", UserAccount.class);
        this.dataSource = this.applicationContext.getBean(SingleConnectionDataSource.class);
        DBManager manager = this.applicationContext.getBean(DBManager.class);

        try {
            manager.initInternalDB();
            Long id = this.userAccountDao.saveUserAccount(testUserAccount);
            Assert.assertNotNull(id);
        } catch (SQLException e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        } catch (IOException e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }

    @After
    public void resetDB() {

        this.dataSource.resetConnection();
    }

    @Test
    public void testCreateUpdateUserAccount() {

        try {
            UserAccount userAccount = this.userAccountDao.getUserAccountByUsername("testuser");
            Assert.assertNotNull(userAccount);

            userAccount.getPreferences().setTheme("Testtheme");
            this.userAccountDao.saveUserAccount(userAccount);

            UserAccount userAccount2 = this.userAccountDao.getUserAccountByUsername("testuser");
            Assert.assertEquals("Testtheme", userAccount2.getPreferences().getTheme());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }

    @Test
    public void testInsertIdentities() {

        try {
            this.userAccountDao.saveIdentities(this.testUserAccount);

            UserAccount userAccount = userAccountDao.getUserAccountByUsername("testuser");
            Assert.assertNotNull(userAccount.getIdentities());
            Assert.assertTrue("identities not loaded!", userAccount.getIdentities().size() >= 4);
            Assert.assertEquals(userAccount, userAccount.getIdentities().get(0).getUserAccount());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }

    @Test
    public void testDeleteIdentities() {

        try {
            int identityCount = this.testUserAccount.getIdentities().size();
            this.userAccountDao.saveIdentities(this.testUserAccount);

            List<Long> ids = new ArrayList<Long>();
            ids.add(this.testUserAccount.getIdentities().get(0).getId());
            ids.add(this.testUserAccount.getIdentities().get(1).getId());
            this.userAccountDao.deleteIdentities(ids);

            UserAccount testUserAccount2 = this.userAccountDao.getUserAccountByUsername("testuser");
            Assert.assertEquals(testUserAccount2.getIdentities().size(), identityCount - 2);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }

    @Test
    public void testInsertAddressFolder() {

        List<AddressFolder> folders = (List<AddressFolder>) this.applicationContext.getBean("testAddressFolders");

        try {
            for (AddressFolder folder : folders) {
                folder.setUserAccount(this.testUserAccount);
                this.userAccountDao.saveAddressFolder(folder);
            }

            List<AddressFolder> savedAdressFolders = this.userAccountDao
                    .retrieveAddressFolders(this.testUserAccount);
            Assert.assertNotNull(savedAdressFolders);
            Assert.assertEquals(folders.size(), savedAdressFolders.size());
            Assert.assertEquals(folders.get(0).getName(), savedAdressFolders.get(0).getName());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }

    @Test
    public void testUpdateAddressFolders() {

        try {
            List<AddressFolder> folders = (List<AddressFolder>) this.applicationContext
                    .getBean("testAddressFolders");
            for (AddressFolder folder : folders) {
                folder.setUserAccount(this.testUserAccount);
                this.userAccountDao.saveAddressFolder(folder);
            }

            folders.get(0).setName("NewName");
            this.userAccountDao.saveAddressFolder(folders.get(0));

            List<AddressFolder> updatedFolders = this.userAccountDao.retrieveAddressFolders(this.testUserAccount);
            Assert.assertNotNull(updatedFolders);
            Assert.assertTrue(updatedFolders.size() > 0);
            Assert.assertEquals(updatedFolders.get(0).getName(), folders.get(0).getName());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }

    @Test
    public void testDeleteAddressFolders() {

        try {
            List<AddressFolder> folders = (List<AddressFolder>) this.applicationContext
                    .getBean("testAddressFolders");
            int foldersCount = folders.size();
            for (AddressFolder folder : folders) {
                folder.setUserAccount(this.testUserAccount);
                this.userAccountDao.saveAddressFolder(folder);
            }

            List<Long> ids = new ArrayList<Long>();
            ids.add(folders.get(0).getId());
            ids.add(folders.get(1).getId());
            this.userAccountDao.deleteAddressFolders(ids);

            List<AddressFolder> savedAdressFolders = this.userAccountDao
                    .retrieveAddressFolders(this.testUserAccount);
            Assert.assertNotNull(savedAdressFolders);
            Assert.assertEquals(savedAdressFolders.size(), foldersCount - 2);
            Assert.assertEquals(savedAdressFolders.get(0).getName(), folders.get(2).getName());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }

    @Test
    public void testInsertAddress() {

        try {
            List<AddressFolder> folders = (List<AddressFolder>) this.applicationContext
                    .getBean("testAddressFolders");
            folders.get(0).setUserAccount(this.testUserAccount);
            this.userAccountDao.saveAddressFolder(folders.get(0));

            List<Address> testAddressList = (List<Address>) this.applicationContext.getBean("testAddresses");
            for (Address address : testAddressList) {
                address.setAddressFolder(folders.get(0));
                this.userAccountDao.saveAddress(address);
            }

            List<Address> savedAddressList = this.userAccountDao.retrieveAddressList(folders.get(0));
            Assert.assertEquals(testAddressList.get(0), savedAddressList.get(0));
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }

    @Test
    public void testUpdateAddress() {

        try {
            List<AddressFolder> folders = (List<AddressFolder>) this.applicationContext
                    .getBean("testAddressFolders");
            folders.get(0).setUserAccount(this.testUserAccount);
            this.userAccountDao.saveAddressFolder(folders.get(0));

            List<Address> testAddressList = (List<Address>) this.applicationContext.getBean("testAddresses");
            for (Address address : testAddressList) {
                address.setAddressFolder(folders.get(0));
                this.userAccountDao.saveAddress(address);
            }

            List<Address> savedAddressList = this.userAccountDao.retrieveAddressList(folders.get(0));
            Assert.assertNotNull(savedAddressList);
            Assert.assertTrue(savedAddressList.size() > 0);
            Assert.assertEquals(testAddressList.get(0), savedAddressList.get(0));

            Address savedAddress = savedAddressList.get(0);
            Address testAddress2 = testAddressList.get(1);

            // copy modify properties
            Long saveId = savedAddress.getId();
            AddressFolder savedFolder = savedAddress.getAddressFolder();
            BeanUtils.copyProperties(savedAddress, testAddress2);
            savedAddress.setId(saveId);
            savedAddress.setAddressFolder(savedFolder);
            this.userAccountDao.saveAddress(savedAddress);

            List<Address> savedAddressList2 = this.userAccountDao.retrieveAddressList(folders.get(0));
            Assert.assertNotNull(savedAddressList2);
            Assert.assertTrue(savedAddressList2.size() > 0);
            Assert.assertEquals(savedAddress, savedAddressList2.get(0));

        } catch (Exception e) {
            log.error(e.getMessage(), e);
            Assert.fail(e.getMessage());
        }
    }
}