Search in sources :

Example 21 with Changes

use of com.pushtorefresh.storio.contentresolver.Changes in project storio by pushtorefresh.

the class PutOperationTest method insertObjectAsCompletable.

@Test
public void insertObjectAsCompletable() {
    TestSubscriber<Changes> changesTestSubscriber = new TestSubscriber<Changes>();
    storIOContentResolver.observeChangesOfUri(TestItem.CONTENT_URI).take(1).subscribe(changesTestSubscriber);
    TestItem testItem = TestItem.create(null, "value");
    storIOContentResolver.put().object(testItem).prepare().asRxCompletable().toObservable().toBlocking().subscribe();
    Cursor cursor = contentResolver.query(TestItem.CONTENT_URI, null, null, null, null);
    Assertions.assertThat(cursor).hasCount(1);
    cursor.moveToFirst();
    assertThat(testItem.equalsWithoutId(TestItem.fromCursor(cursor))).isTrue();
    cursor.close();
    changesTestSubscriber.awaitTerminalEvent(60, SECONDS);
    changesTestSubscriber.assertNoErrors();
    changesTestSubscriber.assertValue(Changes.newInstance(TestItem.CONTENT_URI));
}
Also used : Changes(com.pushtorefresh.storio.contentresolver.Changes) TestSubscriber(rx.observers.TestSubscriber) Cursor(android.database.Cursor) Test(org.junit.Test)

Example 22 with Changes

use of com.pushtorefresh.storio.contentresolver.Changes in project storio by pushtorefresh.

the class RxChangesObserverTest method shouldRegisterOnlyOneContentObserverAfterSubscribingToObservableOnSdkVersionGreaterThan15.

@Test
public void shouldRegisterOnlyOneContentObserverAfterSubscribingToObservableOnSdkVersionGreaterThan15() {
    for (int sdkVersion = 16; sdkVersion < MAX_SDK_VERSION; sdkVersion++) {
        ContentResolver contentResolver = mock(ContentResolver.class);
        final AtomicReference<ContentObserver> contentObserver = new AtomicReference<ContentObserver>();
        doAnswer(new Answer() {

            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                // Save reference to ContentObserver only once to assert that it was created once
                if (contentObserver.get() == null) {
                    contentObserver.set((ContentObserver) invocation.getArguments()[2]);
                } else if (contentObserver.get() != invocation.getArguments()[2]) {
                    throw new AssertionError("More than one ContentObserver was created");
                }
                return null;
            }
        }).when(contentResolver).registerContentObserver(any(Uri.class), eq(true), any(ContentObserver.class));
        Set<Uri> uris = new HashSet<Uri>(3);
        uris.add(mock(Uri.class));
        uris.add(mock(Uri.class));
        uris.add(mock(Uri.class));
        Observable<Changes> observable = RxChangesObserver.observeChanges(contentResolver, uris, mock(Handler.class), sdkVersion);
        // Should not register ContentObserver before subscribing to Observable
        verify(contentResolver, times(0)).registerContentObserver(any(Uri.class), anyBoolean(), any(ContentObserver.class));
        Subscription subscription = observable.subscribe();
        for (Uri uri : uris) {
            // Assert that same ContentObserver was registered for all uris
            verify(contentResolver).registerContentObserver(same(uri), eq(true), same(contentObserver.get()));
        }
        subscription.unsubscribe();
    }
}
Also used : Changes(com.pushtorefresh.storio.contentresolver.Changes) Handler(android.os.Handler) AtomicReference(java.util.concurrent.atomic.AtomicReference) Uri(android.net.Uri) ContentResolver(android.content.ContentResolver) Answer(org.mockito.stubbing.Answer) Mockito.doAnswer(org.mockito.Mockito.doAnswer) InvocationOnMock(org.mockito.invocation.InvocationOnMock) Subscription(rx.Subscription) ContentObserver(android.database.ContentObserver) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 23 with Changes

use of com.pushtorefresh.storio.contentresolver.Changes in project storio by pushtorefresh.

the class DeleteOperationTest method deleteByQueryAsCompletable.

@Test
public void deleteByQueryAsCompletable() {
    TestSubscriber<Changes> changesTestSubscriber = new TestSubscriber<Changes>();
    storIOContentResolver.observeChangesOfUri(TestItem.CONTENT_URI).take(2).subscribe(changesTestSubscriber);
    TestItem testItemToInsert = TestItem.create(null, "value");
    contentResolver.insert(TestItem.CONTENT_URI, testItemToInsert.toContentValues());
    Cursor firstDbState = contentResolver.query(TestItem.CONTENT_URI, null, null, null, null);
    Assertions.assertThat(firstDbState).hasCount(1);
    storIOContentResolver.delete().byQuery(DeleteQuery.builder().uri(TestItem.CONTENT_URI).build()).prepare().asRxCompletable().toObservable().toBlocking().subscribe();
    Cursor secondDbState = contentResolver.query(TestItem.CONTENT_URI, null, null, null, null);
    Assertions.assertThat(secondDbState).hasCount(0);
    changesTestSubscriber.awaitTerminalEvent(60, SECONDS);
    changesTestSubscriber.assertNoErrors();
    changesTestSubscriber.assertValues(Changes.newInstance(TestItem.CONTENT_URI), Changes.newInstance(TestItem.CONTENT_URI));
}
Also used : Changes(com.pushtorefresh.storio.contentresolver.Changes) TestSubscriber(rx.observers.TestSubscriber) Cursor(android.database.Cursor) Test(org.junit.Test)

Example 24 with Changes

use of com.pushtorefresh.storio.contentresolver.Changes in project storio by pushtorefresh.

the class DeleteOperationTest method deleteByQueryAsObservable.

@Test
public void deleteByQueryAsObservable() {
    TestSubscriber<Changes> changesTestSubscriber = new TestSubscriber<Changes>();
    storIOContentResolver.observeChangesOfUri(TestItem.CONTENT_URI).take(2).subscribe(changesTestSubscriber);
    TestItem testItemToInsert = TestItem.create(null, "value");
    contentResolver.insert(TestItem.CONTENT_URI, testItemToInsert.toContentValues());
    Cursor firstDbState = contentResolver.query(TestItem.CONTENT_URI, null, null, null, null);
    Assertions.assertThat(firstDbState).hasCount(1);
    DeleteResult deleteResult = storIOContentResolver.delete().byQuery(DeleteQuery.builder().uri(TestItem.CONTENT_URI).build()).prepare().asRxObservable().toBlocking().first();
    assertThat(deleteResult.numberOfRowsDeleted()).isEqualTo(1);
    Cursor secondDbState = contentResolver.query(TestItem.CONTENT_URI, null, null, null, null);
    Assertions.assertThat(secondDbState).hasCount(0);
    changesTestSubscriber.awaitTerminalEvent(60, SECONDS);
    changesTestSubscriber.assertNoErrors();
    changesTestSubscriber.assertValues(Changes.newInstance(TestItem.CONTENT_URI), Changes.newInstance(TestItem.CONTENT_URI));
}
Also used : Changes(com.pushtorefresh.storio.contentresolver.Changes) TestSubscriber(rx.observers.TestSubscriber) Cursor(android.database.Cursor) DeleteResult(com.pushtorefresh.storio.contentresolver.operations.delete.DeleteResult) Test(org.junit.Test)

Example 25 with Changes

use of com.pushtorefresh.storio.contentresolver.Changes in project storio by pushtorefresh.

the class DeleteOperationTest method deleteObjectsAsObservable.

@Test
public void deleteObjectsAsObservable() {
    TestSubscriber<Changes> changesTestSubscriber = new TestSubscriber<Changes>();
    storIOContentResolver.observeChangesOfUri(TestItem.CONTENT_URI).take(2).subscribe(changesTestSubscriber);
    TestItem testItemToInsert = TestItem.create(null, "value");
    contentResolver.insert(TestItem.CONTENT_URI, testItemToInsert.toContentValues());
    Cursor firstDbState = contentResolver.query(TestItem.CONTENT_URI, null, null, null, null);
    Assertions.assertThat(firstDbState).hasCount(1);
    //noinspection ConstantConditions
    assertThat(firstDbState.moveToFirst()).isTrue();
    TestItem testItem = TestItem.fromCursor(firstDbState);
    DeleteResults<TestItem> deleteResults = storIOContentResolver.delete().objects(singletonList(testItem)).prepare().asRxObservable().toBlocking().first();
    assertThat(deleteResults.wasDeleted(testItem)).isTrue();
    Cursor secondDbState = contentResolver.query(TestItem.CONTENT_URI, null, null, null, null);
    Assertions.assertThat(secondDbState).hasCount(0);
    changesTestSubscriber.awaitTerminalEvent(60, SECONDS);
    changesTestSubscriber.assertNoErrors();
    changesTestSubscriber.assertValues(Changes.newInstance(TestItem.CONTENT_URI), Changes.newInstance(TestItem.CONTENT_URI));
}
Also used : Changes(com.pushtorefresh.storio.contentresolver.Changes) TestSubscriber(rx.observers.TestSubscriber) Cursor(android.database.Cursor) Test(org.junit.Test)

Aggregations

Changes (com.pushtorefresh.storio.contentresolver.Changes)37 Test (org.junit.Test)37 TestSubscriber (rx.observers.TestSubscriber)34 Cursor (android.database.Cursor)32 Uri (android.net.Uri)15 PutResult (com.pushtorefresh.storio.contentresolver.operations.put.PutResult)15 DeleteResult (com.pushtorefresh.storio.contentresolver.operations.delete.DeleteResult)6 ContentResolver (android.content.ContentResolver)5 ContentObserver (android.database.ContentObserver)5 Mockito.doAnswer (org.mockito.Mockito.doAnswer)5 InvocationOnMock (org.mockito.invocation.InvocationOnMock)5 Answer (org.mockito.stubbing.Answer)5 ContentValues (android.content.ContentValues)4 HashSet (java.util.HashSet)4 Handler (android.os.Handler)3 AtomicReference (java.util.concurrent.atomic.AtomicReference)3 Subscription (rx.Subscription)3 TargetApi (android.annotation.TargetApi)2 HashMap (java.util.HashMap)2 DeleteResults (com.pushtorefresh.storio.contentresolver.operations.delete.DeleteResults)1