@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); } }