package net.rrm.ehour.ui.timesheet.dto; import com.google.common.collect.Lists; import net.rrm.ehour.config.EhourConfigStub; import net.rrm.ehour.data.DateRange; import net.rrm.ehour.domain.*; import net.rrm.ehour.timesheet.dto.WeekOverview; import net.rrm.ehour.util.DateUtil; import org.junit.Before; import org.junit.Test; import java.util.*; import static org.junit.Assert.*; public class TimesheetFactoryTest { private static final DateRange RANGE = DateUtil.getDateRangeForWeek(new GregorianCalendar(2012, Calendar.OCTOBER, 8)); private EhourConfigStub config; @Before public void set_up() { config = new EhourConfigStub(); config.setCompleteDayHours(8); } @Test public void should_build_timesheet_with_1_customer_with_1_assignment() { // given ProjectAssignment assignment = ProjectAssignmentObjectMother.createProjectAssignment(1); WeekOverview weekOverview = new WeekOverview(Collections.<TimesheetEntry>emptyList(), null, Arrays.asList(assignment), RANGE, null, Lists.<Date>newArrayList()); // when Timesheet timesheet = new TimesheetFactory(config, weekOverview).createTimesheet(); // then SortedMap<Customer,List<TimesheetRow>> customers = timesheet.getCustomers(); assertEquals(1, customers.keySet().size()); assertEquals(1, customers.values().iterator().next().size()); } @Test public void should_build_timesheet_with_multiple_assignments_on_same_project() { // given User user = UserObjectMother.createUser(); Project project = ProjectObjectMother.createProject(1); ProjectAssignment assignment01 = ProjectAssignmentObjectMother.createProjectAssignment(user, project); ProjectAssignment assignment02 = ProjectAssignmentObjectMother.createProjectAssignment(user, project); assignment02.setAssignmentId(2); assignment02.setRole("role"); WeekOverview weekOverview = new WeekOverview(Collections.<TimesheetEntry>emptyList(), null, Arrays.asList(assignment01, assignment02), RANGE, null, Lists.<Date>newArrayList()); // when Timesheet timesheet = new TimesheetFactory(config, weekOverview).createTimesheet(); // then SortedMap<Customer,List<TimesheetRow>> customers = timesheet.getCustomers(); assertEquals(1, customers.keySet().size()); assertEquals(2, customers.values().iterator().next().size()); } @Test public void should_build_timesheet_with_sorted_projects() { // given User user = UserObjectMother.createUser(); ProjectAssignment assignment01 = ProjectAssignmentObjectMother.createProjectAssignment(user, ProjectObjectMother.createProject(1)); assignment01.getProject().setName("b"); ProjectAssignment assignment02 = ProjectAssignmentObjectMother.createProjectAssignment(user, ProjectObjectMother.createProject(2)); assignment02.getProject().setName("a"); assignment02.setAssignmentId(2); assignment02.setRole("role"); WeekOverview weekOverview = new WeekOverview(Collections.<TimesheetEntry>emptyList(), null, Arrays.asList(assignment01, assignment02), RANGE, null, Lists.<Date>newArrayList()); // when Timesheet timesheet = new TimesheetFactory(config, weekOverview).createTimesheet(); // then SortedMap<Customer,List<TimesheetRow>> customerRows = timesheet.getCustomers(); Set<Customer> customers = customerRows.keySet(); assertEquals(1, customers.size()); List<TimesheetRow> rows = customerRows.get(customers.iterator().next()); assertEquals("a", rows.get(0).getProjectAssignment().getProject().getName()); assertEquals("b", rows.get(1).getProjectAssignment().getProject().getName()); } @Test public void should_mark_entry_as_locked_when_project_is_inactive() { // given User user = UserObjectMother.createUser(); ProjectAssignment assignment01 = ProjectAssignmentObjectMother.createProjectAssignment(user, ProjectObjectMother.createProject(1)); assignment01.getProject().setName("a"); ProjectAssignment assignment02 = ProjectAssignmentObjectMother.createProjectAssignment(user, ProjectObjectMother.createProject(2)); assignment02.getProject().setName("b"); assignment02.getProject().setActive(false); TimesheetEntry entry = new TimesheetEntry(new TimesheetEntryId(new Date(), assignment02), 5f); WeekOverview weekOverview = new WeekOverview(Collections.singletonList(entry), null, Collections.singletonList(assignment01), RANGE, null, Lists.<Date>newArrayList()); // when Timesheet timesheet = new TimesheetFactory(config, weekOverview).createTimesheet(); // then SortedMap<Customer,List<TimesheetRow>> customerRows = timesheet.getCustomers(); Set<Customer> customers = customerRows.keySet(); List<TimesheetRow> rows = customerRows.get(customers.iterator().next()); assertFalse(rows.get(0).getTimesheetCells()[0].isLocked()); assertTrue(rows.get(1).getTimesheetCells()[0].isLocked()); } }