org.sipfoundry.sipxconfig.phone.PhoneTestDb.java Source code

Java tutorial

Introduction

Here is the source code for org.sipfoundry.sipxconfig.phone.PhoneTestDb.java

Source

/*
 *
 *
 * Copyright (C) 2007 Pingtel Corp., certain elements licensed under a Contributor Agreement.
 * Contributors retain copyright to elements licensed under a Contributor Agreement.
 * Licensed to the User under the LGPL license.
 *
 * $
 */
package org.sipfoundry.sipxconfig.phone;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.apache.commons.lang.RandomStringUtils;
import org.dbunit.Assertion;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.ReplacementDataSet;
import org.sipfoundry.sipxconfig.SipxDatabaseTestCase;
import org.sipfoundry.sipxconfig.TestHelper;
import org.sipfoundry.sipxconfig.common.CoreContext;
import org.sipfoundry.sipxconfig.common.User;
import org.sipfoundry.sipxconfig.device.DeviceVersion;
import org.sipfoundry.sipxconfig.device.ModelSource;
import org.sipfoundry.sipxconfig.setting.Group;
import org.sipfoundry.sipxconfig.setting.SettingDao;
import org.sipfoundry.sipxconfig.setting.ValueStorage;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException;

public class PhoneTestDb extends SipxDatabaseTestCase {

    private PhoneContext context;

    private SettingDao settingDao;

    private CoreContext core;

    private ModelSource<PhoneModel> phoneModelSource;

    @Override
    protected void setUp() throws Exception {
        ApplicationContext app = TestHelper.getApplicationContext();
        context = (PhoneContext) app.getBean(PhoneContext.CONTEXT_BEAN_NAME);
        settingDao = (SettingDao) app.getBean(SettingDao.CONTEXT_NAME);
        core = (CoreContext) app.getBean(CoreContext.CONTEXT_BEAN_NAME);
        phoneModelSource = (ModelSource<PhoneModel>) app.getBean("nakedPhoneModelSource");

        TestHelper.cleanInsert("ClearDb.xml");
    }

    public void testSave() throws Exception {
        Phone phone = context.newPhone(new TestPhoneModel());
        phone.setSerialNumber("999123456789");
        phone.setDescription("unittest-sample phone1");
        context.storePhone(phone);

        ITable actual = TestHelper.getConnection().createDataSet().getTable("phone");

        IDataSet expectedDs = TestHelper.loadDataSetFlat("phone/SaveEndpointExpected.xml");
        ReplacementDataSet expectedRds = new ReplacementDataSet(expectedDs);
        expectedRds.addReplacementObject("[phone_id_1]", phone.getId());
        expectedRds.addReplacementObject("[null]", null);
        ITable expected = expectedRds.getTable("phone");
        Assertion.assertEquals(expected, actual);
    }

    public void testLoadAndDelete() throws Exception {
        TestHelper.insertFlat("common/TestUserSeed.db.xml");
        TestHelper.cleanInsertFlat("phone/EndpointLineSeed.xml");

        Phone p = context.loadPhone(new Integer(1000));
        assertEquals("999123456789", p.getSerialNumber());

        Integer id = p.getId();
        context.deletePhone(p);
        try {
            context.loadPhone(id);
            fail();
        } catch (HibernateObjectRetrievalFailureException x) {
            assertTrue(true);
        }

        IDataSet actual = TestHelper.getConnection().createDataSet();
        assertEquals(0, actual.getTable("phone").getRowCount());
        assertEquals(0, actual.getTable("line").getRowCount());
    }

    public void testUpdateSettings() throws Exception {
        TestHelper.cleanInsertFlat("phone/EndpointSeed.xml");

        Phone p = context.loadPhone(new Integer(1000));
        p.setSettingValue("server/outboundProxy", "bigbird");
        context.storePhone(p);
        context.flush();

        Phone reloadPhone = context.loadPhone(new Integer(1000));
        IDataSet expectedDs = TestHelper.loadDataSetFlat("phone/UpdateSettingsExpected.xml");
        ReplacementDataSet expectedRds = new ReplacementDataSet(expectedDs);

        ValueStorage s = (ValueStorage) reloadPhone.getValueStorage();
        assertNotNull(s);
        expectedRds.addReplacementObject("[value_storage_id]", s.getId());

        IDataSet actual = TestHelper.getConnection().createDataSet();
        Assertion.assertEquals(expectedRds.getTable("setting_value"), actual.getTable("setting_value"));
    }

    public void testAddGroup() throws Exception {
        TestHelper.insertFlat("common/TestUserSeed.db.xml");
        TestHelper.cleanInsertFlat("phone/EndpointSeed.xml");
        TestHelper.cleanInsertFlat("phone/SeedPhoneGroup.xml");

        Phone p = context.loadPhone(new Integer(1000));
        List groups = context.getGroups();
        p.addGroup((Group) groups.get(0));
        context.storePhone(p);

        IDataSet expectedDs = TestHelper.loadDataSetFlat("phone/AddGroupExpected.xml");
        IDataSet actual = TestHelper.getConnection().createDataSet();
        Assertion.assertEquals(expectedDs.getTable("phone_group"), actual.getTable("phone_group"));
    }

    public void testRemoveGroupThenAddBackThenAddAnotherGroup() throws Exception {
        TestHelper.cleanInsertFlat("phone/EndpointSeed.xml");
        TestHelper.cleanInsertFlat("phone/SeedPhoneGroup.xml");

        Phone p = context.loadPhone(new Integer(1000));
        List groups = context.getGroups();
        p.addGroup((Group) groups.get(0));
        context.storePhone(p);
        p = null;

        Phone reloaded = context.loadPhone(new Integer(1000));
        reloaded.getGroups().clear();
        reloaded.addGroup((Group) groups.get(0));
        reloaded.addGroup((Group) groups.get(1));
        context.storePhone(reloaded);

        IDataSet expectedDs = TestHelper.loadDataSetFlat("phone/AddSecondGroupExpected.xml");
        IDataSet actual = TestHelper.getConnection().createDataSet();
        Assertion.assertEquals(expectedDs.getTable("phone_group"), actual.getTable("phone_group"));
    }

    public void testPhoneSubclassSave() throws Exception {
        PhoneModel model = new PhoneModel("acmePhone", "acmePhoneStandard");
        Phone subclass = context.newPhone(model);
        subclass.setSerialNumber("000000000000");
        context.storePhone(subclass);

        IDataSet expectedDs = TestHelper.loadDataSetFlat("phone/PhoneSubclassSaveExpected.xml");
        IDataSet actual = TestHelper.getConnection().createDataSet();
        ReplacementDataSet expectedRds = new ReplacementDataSet(expectedDs);
        expectedRds.addReplacementObject("[phone_id]", subclass.getId());
        expectedRds.addReplacementObject("[null]", null);

        Assertion.assertEquals(expectedRds.getTable("phone"), actual.getTable("phone"));
    }

    public void testPhoneSubclassDelete() throws Exception {
        TestHelper.cleanInsertFlat("phone/PhoneSubclassSeed.xml");
        Phone subclass = context.loadPhone(new Integer(1000));
        subclass.setSerialNumber("000000000000");
        context.deletePhone(subclass);

        IDataSet actual = TestHelper.getConnection().createDataSet();
        assertEquals(0, actual.getTable("phone").getRowCount());
    }

    public void testClear() throws Exception {
        TestHelper.insertFlat("common/TestUserSeed.db.xml");
        TestHelper.cleanInsertFlat("phone/EndpointLineSeed.xml");
        context.clear();
    }

    public void testDeletePhoneGroups() throws Exception {
        TestHelper.cleanInsertFlat("phone/GroupMemberCountSeed.xml");
        settingDao.deleteGroups(Collections.singletonList(new Integer(1001)));
        // link table references removed
        ITable actual = TestHelper.getConnection().createDataSet().getTable("phone_group");
        // just phone 2 and group 2
        assertEquals(1, actual.getRowCount());
    }

    public void testPhonesByUserId() throws Exception {
        TestHelper.cleanInsertFlat("common/TestUserSeed.db.xml");
        TestHelper.cleanInsertFlat("phone/EndpointLineSeed.xml");
        Collection phones = context.getPhonesByUserId(new Integer(1000));
        assertEquals(1, phones.size());
        Phone p = (Phone) phones.iterator().next();
        assertEquals("unittest-sample phone1", p.getDescription());
    }

    public void testPhonesByUserIdAndPhoneModel() throws Exception {
        TestHelper.cleanInsertFlat("common/TestUserSeed.db.xml");
        TestHelper.cleanInsertFlat("phone/EndpointLineSeed.xml");
        Collection phones = context.getPhonesByUserIdAndPhoneModel(new Integer(1000), "testPhoneModel");
        assertEquals(1, phones.size());
        Phone p = (Phone) phones.iterator().next();
        assertEquals("unittest-sample phone1", p.getDescription());
        phones = context.getPhonesByUserIdAndPhoneModel(new Integer(1000), "unknownModel");
        assertEquals(0, phones.size());
    }

    public void testDeleteUserRemoveLines() throws Exception {
        TestHelper.cleanInsertFlat("common/TestUserSeed.db.xml");
        TestHelper.cleanInsertFlat("phone/EndpointLineSeed.xml");
        User testUser = core.loadUser(new Integer(1000));
        core.deleteUser(testUser);

        ITable actual = TestHelper.getConnection().createDataSet().getTable("line");
        assertEquals(0, actual.getRowCount());
    }

    public void testDeleteUserOnPhoneWithExternalLines() throws Exception {
        TestHelper.cleanInsertFlat("common/TestUserSeed.db.xml");
        TestHelper.cleanInsertFlat("phone/ExternalLineSeed.xml");
        User testUser = core.loadUser(new Integer(1000));
        core.deleteUser(testUser);

        ITable actual = TestHelper.getConnection().createDataSet().getTable("line");
        assertEquals(1, actual.getRowCount());

        // no primary user after user is deleted
        Phone phone = context.loadPhone(1000);
        assertNull(phone.getPrimaryUser());
    }

    public void testDeviceVersion() throws Exception {
        TestHelper.cleanInsertFlat("phone/PhoneVersionSeed.db.xml");
        Phone phone = context.loadPhone(1000);
        DeviceVersion deviceVersion = phone.getDeviceVersion();
        assertNotNull(deviceVersion);
        assertEquals("acmePhone", deviceVersion.getVendorId());
        assertEquals("1", deviceVersion.getVersionId());

        context.storePhone(phone);
    }

    public void testGetPrimaryUser() throws Exception {
        TestHelper.insertFlat("common/TestUserSeed.db.xml");
        TestHelper.cleanInsertFlat("phone/EndpointLineSeed.xml");
        Phone phone = context.loadPhone(1000);
        User user = phone.getPrimaryUser();
        assertNotNull(user);
        assertEquals(1000, user.getId().intValue());
    }

    public void testGetPrimaryUserNoUser() throws Exception {
        TestHelper.cleanInsertFlat("phone/PhoneVersionSeed.db.xml");
        Phone phone = context.loadPhone(1000);
        assertNull(phone.getPrimaryUser());
    }

    public void testPopulatePhones() throws Exception {
        for (PhoneModel model : phoneModelSource.getModels()) {
            Phone phone = context.newPhone(model);
            phone.setSerialNumber(RandomStringUtils.randomNumeric(12));
            context.storePhone(phone);
        }
    }
}