package com.autentia.tnt.bean.billing; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.math.BigDecimal; import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.List; import javax.faces.model.SelectItem; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import com.autentia.tnt.businessobject.Bill; import com.autentia.tnt.businessobject.BillBreakDown; import com.autentia.tnt.businessobject.Organization; import com.autentia.tnt.businessobject.Project; import com.autentia.tnt.manager.admin.ProjectManager; import com.autentia.tnt.test.utils.SpringUtilsForTesting; import com.autentia.tnt.util.ConfigurationUtil; import com.autentia.tnt.util.SpringUtils; public class BillBeanTest { private BillBean billBean; final static ConfigurationUtil configurationUtil = mock(ConfigurationUtil.class); final static ApplicationContext ctx = mock(ApplicationContext.class); final static ProjectManager projectManager = mock(ProjectManager.class); final static Organization org = mock(Organization.class); final Bill bill = mock(Bill.class); final List<Project> expectedProjects = prepareReturnOpenProjects(); private final static float IVA_UNTIL_JUL_2010 = 3; private final static float IVA_UNTIL_SEPT_2012 = 2; private final static float IVA_ACTUAL=1; @BeforeClass public static void init() throws Exception { when(ctx.getBean("managerProject")).thenReturn(projectManager); when(ctx.getBean("configuration")).thenReturn(configurationUtil); SpringUtils.configureTest(ctx); } @Before public void initTest() throws Exception { billBean = new BillBean(); billBean.create(); Bill bill = new Bill(); billBean.setBill(bill); billBean.setSelectedOrganization(org); reset(projectManager); } private void prepareTestsIVA(){ when(configurationUtil.getActualIva()).thenReturn(IVA_ACTUAL); when(configurationUtil.getIvaUntilSeptember2012()).thenReturn(IVA_UNTIL_SEPT_2012); when(configurationUtil.getIvaUntilJuly2010()).thenReturn(IVA_UNTIL_JUL_2010); } @Test public void createBreakDownIn2009Test() { this.prepareTestsIVA(); final GregorianCalendar calendar = new GregorianCalendar(2009, 8, 31); billBean.setCreationDate(calendar.getTime()); billBean.createBreakDown(); for (BillBreakDown billBreakDown:billBean.getBill().getBreakDown()) { assertThat(billBreakDown.getIva(), is(new BigDecimal(IVA_UNTIL_JUL_2010))); } } @Test public void createBreakDownInFirstDayOf18Test() { this.prepareTestsIVA(); final GregorianCalendar calendar = new GregorianCalendar(2010, 6, 1); billBean.setCreationDate(calendar.getTime()); billBean.createBreakDown(); for (BillBreakDown billBreakDown:billBean.getBill().getBreakDown()) { assertThat(billBreakDown.getIva(), is(new BigDecimal(IVA_UNTIL_SEPT_2012))); } } @Test public void createBreakDownInLastDayOf18Test() { this.prepareTestsIVA(); final GregorianCalendar calendar = new GregorianCalendar(2012, 7, 31); billBean.setCreationDate(calendar.getTime()); billBean.createBreakDown(); for (BillBreakDown billBreakDown:billBean.getBill().getBreakDown()) { assertThat(billBreakDown.getIva(), is(new BigDecimal(IVA_UNTIL_SEPT_2012))); } } @Test public void createBreakDownInFirstDayOf21Test() { this.prepareTestsIVA(); final GregorianCalendar calendar = new GregorianCalendar(2012, 8, 1); billBean.setCreationDate(calendar.getTime()); billBean.createBreakDown(); for (BillBreakDown billBreakDown:billBean.getBill().getBreakDown()) { assertThat(billBreakDown.getIva(), is(new BigDecimal(IVA_ACTUAL))); } } private List<Project> prepareReturnOpenProjects() { List<Project> list = new ArrayList<Project>(); Project p1 = new Project(); p1.setId(1); p1.setOpen(true); p1.setName("Proyecto Abierto"); list.add(p1); Project p2 = new Project(); p2.setId(2); p2.setOpen(false); p2.setName("Proyecto Cerrado"); list.add(p2); return list; } @Test public void shouldCallGetProjectsOpenBySelectedOrganizationWhenIsANewBill() { when(bill.getId()).thenReturn(null); billBean.setBill(bill); when(projectManager.getOpenProjectsByOrganization(org)).thenReturn(expectedProjects); final List<SelectItem> result = billBean.getProjectsOpenBySelectedOrganization(); verify(projectManager).getOpenProjectsByOrganization(org); assertProjectsResult(expectedProjects, result); } @Test public void shouldCallGetProjectsByOrganizationWhenEditABill() { when(bill.getId()).thenReturn(1); billBean.setBill(bill); billBean.setSelectedOrganization(org); when(projectManager.getProjectsByOrganization(org)).thenReturn( expectedProjects); final List<SelectItem> result = billBean .getProjectsOpenBySelectedOrganization(); verify(projectManager).getProjectsByOrganization(org); assertProjectsResult(expectedProjects, result); } private void assertProjectsResult(List<Project> expectedProjects, List<SelectItem> result) { assertThat(result, is(notNullValue())); assertThat(result.size(), is(expectedProjects.size())); for (SelectItem selectItem : result) { assertThat((Project) selectItem.getValue(), isIn(expectedProjects)); } } }