/** * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L. * Copyright (C) 2007 Autentia Real Bussiness Solution S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.autentia.tnt.manager.contacts.advancedsearch; import com.autentia.tnt.businessobject.Contact; import com.autentia.tnt.businessobject.ContactInfo; import com.autentia.tnt.businessobject.Department; import com.autentia.tnt.businessobject.Organization; import com.autentia.tnt.businessobject.OrganizationISOCategory; import com.autentia.tnt.businessobject.OrganizationType; import com.autentia.tnt.businessobject.Position; import com.autentia.tnt.businessobject.Province; import com.autentia.tnt.dao.hibernate.ContactDAO; import com.autentia.tnt.dao.hibernate.DepartmentDAO; import com.autentia.tnt.dao.hibernate.OrganizationDAO; import com.autentia.tnt.dao.hibernate.OrganizationISOCategoryDAO; import com.autentia.tnt.dao.hibernate.OrganizationTypeDAO; import com.autentia.tnt.dao.hibernate.PositionDAO; import com.autentia.tnt.dao.hibernate.ProvinceDAO; import com.autentia.tnt.dao.search.AdvancedSearchContactSearch; import com.autentia.tnt.tracking.EntityChange; import com.autentia.tnt.tracking.hibernate.dao.EntityChangeDAO; import com.autentia.tnt.util.HibernateUtil; import com.autentia.tnt.util.testing.SpringUtilsForTesting; import java.util.ArrayList; import java.util.List; import org.hibernate.SessionFactory; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ContactPositionManagerTest { private static final boolean JUST_ACTIVE = false; private static final boolean ACTIVE_AND_HISTORICAL = true; private static SessionFactory sessionFactory; // datos basicos private Province province = new Province(); private OrganizationType organizationType = new OrganizationType(); private OrganizationISOCategory organizationISOCategory = new OrganizationISOCategory(); private Organization organization = new Organization(); private Department department = new Department(); // informacion de los contactos private Position becario = new Position(); private Position responsableDireccion = new Position(); private Position responsableFacturacion = new Position(); private Position analista = new Position(); private Contact antonioRuiz = new Contact(); private Contact pilarSancho = new Contact(); @BeforeClass public static void init() throws Exception { SpringUtilsForTesting.configure(new ClassPathXmlApplicationContext("applicationContext-test.xml")); sessionFactory = HibernateUtil.getSessionFactory(); sessionFactory.openSession(); } @Before public void beginTransaction() throws Exception { sessionFactory.getCurrentSession().beginTransaction(); } @After public void rollbackTransaction() throws Exception { if (sessionFactory.getCurrentSession().getTransaction().isActive()) { sessionFactory.getCurrentSession().getTransaction().rollback(); } sessionFactory.getCurrentSession().close(); } /** * Busqueda sin filtrado */ @Test public void testDoAdvancedSearchWithoutCriteria() { final PositionDAO positionDAO = (PositionDAO) SpringUtilsForTesting.getSpringBean("daoPosition"); final ContactDAO contactDAO = (ContactDAO) SpringUtilsForTesting.getSpringBean("daoContact"); final ContactPositionManager contactPositionManager = new ContactPositionManager(contactDAO, positionDAO); this.insertInitialData(); this.insertContactData(); final AdvancedSearchContactSearch advancedSearch = new AdvancedSearchContactSearch(); final List<ContactPosition> contactPositions = contactPositionManager.doAdvancedSearch(advancedSearch, JUST_ACTIVE); // deben salir 4 resultados, puesto que hay 2 contactos con puesto y 2 puestos sin asignar if (contactPositions.size() != 4) { fail("Deberian haber salido 4 resultados, pero han salido " + contactPositions.size()); } } /** * Buscar por puesto ocupado */ @Test public void testDoAdvancedSearchBusyPosition() { final PositionDAO positionDAO = (PositionDAO) SpringUtilsForTesting.getSpringBean("daoPosition"); final ContactDAO contactDAO = (ContactDAO) SpringUtilsForTesting.getSpringBean("daoContact"); final ContactPositionManager contactPositionManager = new ContactPositionManager(contactDAO, positionDAO); this.insertInitialData(); this.insertContactData(); final AdvancedSearchContactSearch advancedSearch = new AdvancedSearchContactSearch(); final List<Position> positions = new ArrayList<Position>(); positions.add(becario); advancedSearch.setPositions(positions); final List<ContactPosition> contactPositions = contactPositionManager.doAdvancedSearch(advancedSearch, JUST_ACTIVE); // debe salir un resultado, que es Antonio Ruiz ya que posee el cargo de becario if (contactPositions.size() != 1) { fail("Deberia haber salido 1 resultado (1 contacto), pero han salido " + contactPositions.size()); } if (!contactPositions.get(0).getName().equals("Antonio Ruiz")) { fail("El resultado debería haber sido 'Antonio Ruiz', pero ha sido " + contactPositions.get(0).getName()); } } /** * Buscar por puesto libre */ @Test public void testDoAdvancedSearchEmptyPosition() { final PositionDAO positionDAO = (PositionDAO) SpringUtilsForTesting.getSpringBean("daoPosition"); final ContactDAO contactDAO = (ContactDAO) SpringUtilsForTesting.getSpringBean("daoContact"); final ContactPositionManager contactPositionManager = new ContactPositionManager(contactDAO, positionDAO); this.insertInitialData(); this.insertContactData(); final AdvancedSearchContactSearch advancedSearch = new AdvancedSearchContactSearch(); final List<Position> positions = new ArrayList<Position>(); positions.add(responsableDireccion); advancedSearch.setPositions(positions); final List<ContactPosition> contactPositions = contactPositionManager.doAdvancedSearch(advancedSearch, JUST_ACTIVE); // debe salir un resultado que es el puesto sin ocupantes if (contactPositions.size() != 1) { fail("Deberia haber salido 1 resultado (1 puesto), pero han salido " + contactPositions.size()); } if (!contactPositions.get(0).getPosition().equals("Responsable de Dirección")) { fail("El resultado debería haber sido 'Responsable de Dirección', pero ha sido " + contactPositions.get(0).getPosition()); } } /** * Buscar por en historico y en activo */ @Test public void testDoAdvancedSearchHistorical() { final PositionDAO positionDAO = (PositionDAO) SpringUtilsForTesting.getSpringBean("daoPosition"); final ContactDAO contactDAO = (ContactDAO) SpringUtilsForTesting.getSpringBean("daoContact"); final EntityChangeDAO entityChangeDAO = (EntityChangeDAO) SpringUtilsForTesting.getSpringBean("daoEntityChange"); final ContactPositionManager contactPositionManager = new ContactPositionManager(contactDAO, positionDAO); this.insertInitialData(); this.insertContactData(); // añadimos que Pilar Sancho fue becaria final EntityChange changePosition = new EntityChange(); changePosition.setField(Contact.FIELD_POSITION); changePosition.setNewValue(""); changePosition.setOldValue("becario"); changePosition.setEntityId(pilarSancho.getId()); changePosition.setEntityName("com.autentia.tnt.businessobject.Contact"); entityChangeDAO.insert(changePosition); final AdvancedSearchContactSearch advancedSearch = new AdvancedSearchContactSearch(); final List<Position> positions = new ArrayList<Position>(); positions.add(becario); advancedSearch.setPositions(positions); final List<ContactPosition> contactPositions = contactPositionManager.doAdvancedSearch(advancedSearch, ACTIVE_AND_HISTORICAL); // debe salir dos resultados, ya que hay uno que es becario actualmente y otro que lo fue if (contactPositions.size() != 2) { fail("Deberian haber salido 2 resultados, pero han salido " + contactPositions.size()); } } /** * Buscar por en historico y en activo */ @Test public void testDoAdvancedSearchHistoricalSimpleValue() { final PositionDAO positionDAO = (PositionDAO) SpringUtilsForTesting.getSpringBean("daoPosition"); final ContactDAO contactDAO = (ContactDAO) SpringUtilsForTesting.getSpringBean("daoContact"); final EntityChangeDAO entityChangeDAO = (EntityChangeDAO) SpringUtilsForTesting.getSpringBean("daoEntityChange"); final ContactPositionManager contactPositionManager = new ContactPositionManager(contactDAO, positionDAO); this.insertInitialData(); this.insertContactData(); // añadimos que Pilar Sancho trabajaba en Italia final EntityChange changePosition = new EntityChange(); changePosition.setField(Contact.FIELD_COUNTRY); changePosition.setNewValue("España"); changePosition.setOldValue("Italia"); changePosition.setEntityId(pilarSancho.getId()); changePosition.setEntityName("com.autentia.tnt.businessobject.Contact"); entityChangeDAO.insert(changePosition); final AdvancedSearchContactSearch advancedSearch = new AdvancedSearchContactSearch(); advancedSearch.setCountry("Italia"); final List<ContactPosition> contactPositions = contactPositionManager.doAdvancedSearch(advancedSearch, ACTIVE_AND_HISTORICAL); // debe salir dos resultados, ya que hay uno que es becario actualmente y otro que lo fue if (contactPositions.size() != 1) { fail("Deberia haber salido 1 resultado, pero han salido " + contactPositions.size()); } } /** * Metodo encargado de insertar datos muy generales pero que son necesarios * en la gestion de contactos */ private void insertInitialData() { final ProvinceDAO provinceDAO = (ProvinceDAO) SpringUtilsForTesting.getSpringBean("daoProvince"); final OrganizationISOCategoryDAO organizationISOCategoryDAO = (OrganizationISOCategoryDAO) SpringUtilsForTesting.getSpringBean("daoOrganizationISOCategory"); final OrganizationTypeDAO organizationTypeDAO = (OrganizationTypeDAO) SpringUtilsForTesting.getSpringBean("daoOrganizationType"); final OrganizationDAO organizationDAO = (OrganizationDAO) SpringUtilsForTesting.getSpringBean("daoOrganization"); final DepartmentDAO departmentDAO = (DepartmentDAO) SpringUtilsForTesting.getSpringBean("daoDepartment"); // provincia province.setName("Madrid"); provinceDAO.insert(province); // categoria de la organizacion organizationType.setName("prospecto"); organizationTypeDAO.insert(organizationType); // categoria ISO de la organizacion organizationISOCategory.setName("A"); organizationISOCategoryDAO.insert(organizationISOCategory); // organizacion organization.setName("Tecnologías de España"); organization.setProvince(province); organization.setType(organizationType); organization.setCategory(organizationISOCategory); organizationDAO.insert(organization); // departamento department.setName("comercial"); department.setDescription("comercial"); departmentDAO.insert(department); } /** * Metodo encargado de insertar los datos de los propios contactos */ private void insertContactData() { final PositionDAO positionDAO = (PositionDAO) SpringUtilsForTesting.getSpringBean("daoPosition"); final ContactDAO contactDAO = (ContactDAO) SpringUtilsForTesting.getSpringBean("daoContact"); // puestos becario.setName("becario"); becario.setDescription("becario"); becario.setEmail("becario@dominio.com"); becario.setPhone("+344343"); becario.setFax("+341212"); becario.setCountry("España"); becario.setProvince(province); becario.setCity("barbate"); becario.setPostalCode("10111"); becario.setAddress("C/ Becario"); positionDAO.insert(becario); responsableDireccion.setName("Responsable de Dirección"); responsableDireccion.setDescription("Responsable de Dirección"); responsableDireccion.setEmail("responsableDireccion@dominio.com"); responsableDireccion.setPhone("+344343"); responsableDireccion.setFax("+341212"); responsableDireccion.setCountry("España"); responsableDireccion.setProvince(province); responsableDireccion.setCity("barbate"); responsableDireccion.setPostalCode("10111"); responsableDireccion.setAddress("C/ Becario"); positionDAO.insert(responsableDireccion); responsableFacturacion.setName("Responsable de Facturación"); responsableFacturacion.setDescription("Responsable de Facturación"); responsableFacturacion.setEmail("responsableFacturacion@dominio.com"); responsableFacturacion.setPhone("+344343"); responsableFacturacion.setFax("+341212"); responsableFacturacion.setCountry("España"); responsableFacturacion.setProvince(province); responsableFacturacion.setCity("barbate"); responsableFacturacion.setPostalCode("10111"); responsableFacturacion.setAddress("C/ Becario"); positionDAO.insert(responsableFacturacion); analista.setName("Analista"); analista.setDescription("Analista"); analista.setEmail("analista@dominio.com"); analista.setPhone("+344343"); analista.setFax("+341212"); analista.setCountry("España"); analista.setProvince(province); analista.setCity("barbate"); analista.setPostalCode("10111"); analista.setAddress("C/ Becario"); positionDAO.insert(analista); // contactos antonioRuiz.setName("Antonio Ruiz"); antonioRuiz.setEmail("antonio@dominio.com"); antonioRuiz.setPhone("+341234"); antonioRuiz.setFax("+349876"); antonioRuiz.setCountry("España"); antonioRuiz.setProvince(province); antonioRuiz.setCity("Casarrubuelos de arriba"); antonioRuiz.setPostalCode("90666"); antonioRuiz.setAddress("C/ Antonio Ruiz"); contactDAO.insert(antonioRuiz); pilarSancho.setName("Pilar M. de Sancho"); pilarSancho.setEmail("pilar@dominio.com"); pilarSancho.setPhone("+342468"); pilarSancho.setFax("+348642"); pilarSancho.setCountry("España"); pilarSancho.setProvince(province); pilarSancho.setCity("Casarrubuelos de abajo"); pilarSancho.setPostalCode("90123"); pilarSancho.setAddress("C/ Pilar Sancho"); contactDAO.insert(pilarSancho); // relacion entre contactos y puestos final ContactInfo contactInfoAntonio = new ContactInfo(); contactInfoAntonio.setContact(antonioRuiz); contactInfoAntonio.setDepartment(department); contactInfoAntonio.setOrganization(organization); contactInfoAntonio.setPosition(becario); antonioRuiz.addContactInfo(contactInfoAntonio); contactDAO.update(antonioRuiz); final ContactInfo contactInfoPilar = new ContactInfo(); contactInfoPilar.setContact(pilarSancho); contactInfoPilar.setDepartment(department); contactInfoPilar.setOrganization(organization); contactInfoPilar.setPosition(analista); pilarSancho.addContactInfo(contactInfoPilar); contactDAO.update(pilarSancho); } }