@Test
 public void testFetchNextPendingCall() throws Exception {
   missedCallsDAO.fetchNextPendingCall();
   verify(missedCalls, times(1))
       .findAndModify(
           any(DBObject.class),
           isNull(DBObject.class),
           any(DBObject.class),
           eq(false),
           any(DBObject.class),
           eq(true),
           eq(false));
 }
  @Test
  public void integrationTestFetchNextPendingCall() throws Exception {

    missedCallsDAO = new MissedCallsDAO(Resources.getDatabaseActivity());

    DBObject testCallFirst = new BasicDBObject("who", 9581300084L);
    DBObject testCallSecond = new BasicDBObject("who", 9581300084L);

    try {
      assertTrue(missedCallsDAO.insertCall(testCallFirst));
      Thread.sleep(1000);
      assertTrue(missedCallsDAO.insertCall(testCallSecond));

      Date tsFirst = (Date) testCallFirst.get("arrival");
      Date tsSecond = (Date) testCallSecond.get("arrival");
      assertTrue(tsFirst.before(tsSecond));

      DBObject fetchedCallFirst = missedCallsDAO.fetchNextPendingCall();
      assertNotNull(fetchedCallFirst);
      assertTrue(fetchedCallFirst.containsField("who"));
      assertEquals("Processing", fetchedCallFirst.get("state"));
      assertEquals(testCallSecond.get("_id"), fetchedCallFirst.get("_id"));

      DBObject fetchedCallSecond = missedCallsDAO.fetchNextPendingCall();
      assertNotNull(fetchedCallSecond);
      assertTrue(fetchedCallSecond.containsField("who"));
      assertEquals("Processing", fetchedCallSecond.get("state"));
      assertEquals(testCallFirst.get("_id"), fetchedCallSecond.get("_id"));

      tsFirst = (Date) fetchedCallFirst.get("arrival");
      tsSecond = (Date) fetchedCallSecond.get("arrival");
      assertTrue(tsFirst.after(tsSecond));
    } finally {
      deleteCall(testCallFirst);
      deleteCall(testCallSecond);
    }
  }