package fr.mch.mdo.restaurant.services.business.managers.products; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import fr.mch.mdo.restaurant.beans.IMdoBean; import fr.mch.mdo.restaurant.beans.IMdoDaoBean; import fr.mch.mdo.restaurant.beans.IMdoDtoBean; import fr.mch.mdo.restaurant.dao.DaoServicesFactory; import fr.mch.mdo.restaurant.dto.beans.MdoTableAsEnumDto; import fr.mch.mdo.restaurant.dto.beans.ValueAddedTaxDto; import fr.mch.mdo.restaurant.dto.beans.ValueAddedTaxesManagerViewBean; import fr.mch.mdo.restaurant.exception.MdoException; import fr.mch.mdo.restaurant.services.business.managers.DefaultAdministrationManagerTest; import fr.mch.mdo.restaurant.services.business.managers.IAdministrationManager; import fr.mch.mdo.restaurant.services.business.managers.assembler.DefaultMdoTableAsEnumsAssembler; import fr.mch.mdo.test.MdoTestCase; public class DefaultValueAddedTaxesManagerTest extends DefaultAdministrationManagerTest { private BigDecimal basicTestRate = new BigDecimal(20); /** * Create the test case * * @param testName * name of the test case */ public DefaultValueAddedTaxesManagerTest(String testName) { super(testName); } /** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite(DefaultValueAddedTaxesManagerTest.class); } @Override protected IAdministrationManager getInstance() { return DefaultValueAddedTaxesManager.getInstance(); } @Override protected IMdoDtoBean createNewBean() { MdoTableAsEnumDto code = new MdoTableAsEnumDto(); // Use the existing data in database code.setId(1L); BigDecimal rate = basicTestRate.add(new BigDecimal(0.1f)); return createNewBean(code, rate); } @Override protected List<IMdoBean> createListBeans() { List<IMdoBean> list = new ArrayList<IMdoBean>(); MdoTableAsEnumDto code = new MdoTableAsEnumDto(); // Use the existing data in database try { // Do not use code.setId because the find list test uses compareTo // of ValueAddedTax code = (MdoTableAsEnumDto) DefaultMdoTableAsEnumsAssembler.getInstance().marshal((IMdoDaoBean) DaoServicesFactory.getMdoTableAsEnumsDao().findByPrimaryKey(2L)); } catch (MdoException e) { fail("Could not found the vat code."); } BigDecimal rate = basicTestRate.add(new BigDecimal(0.2f)); list.add(createNewBean(code, rate)); code = new MdoTableAsEnumDto(); // Use the existing data in database try { // Do not use code.setId because the find list test uses compareTo // of ValueAddedTax code = (MdoTableAsEnumDto) DefaultMdoTableAsEnumsAssembler.getInstance().marshal((IMdoDaoBean) DaoServicesFactory.getMdoTableAsEnumsDao().findByPrimaryKey(3L)); } catch (MdoException e) { fail("Could not found the vat code."); } rate = basicTestRate.add(new BigDecimal(0.3f)); list.add(createNewBean(code, rate)); return list; } @Override public void doUpdate() { MdoTableAsEnumDto codeToBeUpdated = new MdoTableAsEnumDto(); // Use the existing data in database codeToBeUpdated.setId(4L); BigDecimal rateToBeUpdated = basicTestRate.add(new BigDecimal(0.4f)); try { // Create new bean to be updated IMdoBean beanToBeUpdated = this.getInstance().insert(createNewBean(codeToBeUpdated, rateToBeUpdated)); assertTrue("IMdoBean must be instance of " + ValueAddedTaxDto.class, beanToBeUpdated instanceof ValueAddedTaxDto); ValueAddedTaxDto castedBean = (ValueAddedTaxDto) beanToBeUpdated; assertEquals("ValueAddedTaxDto code must be equals to unique key", codeToBeUpdated, castedBean.getCode()); assertEquals("ValueAddedTaxDto rate must be equals", rateToBeUpdated, castedBean.getRate()); // Update the created bean codeToBeUpdated = new MdoTableAsEnumDto(); // Use the existing data in database codeToBeUpdated.setId(5L); castedBean.setRate(basicTestRate.add(new BigDecimal(0.5f))); this.getInstance().update(castedBean); // Reload the modified bean ValueAddedTaxDto updatedBean = new ValueAddedTaxDto(); updatedBean.setId(castedBean.getId()); updatedBean = (ValueAddedTaxDto) this.getInstance().load(updatedBean); assertEquals("ValueAddedTaxDto code must be equals to unique key", castedBean.getCode().getId(), updatedBean.getCode().getId()); assertEquals("ValueAddedTaxDto rate must be equals", super.decimalFormat.format(castedBean.getRate()), super.decimalFormat.format(updatedBean.getRate())); } catch (Exception e) { fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage()); } } @Override public void doProcessList() { ValueAddedTaxesManagerViewBean viewBean = new ValueAddedTaxesManagerViewBean(); try { this.getInstance().processList(viewBean); assertNotNull("Main list not be null", viewBean.getList()); assertFalse("Main list not be empty", viewBean.getList().isEmpty()); assertNotNull("Code list not be null", viewBean.getCodes()); assertTrue("Codes list be empty because all available table types are already set into database", viewBean.getCodes().isEmpty()); } catch (MdoException e) { fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage()); } } public void testGetInstance() { assertTrue(this.getInstance() instanceof IValueAddedTaxesManager); assertTrue(this.getInstance() instanceof DefaultValueAddedTaxesManager); } private IMdoDtoBean createNewBean(MdoTableAsEnumDto code, BigDecimal rate) { ValueAddedTaxDto newBean = new ValueAddedTaxDto(); newBean.setCode(code); newBean.setRate(rate); return newBean; } /** * Test the method findByCodeName. */ public void testFindByCodeName() { String codeName = null; try { ((IValueAddedTaxesManager) this.getInstance()).findByCodeName(codeName); fail(DEFAULT_FAILED_MESSAGE); } catch (MdoException e) { assertNotNull("Exception because codeName null", e); } try { codeName = ""; ValueAddedTaxDto vat = ((IValueAddedTaxesManager) this.getInstance()).findByCodeName(codeName); assertNull("ValueAddedTaxDto must be null", vat); codeName = "ALCOHOL"; vat = ((IValueAddedTaxesManager) this.getInstance()).findByCodeName(codeName); assertNotNull("TableTypeDto must NOT be null", vat); assertEquals("Check TableTypeDto code name", codeName, vat.getCode().getName()); } catch (MdoException e) { fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage()); } } }