@Override public void onCancelled(DatabaseError error) { listener.onCancelled(error); } },
@Override public void onDataChange(DataSnapshot snapshot) { // Removing the event listener will also prevent any further calls into // onDataChange removeEventListener(this); listener.onDataChange(snapshot); }
@Override public void fireEvent(final DataEvent eventData) { if (isZombied()) { return; } eventListener.onDataChange(eventData.getSnapshot()); }
@Override public void fireCancelEvent(final DatabaseError error) { eventListener.onCancelled(error); }
private <T> void callValueEventOnDataChange(T value) { when(mockDataSnapshot.exists()) .thenReturn(true); when(mockDataSnapshot.getValue((Class<T>) value.getClass())) .thenReturn(value); valueEventListener.getValue().onDataChange(mockDataSnapshot); }
private void callValueEventOnCancelled(DatabaseException mockedException) { when(mockDatabaseError.toException()) .thenReturn(mockedException); valueEventListener.getValue().onCancelled(mockDatabaseError); }
private <T> void callValueEventOnDataChange(GenericTypeIndicator<T> type, T value) { when(mockDataSnapshot.exists()) .thenReturn(true); when(mockDataSnapshot.getValue(type)) .thenReturn(value); valueEventListener.getValue().onDataChange(mockDataSnapshot); }
@Test public void testObserveSingleValue_Disconnected() { TestSubscriber<TestData> testSubscriber = new TestSubscriber<>(); RxFirebaseDatabase.observeSingleValueEvent(mockDatabase, TestData.class) .subscribeOn(Schedulers.immediate()) .subscribe(testSubscriber); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(mockDatabase).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onCancelled(DatabaseError.fromCode(DatabaseError.DISCONNECTED)); testSubscriber.assertError(RxFirebaseDataException.class); testSubscriber.assertNotCompleted(); testSubscriber.unsubscribe(); }
@Test public void testMultipleSingleValueEvent() { TestSubscriber<DataSnapshot> testObserver = RxFirebaseDatabase .observeMultipleSingleValueEvent(databaseReference, databaseReferenceTwo) .test(); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(databaseReference).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onDataChange(dataSnapshot); verify(databaseReferenceTwo).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onDataChange(dataSnapshotTwo); testObserver.assertNoErrors() .assertValueCount(2) .assertComplete() .dispose(); }
@Test public void testObserveSingleValueDisconnected() { TestObserver<ChildData> testObserver = RxFirebaseDatabase .observeSingleValueEvent(databaseReference, ChildData.class) .test(); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(databaseReference).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onCancelled(DatabaseError.fromCode(DatabaseError.DISCONNECTED)); testObserver.assertError(RxFirebaseDataException.class) .assertNotComplete() .dispose(); }
@Test public void testObserveSingleNoData() { DataSnapshot mockFirebaseDataSnapshotNoData = mock(DataSnapshot.class); when(mockFirebaseDataSnapshotNoData.exists()).thenReturn(false); TestObserver<ChildData> testObserver = RxFirebaseDatabase .observeSingleValueEvent(databaseReference, ChildData.class) .test(); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(databaseReference).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onDataChange(mockFirebaseDataSnapshotNoData); testObserver.assertValueCount(0) .assertComplete() .dispose(); }
@Test public void testObserveSingleValueEventFailed() { TestObserver<ChildData> testObserver = RxFirebaseDatabase .observeSingleValueEvent(databaseReference, ChildData.class) .test(); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(databaseReference).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onCancelled(DatabaseError.fromCode(DatabaseError.OPERATION_FAILED)); testObserver.assertError(RxFirebaseDataException.class) .assertNotComplete() .dispose(); }
@Test public void testObserveSingleWrongType() { TestSubscriber<WrongType> testSubscriber = new TestSubscriber<>(); RxFirebaseDatabase.observeSingleValueEvent(mockDatabase, WrongType.class) .subscribeOn(Schedulers.immediate()) .subscribe(testSubscriber); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(mockDatabase).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onDataChange(mockFirebaseDataSnapshot); testSubscriber.assertError(RuntimeException.class); testSubscriber.assertNotCompleted(); testSubscriber.unsubscribe(); }
@Test public void testObserveSingleValueEvent_Failed() { TestSubscriber<List<TestData>> testSubscriber = new TestSubscriber<>(); RxFirebaseDatabase.observeSingleValueEvent(mockDatabase, TestData.class) .subscribeOn(Schedulers.immediate()) .toList() .subscribe(testSubscriber); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(mockDatabase).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onCancelled(DatabaseError.fromCode(DatabaseError.OPERATION_FAILED)); testSubscriber.assertError(RxFirebaseDataException.class); testSubscriber.assertNotCompleted(); testSubscriber.unsubscribe(); }
@Test public void testObserveSingleWrongType() { TestObserver<WrongType> testObserver = RxFirebaseDatabase .observeSingleValueEvent(databaseReference, WrongType.class) .test(); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(databaseReference).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onDataChange(dataSnapshot); testObserver.assertError(RuntimeException.class) .assertNotComplete() .dispose(); }
@Test public void testObserveSingleValue() { TestSubscriber<TestData> testSubscriber = new TestSubscriber<>(); RxFirebaseDatabase.observeSingleValueEvent(mockDatabase, TestData.class) .subscribeOn(Schedulers.immediate()) .subscribe(testSubscriber); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(mockDatabase).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onDataChange(mockFirebaseDataSnapshot); testSubscriber.assertNoErrors(); testSubscriber.assertValueCount(1); testSubscriber.assertReceivedOnNext(Collections.singletonList(testData)); testSubscriber.assertCompleted(); testSubscriber.unsubscribe(); }
@Test public void testObserveSingleNoData() { DataSnapshot mockFirebaseDataSnapshotNoData = mock(DataSnapshot.class); when(mockFirebaseDataSnapshotNoData.exists()).thenReturn(false); TestSubscriber<TestData> testSubscriber = new TestSubscriber<>(); RxFirebaseDatabase.observeSingleValueEvent(mockDatabase, TestData.class) .subscribeOn(Schedulers.immediate()) .subscribe(testSubscriber); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(mockDatabase).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onDataChange(mockFirebaseDataSnapshotNoData); testSubscriber.assertNoErrors(); testSubscriber.assertValueCount(1); testSubscriber.assertCompleted(); testSubscriber.unsubscribe(); }
@Test public void testObserveValueEvent() { TestSubscriber<TestData> testSubscriber = new TestSubscriber<>(); RxFirebaseDatabase.observeValueEvent(mockDatabase, TestData.class) .subscribeOn(Schedulers.immediate()) .subscribe(testSubscriber); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(mockDatabase).addValueEventListener(argument.capture()); argument.getValue().onDataChange(mockFirebaseDataSnapshot); testSubscriber.assertNoErrors(); testSubscriber.assertValueCount(1); testSubscriber.assertReceivedOnNext(Collections.singletonList(testData)); testSubscriber.assertNotCompleted(); testSubscriber.unsubscribe(); }
@Test public void testObserveValueEventList() { TestObserver<ChildData> testObserver = RxFirebaseDatabase .observeSingleValueEvent(databaseReference, ChildData.class) .test(); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(databaseReference).addListenerForSingleValueEvent(argument.capture()); argument.getValue().onDataChange(dataSnapshot); testObserver.assertNoErrors() .assertValueCount(1) .assertComplete() .dispose(); }
@Test public void testObserveListWithDataSnapshotCustomMapper() throws Exception { //noinspection unchecked Function<DataSnapshot, ChildData> mapper = (Function<DataSnapshot, ChildData>) mock(Function.class); doReturn(childData).when(mapper).apply(eq(dataSnapshot)); TestSubscriber<List<ChildData>> testObserver = RxFirebaseDatabase .observeValueEvent(query, DataSnapshotMapper.listOf(ChildData.class, mapper)) .test(); ArgumentCaptor<ValueEventListener> argument = ArgumentCaptor.forClass(ValueEventListener.class); verify(query).addValueEventListener(argument.capture()); argument.getValue().onDataChange(dataSnapshot); verify(mapper).apply(dataSnapshot); testObserver.assertNoErrors() .assertValueCount(1) .assertValueSet(Collections.singletonList(childDataList)) .assertNotComplete() .dispose(); }