Author: fdesbois Date: 2010-04-19 12:14:03 +0000 (Mon, 19 Apr 2010) New Revision: 452 Log: Add new tests for ServiceContact Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java trunk/wao-business/src/test/java/fr/ifremer/wao/TestManager.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java trunk/wao-business/src/test/resources/import/contacts.csv trunk/wao-business/src/test/resources/log4j.properties Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-04-16 15:00:30 UTC (rev 451) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-04-19 12:14:03 UTC (rev 452) @@ -56,6 +56,7 @@ import fr.ifremer.wao.entity.*; import fr.ifremer.wao.io.*; import fr.ifremer.wao.io.WaoCsvHeader.*; +import org.apache.commons.lang.StringUtils; import org.nuiton.util.PeriodDates; import org.nuiton.util.beans.BinderBuilder; import org.nuiton.util.beans.BinderProvider; @@ -214,18 +215,28 @@ // Create the contact if not defined if (destination == null) { + if (log.isDebugEnabled()) { + log.debug("Create a new contact on " + + source.getTopiaCreateDate()); + } destination = dao.create( Contact.BOAT, source.getBoat(), Contact.SAMPLE_ROW, source.getSampleRow(), // FIXME-FD20100415 : don't use the topiaCreateDate as a business field TopiaEntity.TOPIA_CREATE_DATE, source.getTopiaCreateDate()); + + if (log.isDebugEnabled()) { + log.debug("TopiaId of the new contact : " + + destination.getTopiaId()); + } + // Set the new topiaId in source contact source.setTopiaId(destination.getTopiaId()); } // Bind the contact in argument with the contact in session - BinderProvider.getBinder(Contact.class). - copy(source, destination); + BinderProvider.getBinder(Contact.class).copy(source, destination); + // Update the change dao.update(destination); } @@ -441,15 +452,16 @@ } // Create elligibleBoat if needed before saving the contact - updateElligibleBoatForContact(transaction, contact); + updateElligibleBoatForContact(transaction, contactCsv); try { // Execute createOrUpdateContact // Will calculate data for SampleMonth and maybe // throw a NullSampleMonthException if there is // an error during the calcul of sampleMonthTidesValue - createOrUpdateContact(dao, contact, contact, + createOrUpdateContact(dao, contactCsv, contact, updateValidation); + } catch (NullSampleMonthException eee) { // The row will be refused in this case throw new ImportRefusedException("Impossible de " + Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/TestManager.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/TestManager.java 2010-04-16 15:00:30 UTC (rev 451) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/TestManager.java 2010-04-19 12:14:03 UTC (rev 452) @@ -75,7 +75,7 @@ public void start() throws WaoException { if (log.isDebugEnabled()) { - log.debug("TEST START"); + log.debug("## TEST START"); } try { context = new WaoContextImpl(); Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java 2010-04-16 15:00:30 UTC (rev 451) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java 2010-04-19 12:14:03 UTC (rev 452) @@ -6,12 +6,14 @@ import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.bean.ContactState; +import fr.ifremer.wao.bean.ImportResults; import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.entity.BoatDAO; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyDAO; import fr.ifremer.wao.entity.Contact; +import fr.ifremer.wao.entity.ContactDAO; import fr.ifremer.wao.entity.SampleMonth; import fr.ifremer.wao.entity.SampleMonthDAO; import fr.ifremer.wao.entity.SampleRow; @@ -25,8 +27,10 @@ import fr.ifremer.wao.io.WaoCsvHeader.SAMPLING; import fr.ifremer.wao.service.ServiceContactImpl.NullSampleMonthException; import java.io.IOException; +import java.io.InputStream; import java.text.ParseException; import java.util.Date; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -196,7 +200,8 @@ } @Test - public void testUpdateSampleMonthTidesValue() throws TopiaException, NullSampleMonthException { + public void testUpdateSampleMonthTidesValue() throws TopiaException, + NullSampleMonthException { logger.info("testUpdateSampleMonthTidesValue"); /** PREPARE DATA **/ @@ -310,7 +315,7 @@ ImportRefusedException, ImportRefusedException, ParseException { - logger.info("testUpdateSampleMonthTidesValue"); + logger.info("testLoadContactCsv"); /** PREPARE DATA **/ prepareData(true, true); @@ -428,4 +433,183 @@ transaction.closeContext(); } } + + @Test + public void testCreateOrUpdateContact() + throws TopiaException, NullSampleMonthException { + logger.info("testCreateOrUpdateContact"); + + /** PREPARE DATA **/ + prepareData(true, true); + + // Don't use a mock in this case + Contact newContact = service.getNewContact(observer, sampleRow, boat); + newContact.setTopiaCreateDate(DateUtils.createDate(2, 3, 2010)); + + /** EXEC METHOD **/ + + logger.info("test 1 : Create new contact with state CONTACT_START"); + TopiaContext transaction = null; + String newTopiaId = null; + try { + transaction = manager.getContext().beginTransaction(); + + ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); + + service.createOrUpdateContact(dao, newContact, null, false); + transaction.commitTransaction(); + + newTopiaId = newContact.getTopiaId(); + assertNotNull(newTopiaId); + } finally { + if (transaction != null) { + transaction.closeContext(); + } + } + + logger.info("test 1 : Check contact existence"); + try { + transaction = manager.getContext().beginTransaction(); + + ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); + + Contact existingContact = dao.findByTopiaId(newTopiaId); + assertNotNull(existingContact); + assertEquals(boat, existingContact.getBoat()); + assertEquals(sampleRow, existingContact.getSampleRow()); + assertEquals(observer, existingContact.getObserver()); + assertEquals(ContactState.CONTACT_START, + existingContact.getContactState()); + } finally { + if (transaction != null) { + transaction.closeContext(); + } + } + + logger.info("test 2 : Update the contact with state BOARDING_DONE, " + + "tideBeginDate, tideEndDate and NbObservants"); + Date tideBeginDate = DateUtils.createDate(18,3,2010); + Date tideEndDate = DateUtils.createDate(19,3,2010); + try { + transaction = manager.getContext().beginTransaction(); + + newContact.setContactState(ContactState.BOARDING_DONE); + newContact.setTideBeginDate(tideBeginDate); + newContact.setTideEndDate(tideEndDate); + newContact.setNbObservants(1); + + ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); + Contact oldContact = dao.findByTopiaId(newTopiaId); + + service.createOrUpdateContact(dao, newContact, oldContact, false); + transaction.commitTransaction(); + } finally { + if (transaction != null) { + transaction.closeContext(); + } + } + + logger.info("test 2 : Check update contact"); + try { + transaction = manager.getContext().beginTransaction(); + + ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); + + Contact existingContact = dao.findByTopiaId(newTopiaId); + assertNotNull(existingContact); + assertEquals(1, existingContact.getNbObservants()); + assertEquals(tideBeginDate, existingContact.getTideBeginDate()); + assertEquals(tideEndDate, existingContact.getTideEndDate()); + assertEquals(ContactState.BOARDING_DONE, + existingContact.getContactState()); + + // Will have an update on sampleMonth 03/2010 for estimatedTides + SampleMonthDAO monthDAO = + WaoDAOHelper.getSampleMonthDAO(transaction); + SampleMonth existingMonth = + monthDAO.findByTopiaId(sampleMonth.getTopiaId()); + assertNotNull(existingMonth); + assertEquals(1, existingMonth.getEstimatedTidesValue()); + } finally { + if (transaction != null) { + transaction.closeContext(); + } + } + } + + @Test + public void testImportContactCsv() + throws TopiaException, WaoBusinessException, IOException { + logger.info("testImportContactCsv"); + + /** PREPARE DATA **/ + prepareData(true, true); + + when(creator.getCompany()).thenReturn(company); + when(creator.isAdmin()).thenReturn(false); + when(creator.getLogin()).thenReturn(observer.getLogin()); + + /** EXEC METHOD **/ + logger.info("test 1 : Import new contact with observer creator"); + InputStream input = + getClass().getResourceAsStream("/import/contacts.csv"); + try { + ImportResults results = service.importContactCsv(creator, input); + assertEquals(1, results.getNbRowsImported()); + assertEquals(0, results.getNbRowsRefused()); + assertTrue(results.getErrors().isEmpty()); + } finally { + input.close(); + } + + logger.info("test 1 : Check creation of the contact"); + TopiaContext transaction = null; + try { + transaction = manager.getContext().beginTransaction(); + + ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); + + List<Contact> contactsFound = dao.findAll(); + assertEquals(1, contactsFound.size()); + Contact contactFound = contactsFound.get(0); + assertNull(contactFound.getValidationCompany()); + assertNull(contactFound.getValidationProgram()); + } finally { + if (transaction != null) { + transaction.closeContext(); + } + } + + logger.info("test 2 : Import new contact with super admin creator"); + when(creator.getCompany()).thenReturn(company); + when(creator.isAdmin()).thenReturn(true); + when(creator.getLogin()).thenReturn("admin"); + + input = getClass().getResourceAsStream("/import/contacts.csv"); + try { + ImportResults results = service.importContactCsv(creator, input); + assertEquals(1, results.getNbRowsImported()); + assertEquals(0, results.getNbRowsRefused()); + assertTrue(results.getErrors().isEmpty()); + } finally { + input.close(); + } + + logger.info("test 2 : Check update validations of the contact"); + try { + transaction = manager.getContext().beginTransaction(); + + ContactDAO dao = WaoDAOHelper.getContactDAO(transaction); + + List<Contact> contactsFound = dao.findAll(); + assertEquals(1, contactsFound.size()); + Contact contactFound = contactsFound.get(0); + assertTrue(contactFound.getValidationCompany()); + assertTrue(contactFound.getValidationProgram()); + } finally { + if (transaction != null) { + transaction.closeContext(); + } + } + } } Modified: trunk/wao-business/src/test/resources/import/contacts.csv =================================================================== --- trunk/wao-business/src/test/resources/import/contacts.csv 2010-04-16 15:00:30 UTC (rev 451) +++ trunk/wao-business/src/test/resources/import/contacts.csv 2010-04-19 12:14:03 UTC (rev 452) @@ -1,2 +1,2 @@ "CONT_CREATION","OBSERV_ID","PLAN_CODE","NAVS_COD","CONT_ETAT","CONT_DEBUT_MAREE","CONT_FIN_MAREE","CONT_NB_OBSERV","CONT_MAM_CAPT","CONT_MAM_OBS","CONT_COMMENT","CONT_ALLEGRO","CONT_SOCIETE_VALID","CONT_PROGRAM_VALID" -17/07/2009,"jmichmuche","2010_01",177474,"Embarquement réalisé ",22/07/2010,22/07/2010,1,,,,22/07/2010,"A","A" \ No newline at end of file +17/03/2010,"jmichmuche","2010_01",175846,"Embarquement réalisé ",18/03/2010,19/03/2010,1,,,,22/07/2010,"A","A" Modified: trunk/wao-business/src/test/resources/log4j.properties =================================================================== --- trunk/wao-business/src/test/resources/log4j.properties 2010-04-16 15:00:30 UTC (rev 451) +++ trunk/wao-business/src/test/resources/log4j.properties 2010-04-19 12:14:03 UTC (rev 452) @@ -8,6 +8,6 @@ log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%p] %c{2} %m%n -log4j.logger.fr.ifremer.wao=DEBUG +log4j.logger.fr.ifremer.wao=INFO log4j.logger.org.nuiton.util=INFO log4j.logger.org.nuiton.util.beans.BinderProvider=ERROR