@Test
 public void testUpdate_adjustsName() {
   givenAWorkerAndATaskRequiring(1000);
   givenTheWorkerIsWorkingOnTheTask();
   whenOneHourOfGameTimeElapses();
   assertNotEquals(
       "Name should have been updated", INITIAL_TASK_NAME, world.name.get(taskEntity.id));
 }
 @Test
 public void testUpdate_timeRemainingDecreasesWhenBeingWorkedOn() {
   final int initialSecondsRemaining = 1000;
   givenAWorkerAndATaskRequiring(initialSecondsRemaining);
   givenTheWorkerIsWorkingOnTheTask();
   whenOneHourOfGameTimeElapses();
   assertTrue(
       "Seconds remaining has decreased",
       world.secondsRemaining.get(taskEntity.id) < initialSecondsRemaining);
 }
 @Test
 public void testUpdate_noChangeInTimeRemainingWhenNotBeingWorkedOn() {
   final int initialSecondsRemaining = 1000;
   givenAWorkerAndATaskRequiring(initialSecondsRemaining);
   whenOneHourOfGameTimeElapses();
   assertEquals(
       "Time remaining should not have changed",
       initialSecondsRemaining,
       world.secondsRemaining.get(taskEntity.id));
 }
  @Test
  public void testUpdate_onCompleteIsCalledWhenComplete() {
    final int initialSecondsRemaining = ClockUtils.SECONDS_PER_HOUR;
    givenAWorkerAndATaskRequiring(initialSecondsRemaining);
    givenTheWorkerIsWorkingOnTheTask();

    Runnable onComplete = mock(Runnable.class);
    taskEntity.add(world.onComplete);
    world.onComplete.set(taskEntity.id, onComplete);

    whenOneHourOfGameTimeElapses();
    verify(onComplete, times(1)).run();
  }