Skip to content
This repository has been archived by the owner on Nov 24, 2022. It is now read-only.

Commit

Permalink
easymock -> mockito
Browse files Browse the repository at this point in the history
  • Loading branch information
tedeling committed Oct 3, 2014
1 parent ddf3ae4 commit d4b8605
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 86 deletions.
Expand Up @@ -70,7 +70,6 @@ public void deleteAllTimesheetDataForUser(User user) {

@Transactional
@Override

public List<ProjectAssignmentStatus> persistTimesheetWeek(Collection<TimesheetEntry> timesheetEntries,
TimesheetComment comment,
DateRange weekRange) {
Expand Down Expand Up @@ -173,8 +172,8 @@ private void deleteEntry(TimesheetEntry existingEntry) {
}
}

private void persistEntry(boolean onlyLessThanExisting, TimesheetEntry newEntry, TimesheetEntry existingEntry) throws OverBudgetException {
if (onlyLessThanExisting &&
private void persistEntry(boolean bookOnlyLessHoursThanExistingHours, TimesheetEntry newEntry, TimesheetEntry existingEntry) throws OverBudgetException {
if (bookOnlyLessHoursThanExistingHours &&
(existingEntry == null ||
(newEntry.getHours().compareTo(existingEntry.getHours()) > 0))) {
throw new OverBudgetException();
Expand Down
Expand Up @@ -29,35 +29,46 @@
import net.rrm.ehour.util.EhourConstants;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.context.ApplicationContext;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import static org.easymock.EasyMock.*;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;

/**
* @author thies
*/
@RunWith(MockitoJUnitRunner.class)
public class TimesheetPersistanceTest {
private TimesheetPersistance persister;

@Mock
private TimesheetDao timesheetDAO;

@Mock
private ProjectManagerNotifierService projectManagerNotifierService;

@Mock
private ProjectAssignmentStatusService statusService;

private ProjectAssignment assignment;
private List<TimesheetEntry> newEntries;
private List<TimesheetEntry> existingEntries;

@Mock
private TimesheetCommentDao commentDao;

@Mock
private ApplicationContext context;

@Before
public void setUp() {
timesheetDAO = createMock(TimesheetDao.class);
statusService = createMock(ProjectAssignmentStatusService.class);
projectManagerNotifierService = createMock(ProjectManagerNotifierService.class);
ApplicationContext context = createMock(ApplicationContext.class);
TimesheetCommentDao commentDao = createMock(TimesheetCommentDao.class);

persister = new TimesheetPersistance(timesheetDAO, commentDao, statusService, projectManagerNotifierService, context);

initData();
Expand Down Expand Up @@ -119,58 +130,63 @@ private void initData() {
}

@Test
public void shouldPersistValidatedTimesheet() throws OverBudgetException {
public void should_persist_new_timesheet() throws OverBudgetException {
DateRange dateRange = new DateRange();

timesheetDAO.delete(isA(TimesheetEntry.class));
when(statusService.getAssignmentStatus(assignment)).thenReturn(new ProjectAssignmentStatus());

expect(timesheetDAO.merge(isA(TimesheetEntry.class))).andReturn(null);
persister.validateAndPersist(assignment, newEntries, dateRange);

expect(timesheetDAO.getTimesheetEntriesInRange(assignment, dateRange)).andReturn(existingEntries);
verify(statusService, times(2)).getAssignmentStatus(assignment);
verify(timesheetDAO).persist(any(TimesheetEntry.class));
verify(timesheetDAO).getTimesheetEntriesInRange(assignment, dateRange);
}

expect(statusService.getAssignmentStatus(assignment)).andReturn(new ProjectAssignmentStatus()).times(2);
@Test
public void should_update_existing_timesheet() throws OverBudgetException {
DateRange dateRange = new DateRange();

replay(statusService);
replay(timesheetDAO);
when(timesheetDAO.getTimesheetEntriesInRange(any(ProjectAssignment.class), eq(dateRange))).thenReturn(existingEntries);
when(statusService.getAssignmentStatus(assignment)).thenReturn(new ProjectAssignmentStatus());

persister.validateAndPersist(assignment, newEntries, dateRange);

verify(timesheetDAO);
verify(statusService);
verify(statusService, times(2)).getAssignmentStatus(assignment);
verify(timesheetDAO).delete(any(TimesheetEntry.class));
verify(timesheetDAO).merge(any(TimesheetEntry.class));
}

@Test
public void testPersistInvalidTimesheet() {
timesheetDAO.delete(isA(TimesheetEntry.class));

expect(timesheetDAO.merge(isA(TimesheetEntry.class))).andReturn(null);

expect(timesheetDAO.getTimesheetEntriesInRange(isA(ProjectAssignment.class), isA(DateRange.class))).andReturn(existingEntries);
@Test
public void should_not_persist_an_timesheet_that_went_overbudget() {
DateRange dateRange = new DateRange();

expect(statusService.getAssignmentStatus(assignment)).andReturn(new ProjectAssignmentStatus());
when(timesheetDAO.getTimesheetEntriesInRange(any(ProjectAssignment.class), eq(dateRange))).thenReturn(existingEntries);

ProjectAssignmentStatus status = new ProjectAssignmentStatus();
status.addStatus(Status.OVER_OVERRUN);
status.setValid(false);
// before persist
ProjectAssignmentStatus validStatus = new ProjectAssignmentStatus();
when(statusService.getAssignmentStatus(assignment)).thenReturn(validStatus);

expect(statusService.getAssignmentStatus(assignment)).andReturn(status);
// after persist
ProjectAssignmentStatus invalidStatus = new ProjectAssignmentStatus();
invalidStatus.addStatus(Status.OVER_OVERRUN);
invalidStatus.setValid(false);

replay(statusService);
replay(timesheetDAO);
when(statusService.getAssignmentStatus(assignment)).thenReturn(validStatus, invalidStatus);

try {
persister.validateAndPersist(assignment, newEntries, new DateRange());
persister.validateAndPersist(assignment, newEntries, dateRange);
fail();
} catch (OverBudgetException e) {
verify(timesheetDAO);
verify(statusService);
verify(timesheetDAO).merge(any(TimesheetEntry.class));
verify(timesheetDAO).delete(any(TimesheetEntry.class));
}
}

@SuppressWarnings("deprecation")
@Test
public void testPersistOverrunDecreasingTimesheet() throws OverBudgetException {
Date dateC = new Date(2008 - 1900, 4 - 1, 3);
public void should_allow_to_decrease_existing_hours_even_when_project_is_over_budget() throws OverBudgetException {
Date dateC = new Date(2008 - 1900, Calendar.APRIL, 3);

newEntries.clear();
existingEntries.clear();
Expand All @@ -195,67 +211,48 @@ public void testPersistOverrunDecreasingTimesheet() throws OverBudgetException {
existingEntries.add(entryDel);
}

expect(timesheetDAO.merge(isA(TimesheetEntry.class))).andReturn(null);

expect(timesheetDAO.getTimesheetEntriesInRange(isA(ProjectAssignment.class), isA(DateRange.class))).andReturn(existingEntries);
when(timesheetDAO.getTimesheetEntriesInRange(any(ProjectAssignment.class), any(DateRange.class))).thenReturn(existingEntries);

ProjectAssignmentStatus beforeStatus = new ProjectAssignmentStatus();
beforeStatus.addStatus(Status.OVER_OVERRUN);
beforeStatus.setValid(false);

expect(statusService.getAssignmentStatus(assignment)).andReturn(beforeStatus);

ProjectAssignmentStatus status = new ProjectAssignmentStatus();
status.addStatus(Status.OVER_OVERRUN);
status.setValid(false);

expect(statusService.getAssignmentStatus(assignment)).andReturn(status);
ProjectAssignmentStatus afterStatus = new ProjectAssignmentStatus();
afterStatus.addStatus(Status.OVER_OVERRUN);
afterStatus.setValid(false);

replay(statusService);
replay(timesheetDAO);
when(statusService.getAssignmentStatus(assignment)).thenReturn(beforeStatus, afterStatus);

persister.validateAndPersist(assignment, newEntries, new DateRange());
verify(timesheetDAO);
verify(statusService);

verify(timesheetDAO).merge(any(TimesheetEntry.class));
}

@Test
public void testPersistOverrunInvalidTimesheet() {
expect(timesheetDAO.getTimesheetEntriesInRange(isA(ProjectAssignment.class), isA(DateRange.class))).andReturn(existingEntries);
public void should_not_allow_to_book_more_hours_when_the_project_is_overbudget() {
when(timesheetDAO.getTimesheetEntriesInRange(any(ProjectAssignment.class), any(DateRange.class))).thenReturn(existingEntries);

ProjectAssignmentStatus beforeStatus = new ProjectAssignmentStatus();
beforeStatus.setValid(false);

expect(statusService.getAssignmentStatus(assignment)).andReturn(beforeStatus);

ProjectAssignmentStatus status = new ProjectAssignmentStatus();
status.addStatus(Status.OVER_OVERRUN);
status.setValid(false);

expect(statusService.getAssignmentStatus(assignment)).andReturn(status);
ProjectAssignmentStatus afterStatus = new ProjectAssignmentStatus();
afterStatus.addStatus(Status.OVER_OVERRUN);
afterStatus.setValid(false);

replay(statusService);
replay(timesheetDAO);
when(statusService.getAssignmentStatus(assignment)).thenReturn(beforeStatus, afterStatus);

try {
persister.validateAndPersist(assignment, newEntries, new DateRange());
fail();
} catch (OverBudgetException ignored) {

}
verify(timesheetDAO);
verify(statusService);
}

@Test
public void testMailStatusChange() throws OverBudgetException {
timesheetDAO.delete(isA(TimesheetEntry.class));

expect(timesheetDAO.getLatestTimesheetEntryForAssignment(assignment.getAssignmentId())).andReturn(newEntries.get(0));

expect(timesheetDAO.merge(isA(TimesheetEntry.class))).andReturn(null);

expect(timesheetDAO.getTimesheetEntriesInRange(isA(ProjectAssignment.class), isA(DateRange.class))).andReturn(existingEntries);
public void should_mail_pm_when_status_of_project_changes() throws OverBudgetException {
when(timesheetDAO.getLatestTimesheetEntryForAssignment(assignment.getAssignmentId())).thenReturn(newEntries.get(0));
when(timesheetDAO.getTimesheetEntriesInRange(any(ProjectAssignment.class), any(DateRange.class))).thenReturn(existingEntries);

ProjectAssignmentStatus beforeStatus = new ProjectAssignmentStatus();
beforeStatus.addStatus(Status.IN_ALLOTTED);
Expand All @@ -266,21 +263,28 @@ public void testMailStatusChange() throws OverBudgetException {
afterStatus.setValid(true);
afterStatus.setAggregate(new AssignmentAggregateReportElement());

expect(statusService.getAssignmentStatus(assignment)).andReturn(beforeStatus);
when(statusService.getAssignmentStatus(assignment)).thenReturn(beforeStatus);

expect(statusService.getAssignmentStatus(assignment)).andReturn(afterStatus);
when(statusService.getAssignmentStatus(assignment)).thenReturn(beforeStatus, afterStatus);

projectManagerNotifierService.mailPMFlexAllottedReached(isA(AssignmentAggregateReportElement.class), isA(Date.class), isA(User.class));
persister.validateAndPersist(assignment, newEntries, new DateRange());

replay(statusService);
replay(timesheetDAO);
replay(projectManagerNotifierService);
verify(timesheetDAO).delete(any(TimesheetEntry.class));
verify(timesheetDAO).merge(any(TimesheetEntry.class));
verify(projectManagerNotifierService).mailPMFlexAllottedReached(any(AssignmentAggregateReportElement.class), any(Date.class), eq(assignment.getProject().getProjectManager()));
}

persister.validateAndPersist(assignment, newEntries, new DateRange());
@Test
public void should_persist_individual_timesheet_entries_for_a_week() {
TimesheetCommentId commentId = new TimesheetCommentId(1, new Date());
TimesheetComment comment = new TimesheetComment(commentId, "comment");

verify(timesheetDAO);
verify(statusService);
verify(projectManagerNotifierService);
when(context.getBean(IPersistTimesheet.class)).thenReturn(persister); // through Spring for new TX per entr=y

when(statusService.getAssignmentStatus(assignment)).thenReturn(new ProjectAssignmentStatus());

persister.persistTimesheetWeek(newEntries, comment, new DateRange());

verify(commentDao).persist(comment);
}
}

0 comments on commit d4b8605

Please sign in to comment.