@Override public void delete(JobRequest request) { manager().cancel(request.getJobId()); } });
@Test(expected = SQLException.class) public void testInsertFails() { SQLiteDatabase database = mock(SQLiteDatabase.class); when(database.insert(anyString(), nullable(String.class), any(ContentValues.class))).thenReturn(-1L); when(database.insertWithOnConflict(anyString(), nullable(String.class), any(ContentValues.class), anyInt())).thenThrow(SQLException.class); manager().getJobStorage().injectDatabase(database); DummyJobs.createOneOff().schedule(); }
@Test public void testUpdateDoesNotCrash() { JobRequest request = DummyJobs.createOneOff(); int jobId = request.schedule(); assertThat(request.getScheduledAt()).isGreaterThan(0L); assertThat(request.getFailureCount()).isEqualTo(0); assertThat(request.getLastRun()).isEqualTo(0); SQLiteDatabase database = mock(SQLiteDatabase.class); when(database.update(anyString(), any(ContentValues.class), nullable(String.class), any(String[].class))).thenThrow(SQLException.class); manager().getJobStorage().injectDatabase(database); request.updateStats(true, true); // updates the database value, but fails in this case assertThat(request.getFailureCount()).isEqualTo(1); // in memory value was updated, keep that assertThat(request.getLastRun()).isGreaterThan(0); // kinda hacky, this removes the request from the cache, but doesn't delete it in the database, // because we're using the mock at the moment manager().getJobStorage().remove(request); manager().getJobStorage().injectDatabase(null); // reset request = manager().getJobRequest(jobId); assertThat(request.getFailureCount()).isEqualTo(0); assertThat(request.getLastRun()).isEqualTo(0); }