From 87d64c53fa0416c0b15b7219c68de2a77669806d Mon Sep 17 00:00:00 2001 From: Brian Plummer Date: Wed, 18 Jul 2018 22:55:48 +0200 Subject: [PATCH 1/2] second part of store tests kotlin conversion --- .../external/store3/GetRefreshingTest.java | 98 ------------------- .../external/store3/GetRefreshingTest.kt | 90 +++++++++++++++++ .../android/external/store3/KeyParserTest.kt | 3 +- .../external/store3/ParsingFetcherTest.java | 71 -------------- .../external/store3/ParsingFetcherTest.kt | 68 +++++++++++++ .../external/store3/StreamOneKeyTest.java | 85 ---------------- .../external/store3/StreamOneKeyTest.kt | 82 ++++++++++++++++ .../android/external/store3/StreamTest.java | 70 ------------- .../android/external/store3/StreamTest.kt | 67 +++++++++++++ 9 files changed, 308 insertions(+), 326 deletions(-) delete mode 100644 store/src/test/java/com/nytimes/android/external/store3/GetRefreshingTest.java create mode 100644 store/src/test/java/com/nytimes/android/external/store3/GetRefreshingTest.kt delete mode 100644 store/src/test/java/com/nytimes/android/external/store3/ParsingFetcherTest.java create mode 100644 store/src/test/java/com/nytimes/android/external/store3/ParsingFetcherTest.kt delete mode 100644 store/src/test/java/com/nytimes/android/external/store3/StreamOneKeyTest.java create mode 100644 store/src/test/java/com/nytimes/android/external/store3/StreamOneKeyTest.kt delete mode 100644 store/src/test/java/com/nytimes/android/external/store3/StreamTest.java create mode 100644 store/src/test/java/com/nytimes/android/external/store3/StreamTest.kt diff --git a/store/src/test/java/com/nytimes/android/external/store3/GetRefreshingTest.java b/store/src/test/java/com/nytimes/android/external/store3/GetRefreshingTest.java deleted file mode 100644 index 94d788f5..00000000 --- a/store/src/test/java/com/nytimes/android/external/store3/GetRefreshingTest.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.nytimes.android.external.store3; - -import com.nytimes.android.external.store3.base.impl.BarCode; -import com.nytimes.android.external.store3.base.impl.Store; -import com.nytimes.android.external.store3.base.impl.StoreBuilder; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; - -import java.util.concurrent.atomic.AtomicInteger; - -import io.reactivex.Maybe; -import io.reactivex.Single; -import io.reactivex.observers.TestObserver; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class GetRefreshingTest { - @Mock - ClearingPersister persister; - AtomicInteger networkCalls; - private Store store; - - @Before - public void setUp() { - networkCalls = new AtomicInteger(0); - store = StoreBuilder.barcode() - .fetcher(barCode -> Single.fromCallable(() -> networkCalls.incrementAndGet())) - .persister(persister) - .open(); - } - - @Test - public void testRefreshOnClear() { - BarCode barcode = new BarCode("type", "key"); - when(persister.read(barcode)) - .thenReturn(Maybe.empty()) //read from disk - .thenReturn(Maybe.just(1)) //read from disk after fetching from network - .thenReturn(Maybe.empty()) //read from disk after clearing disk cache - .thenReturn(Maybe.just(1)); //read from disk after making additional network call - when(persister.write(barcode, 1)).thenReturn(Single.just(true)); - when(persister.write(barcode, 2)).thenReturn(Single.just(true)); - - - TestObserver refreshingObservable = store.getRefreshing(barcode).test(); - refreshingObservable.assertValueCount(1); - assertThat(networkCalls.intValue()).isEqualTo(1); - //clearing the store should produce another network call - store.clear(barcode); - refreshingObservable.assertValueCount(2); - assertThat(networkCalls.intValue()).isEqualTo(2); - - store.get(barcode).test().awaitTerminalEvent(); - refreshingObservable.assertValueCount(2); - assertThat(networkCalls.intValue()).isEqualTo(2); - } - - @Test - public void testRefreshOnClearAll() { - BarCode barcode1 = new BarCode("type", "key"); - BarCode barcode2 = new BarCode("type", "key2"); - - when(persister.read(barcode1)) - .thenReturn(Maybe.empty()) //read from disk - .thenReturn(Maybe.just(1)) //read from disk after fetching from network - .thenReturn(Maybe.empty()) //read from disk after clearing disk cache - .thenReturn(Maybe.just(1)); //read from disk after making additional network call - when(persister.write(barcode1, 1)).thenReturn(Single.just(true)); - when(persister.write(barcode1, 2)).thenReturn(Single.just(true)); - - when(persister.read(barcode2)) - .thenReturn(Maybe.empty()) //read from disk - .thenReturn(Maybe.just(1)) //read from disk after fetching from network - .thenReturn(Maybe.empty()) //read from disk after clearing disk cache - .thenReturn(Maybe.just(1)); //read from disk after making additional network call - - when(persister.write(barcode2, 1)).thenReturn(Single.just(true)); - when(persister.write(barcode2, 2)).thenReturn(Single.just(true)); - - TestObserver testObservable1 = store.getRefreshing(barcode1).test(); - TestObserver testObservable2 = store.getRefreshing(barcode2).test(); - testObservable1.assertValueCount(1); - testObservable2.assertValueCount(1); - - assertThat(networkCalls.intValue()).isEqualTo(2); - - store.clear(); - assertThat(networkCalls.intValue()).isEqualTo(4); - - - } - -} diff --git a/store/src/test/java/com/nytimes/android/external/store3/GetRefreshingTest.kt b/store/src/test/java/com/nytimes/android/external/store3/GetRefreshingTest.kt new file mode 100644 index 00000000..7a569694 --- /dev/null +++ b/store/src/test/java/com/nytimes/android/external/store3/GetRefreshingTest.kt @@ -0,0 +1,90 @@ +package com.nytimes.android.external.store3 + +import com.nytimes.android.external.store3.base.impl.BarCode +import com.nytimes.android.external.store3.base.impl.Store +import com.nytimes.android.external.store3.base.impl.StoreBuilder +import io.reactivex.Maybe +import io.reactivex.Single +import org.assertj.core.api.Assertions.assertThat +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.runners.MockitoJUnitRunner +import java.util.concurrent.atomic.AtomicInteger + +@RunWith(MockitoJUnitRunner::class) +class GetRefreshingTest { + @Mock + internal lateinit var persister: ClearingPersister + internal lateinit var networkCalls: AtomicInteger + private lateinit var store: Store + + @Before + fun setUp() { + networkCalls = AtomicInteger(0) + store = StoreBuilder.barcode() + .fetcher { barCode -> Single.fromCallable { networkCalls.incrementAndGet() } } + .persister(persister) + .open() + } + + @Test + fun testRefreshOnClear() { + val barcode = BarCode("type", "key") + `when`(persister.read(barcode)) + .thenReturn(Maybe.empty()) //read from disk + .thenReturn(Maybe.just(1)) //read from disk after fetching from network + .thenReturn(Maybe.empty()) //read from disk after clearing disk cache + .thenReturn(Maybe.just(1)) //read from disk after making additional network call + `when`(persister.write(barcode, 1)).thenReturn(Single.just(true)) + `when`(persister.write(barcode, 2)).thenReturn(Single.just(true)) + + + val refreshingObservable = store.getRefreshing(barcode).test() + refreshingObservable.assertValueCount(1) + assertThat(networkCalls.toInt()).isEqualTo(1) + //clearing the store should produce another network call + store.clear(barcode) + refreshingObservable.assertValueCount(2) + assertThat(networkCalls.toInt()).isEqualTo(2) + + store.get(barcode).test().awaitTerminalEvent() + refreshingObservable.assertValueCount(2) + assertThat(networkCalls.toInt()).isEqualTo(2) + } + + @Test + fun testRefreshOnClearAll() { + val barcode1 = BarCode("type", "key") + val barcode2 = BarCode("type", "key2") + + `when`(persister.read(barcode1)) + .thenReturn(Maybe.empty()) //read from disk + .thenReturn(Maybe.just(1)) //read from disk after fetching from network + .thenReturn(Maybe.empty()) //read from disk after clearing disk cache + .thenReturn(Maybe.just(1)) //read from disk after making additional network call + `when`(persister.write(barcode1, 1)).thenReturn(Single.just(true)) + `when`(persister.write(barcode1, 2)).thenReturn(Single.just(true)) + + `when`(persister.read(barcode2)) + .thenReturn(Maybe.empty()) //read from disk + .thenReturn(Maybe.just(1)) //read from disk after fetching from network + .thenReturn(Maybe.empty()) //read from disk after clearing disk cache + .thenReturn(Maybe.just(1)) //read from disk after making additional network call + + `when`(persister.write(barcode2, 1)).thenReturn(Single.just(true)) + `when`(persister.write(barcode2, 2)).thenReturn(Single.just(true)) + + val testObservable1 = store.getRefreshing(barcode1).test() + val testObservable2 = store.getRefreshing(barcode2).test() + testObservable1.assertValueCount(1) + testObservable2.assertValueCount(1) + + assertThat(networkCalls.toInt()).isEqualTo(2) + + store.clear() + assertThat(networkCalls.toInt()).isEqualTo(4) + } +} diff --git a/store/src/test/java/com/nytimes/android/external/store3/KeyParserTest.kt b/store/src/test/java/com/nytimes/android/external/store3/KeyParserTest.kt index 620b5a22..28164c5d 100644 --- a/store/src/test/java/com/nytimes/android/external/store3/KeyParserTest.kt +++ b/store/src/test/java/com/nytimes/android/external/store3/KeyParserTest.kt @@ -32,8 +32,7 @@ class KeyParserTest { } companion object { - private const val NETWORK = "Network" - val KEY = 5 + private const val KEY = 5 } } diff --git a/store/src/test/java/com/nytimes/android/external/store3/ParsingFetcherTest.java b/store/src/test/java/com/nytimes/android/external/store3/ParsingFetcherTest.java deleted file mode 100644 index 909e753c..00000000 --- a/store/src/test/java/com/nytimes/android/external/store3/ParsingFetcherTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.nytimes.android.external.store3; - -import com.nytimes.android.external.store3.base.Fetcher; -import com.nytimes.android.external.store3.base.Parser; -import com.nytimes.android.external.store3.base.Persister; -import com.nytimes.android.external.store3.base.impl.BarCode; -import com.nytimes.android.external.store3.base.impl.ParsingFetcher; -import com.nytimes.android.external.store3.base.impl.Store; -import com.nytimes.android.external.store3.base.impl.StoreBuilder; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import io.reactivex.Maybe; -import io.reactivex.Single; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class ParsingFetcherTest { - - static final String RAW_DATA = "Test data."; - static final String PARSED = "DATA PARSED"; - - @Mock - Fetcher fetcher; - @Mock - Parser parser; - @Mock - Persister persister; - private final BarCode barCode = new BarCode("key", "value"); - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testPersistFetcher() { - - Store simpleStore = StoreBuilder.barcode() - .fetcher(ParsingFetcher.from(fetcher, parser)) - .persister(persister) - .open(); - - when(fetcher.fetch(barCode)) - .thenReturn(Single.just(RAW_DATA)); - - when(parser.apply(RAW_DATA)) - .thenReturn(PARSED); - - when(persister.read(barCode)) - .thenReturn(Maybe.just(PARSED)); - - when(persister.write(barCode, PARSED)) - .thenReturn(Single.just(true)); - - String value = simpleStore.fetch(barCode).blockingGet(); - - assertThat(value).isEqualTo(PARSED); - - verify(fetcher, times(1)).fetch(barCode); - verify(parser, times(1)).apply(RAW_DATA); - - verify(persister, times(1)).write(barCode, PARSED); - } -} diff --git a/store/src/test/java/com/nytimes/android/external/store3/ParsingFetcherTest.kt b/store/src/test/java/com/nytimes/android/external/store3/ParsingFetcherTest.kt new file mode 100644 index 00000000..8bc74b11 --- /dev/null +++ b/store/src/test/java/com/nytimes/android/external/store3/ParsingFetcherTest.kt @@ -0,0 +1,68 @@ +package com.nytimes.android.external.store3 + +import com.nytimes.android.external.store3.base.Fetcher +import com.nytimes.android.external.store3.base.Parser +import com.nytimes.android.external.store3.base.Persister +import com.nytimes.android.external.store3.base.impl.BarCode +import com.nytimes.android.external.store3.base.impl.ParsingFetcher +import com.nytimes.android.external.store3.base.impl.StoreBuilder +import io.reactivex.Maybe +import io.reactivex.Single +import org.assertj.core.api.Assertions.assertThat +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.Mockito.times +import org.mockito.Mockito.verify +import org.mockito.MockitoAnnotations + +class ParsingFetcherTest { + + @Mock + internal lateinit var fetcher: Fetcher + @Mock + internal lateinit var parser: Parser + @Mock + internal lateinit var persister: Persister + private val barCode = BarCode("key", "value") + + @Before + fun setUp() { + MockitoAnnotations.initMocks(this) + } + + @Test + fun testPersistFetcher() { + + val simpleStore = StoreBuilder.barcode() + .fetcher(ParsingFetcher.from(fetcher, parser)) + .persister(persister) + .open() + + `when`(fetcher.fetch(barCode)) + .thenReturn(Single.just(RAW_DATA)) + + `when`(parser.apply(RAW_DATA)) + .thenReturn(PARSED) + + `when`(persister.read(barCode)) + .thenReturn(Maybe.just(PARSED)) + + `when`(persister.write(barCode, PARSED)) + .thenReturn(Single.just(true)) + + val value = simpleStore.fetch(barCode).blockingGet() + + assertThat(value).isEqualTo(PARSED) + + verify>(fetcher, times(1)).fetch(barCode) + verify>(parser, times(1)).apply(RAW_DATA) + verify>(persister, times(1)).write(barCode, PARSED) + } + + companion object { + private const val RAW_DATA = "Test data." + private const val PARSED = "DATA PARSED" + } +} diff --git a/store/src/test/java/com/nytimes/android/external/store3/StreamOneKeyTest.java b/store/src/test/java/com/nytimes/android/external/store3/StreamOneKeyTest.java deleted file mode 100644 index 51bee2d9..00000000 --- a/store/src/test/java/com/nytimes/android/external/store3/StreamOneKeyTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.nytimes.android.external.store3; - -import com.nytimes.android.external.store3.base.Fetcher; -import com.nytimes.android.external.store3.base.Persister; -import com.nytimes.android.external.store3.base.impl.BarCode; -import com.nytimes.android.external.store3.base.impl.Store; -import com.nytimes.android.external.store3.base.impl.StoreBuilder; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.runners.MockitoJUnitRunner; - -import io.reactivex.Maybe; -import io.reactivex.Single; -import io.reactivex.observers.TestObserver; - -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class StreamOneKeyTest { - - private static final String TEST_ITEM = "test"; - private static final String TEST_ITEM2 = "test2"; - - @Mock - Fetcher fetcher; - @Mock - Persister persister; - - private final BarCode barCode = new BarCode("key", "value"); - private final BarCode barCode2 = new BarCode("key2", "value2"); - - private Store store; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - store = StoreBuilder.barcode() - .persister(persister) - .fetcher(fetcher) - .open(); - - when(fetcher.fetch(barCode)) - .thenReturn(Single.just(TEST_ITEM)) - .thenReturn(Single.just(TEST_ITEM2)); - - when(persister.read(barCode)) - .thenReturn(Maybe.empty()) - .thenReturn(Maybe.just(TEST_ITEM)) - .thenReturn(Maybe.just(TEST_ITEM2)); - - when(persister.write(barCode, TEST_ITEM)) - .thenReturn(Single.just(true)); - when(persister.write(barCode, TEST_ITEM2)) - .thenReturn(Single.just(true)); - } - - @Test - public void testStream() { - TestObserver streamObservable = store.stream(barCode).test(); - //first time we subscribe to stream it will fail getting from memory & disk and instead - //fetch from network, write to disk and notifiy subscribers - streamObservable.assertValueCount(1); - - store.clear(); - //fetch should notify subscribers again - store.fetch(barCode).test().awaitCount(1); - streamObservable.assertValues(TEST_ITEM, TEST_ITEM2); - - //get for another barcode should not trigger a stream for barcode1 - when(fetcher.fetch(barCode2)) - .thenReturn(Single.just(TEST_ITEM)); - when(persister.read(barCode2)) - .thenReturn(Maybe.empty()) - .thenReturn(Maybe.just(TEST_ITEM)); - when(persister.write(barCode2, TEST_ITEM)) - .thenReturn(Single.just(true)); - store.get(barCode2).test().awaitCount(1); - streamObservable.assertValueCount(2); - } -} diff --git a/store/src/test/java/com/nytimes/android/external/store3/StreamOneKeyTest.kt b/store/src/test/java/com/nytimes/android/external/store3/StreamOneKeyTest.kt new file mode 100644 index 00000000..f357bd16 --- /dev/null +++ b/store/src/test/java/com/nytimes/android/external/store3/StreamOneKeyTest.kt @@ -0,0 +1,82 @@ +package com.nytimes.android.external.store3 + +import com.nytimes.android.external.store3.base.Fetcher +import com.nytimes.android.external.store3.base.Persister +import com.nytimes.android.external.store3.base.impl.BarCode +import com.nytimes.android.external.store3.base.impl.Store +import com.nytimes.android.external.store3.base.impl.StoreBuilder +import io.reactivex.Maybe +import io.reactivex.Single +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.MockitoAnnotations +import org.mockito.runners.MockitoJUnitRunner + +@RunWith(MockitoJUnitRunner::class) +class StreamOneKeyTest { + + @Mock + internal lateinit var fetcher: Fetcher + @Mock + internal lateinit var persister: Persister + + private val barCode = BarCode("key", "value") + private val barCode2 = BarCode("key2", "value2") + private lateinit var store: Store + + @Before + fun setUp() { + MockitoAnnotations.initMocks(this) + + store = StoreBuilder.barcode() + .persister(persister) + .fetcher(fetcher) + .open() + + `when`(fetcher.fetch(barCode)) + .thenReturn(Single.just(TEST_ITEM)) + .thenReturn(Single.just(TEST_ITEM2)) + + `when`(persister.read(barCode)) + .thenReturn(Maybe.empty()) + .thenReturn(Maybe.just(TEST_ITEM)) + .thenReturn(Maybe.just(TEST_ITEM2)) + + `when`(persister.write(barCode, TEST_ITEM)) + .thenReturn(Single.just(true)) + `when`(persister.write(barCode, TEST_ITEM2)) + .thenReturn(Single.just(true)) + } + + @Test + fun testStream() { + val streamObservable = store.stream(barCode).test() + //first time we subscribe to stream it will fail getting from memory & disk and instead + //fetch from network, write to disk and notifiy subscribers + streamObservable.assertValueCount(1) + + store.clear() + //fetch should notify subscribers again + store.fetch(barCode).test().awaitCount(1) + streamObservable.assertValues(TEST_ITEM, TEST_ITEM2) + + //get for another barcode should not trigger a stream for barcode1 + `when`(fetcher.fetch(barCode2)) + .thenReturn(Single.just(TEST_ITEM)) + `when`(persister.read(barCode2)) + .thenReturn(Maybe.empty()) + .thenReturn(Maybe.just(TEST_ITEM)) + `when`(persister.write(barCode2, TEST_ITEM)) + .thenReturn(Single.just(true)) + store.get(barCode2).test().awaitCount(1) + streamObservable.assertValueCount(2) + } + + companion object { + private const val TEST_ITEM = "test" + private const val TEST_ITEM2 = "test2" + } +} diff --git a/store/src/test/java/com/nytimes/android/external/store3/StreamTest.java b/store/src/test/java/com/nytimes/android/external/store3/StreamTest.java deleted file mode 100644 index 2e8dd5de..00000000 --- a/store/src/test/java/com/nytimes/android/external/store3/StreamTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.nytimes.android.external.store3; - -import com.nytimes.android.external.store3.base.Fetcher; -import com.nytimes.android.external.store3.base.Persister; -import com.nytimes.android.external.store3.base.impl.BarCode; -import com.nytimes.android.external.store3.base.impl.Store; -import com.nytimes.android.external.store3.base.impl.StoreBuilder; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.runners.MockitoJUnitRunner; - -import io.reactivex.Maybe; -import io.reactivex.Single; -import io.reactivex.observers.TestObserver; - -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class StreamTest { - - private static final String TEST_ITEM = "test"; - - @Mock - Fetcher fetcher; - @Mock - Persister persister; - - private final BarCode barCode = new BarCode("key", "value"); - - private Store store; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - store = StoreBuilder.barcode() - .persister(persister) - .fetcher(fetcher) - .open(); - - when(fetcher.fetch(barCode)) - .thenReturn(Single.just(TEST_ITEM)); - - when(persister.read(barCode)) - .thenReturn(Maybe.empty()) - .thenReturn(Maybe.just(TEST_ITEM)); - - when(persister.write(barCode, TEST_ITEM)) - .thenReturn(Single.just(true)); - } - - @Test - public void testStream() { - TestObserver streamObservable = store.stream().test(); - streamObservable.assertValueCount(0); - store.get(barCode).subscribe(); - streamObservable.assertValueCount(1); - } - - @Test - public void testStreamEmitsOnlyFreshData() { - store.get(barCode).subscribe(); - TestObserver streamObservable = store.stream().test(); - streamObservable.assertValueCount(0); - } -} diff --git a/store/src/test/java/com/nytimes/android/external/store3/StreamTest.kt b/store/src/test/java/com/nytimes/android/external/store3/StreamTest.kt new file mode 100644 index 00000000..ff5ce550 --- /dev/null +++ b/store/src/test/java/com/nytimes/android/external/store3/StreamTest.kt @@ -0,0 +1,67 @@ +package com.nytimes.android.external.store3 + +import com.nytimes.android.external.store3.base.Fetcher +import com.nytimes.android.external.store3.base.Persister +import com.nytimes.android.external.store3.base.impl.BarCode +import com.nytimes.android.external.store3.base.impl.Store +import com.nytimes.android.external.store3.base.impl.StoreBuilder +import io.reactivex.Maybe +import io.reactivex.Single +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.MockitoAnnotations +import org.mockito.runners.MockitoJUnitRunner + +@RunWith(MockitoJUnitRunner::class) +class StreamTest { + + @Mock + internal lateinit var fetcher: Fetcher + @Mock + internal lateinit var persister: Persister + + private val barCode = BarCode("key", "value") + private lateinit var store: Store + + @Before + fun setUp() { + MockitoAnnotations.initMocks(this) + + store = StoreBuilder.barcode() + .persister(persister) + .fetcher(fetcher) + .open() + + `when`(fetcher.fetch(barCode)) + .thenReturn(Single.just(TEST_ITEM)) + + `when`(persister.read(barCode)) + .thenReturn(Maybe.empty()) + .thenReturn(Maybe.just(TEST_ITEM)) + + `when`(persister.write(barCode, TEST_ITEM)) + .thenReturn(Single.just(true)) + } + + @Test + fun testStream() { + val streamObservable = store.stream().test() + streamObservable.assertValueCount(0) + store.get(barCode).subscribe() + streamObservable.assertValueCount(1) + } + + @Test + fun testStreamEmitsOnlyFreshData() { + store.get(barCode).subscribe() + val streamObservable = store.stream().test() + streamObservable.assertValueCount(0) + } + + companion object { + private const val TEST_ITEM = "test" + } +} From 81a15a3bec4d748806a7040a5d44528a6e64826d Mon Sep 17 00:00:00 2001 From: Brian Plummer Date: Wed, 18 Jul 2018 22:58:33 +0200 Subject: [PATCH 2/2] NoopPersisterTest conversion --- .../store3/util/NoopPersisterTest.java | 59 ------------------ .../external/store3/util/NoopPersisterTest.kt | 61 +++++++++++++++++++ 2 files changed, 61 insertions(+), 59 deletions(-) delete mode 100644 store/src/test/java/com/nytimes/android/external/store3/util/NoopPersisterTest.java create mode 100644 store/src/test/java/com/nytimes/android/external/store3/util/NoopPersisterTest.kt diff --git a/store/src/test/java/com/nytimes/android/external/store3/util/NoopPersisterTest.java b/store/src/test/java/com/nytimes/android/external/store3/util/NoopPersisterTest.java deleted file mode 100644 index 659cf22f..00000000 --- a/store/src/test/java/com/nytimes/android/external/store3/util/NoopPersisterTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.nytimes.android.external.store3.util; - -import com.nytimes.android.external.store3.base.impl.BarCode; -import com.nytimes.android.external.store3.base.impl.MemoryPolicy; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -import static org.assertj.core.api.Assertions.assertThat; -import java.util.concurrent.TimeUnit; - -public class NoopPersisterTest { - - @Rule public ExpectedException exception = ExpectedException.none(); - - @Test - public void writeReadTest() { - BarCode barCode = new BarCode("key", "value"); - NoopPersister persister = NoopPersister.create(); - boolean success = persister.write(barCode, "foo").blockingGet(); - assertThat(success).isTrue(); - String rawValue = persister.read(barCode).blockingGet(); - assertThat(rawValue).isEqualTo("foo"); - } - - @Test - public void noopParserFuncTest() { - NoopParserFunc noopParserFunc = new NoopParserFunc<>(); - String input = "foo"; - String output = noopParserFunc.apply(input); - assertThat(input).isEqualTo(output); - //intended object ref comparison - assertThat(input).isSameAs(output); - } - - // https://github.com/NYTimes/Store/issues/312 - @Test - public void testReadingOfMemoryPolicies() { - MemoryPolicy expireAfterWritePolicy = MemoryPolicy.builder() - .setExpireAfterWrite(1) - .setExpireAfterTimeUnit(TimeUnit.HOURS) - .build(); - NoopPersister.create(expireAfterWritePolicy); - - MemoryPolicy expireAfterAccessPolicy = MemoryPolicy.builder() - .setExpireAfterAccess(1) - .setExpireAfterTimeUnit(TimeUnit.HOURS) - .build(); - NoopPersister.create(expireAfterAccessPolicy); - - exception.expect(IllegalArgumentException.class); - exception.expectMessage("No expiry policy set"); - MemoryPolicy incompletePolicy = MemoryPolicy.builder() - .setExpireAfterTimeUnit(TimeUnit.HOURS) - .build(); - NoopPersister.create(incompletePolicy); - } -} diff --git a/store/src/test/java/com/nytimes/android/external/store3/util/NoopPersisterTest.kt b/store/src/test/java/com/nytimes/android/external/store3/util/NoopPersisterTest.kt new file mode 100644 index 00000000..231e658a --- /dev/null +++ b/store/src/test/java/com/nytimes/android/external/store3/util/NoopPersisterTest.kt @@ -0,0 +1,61 @@ +package com.nytimes.android.external.store3.util + +import com.nytimes.android.external.store3.base.impl.BarCode +import com.nytimes.android.external.store3.base.impl.MemoryPolicy + +import org.junit.Rule +import org.junit.Test +import org.junit.rules.ExpectedException + +import org.assertj.core.api.Assertions.assertThat +import java.util.concurrent.TimeUnit + +class NoopPersisterTest { + + @Rule + @JvmField + var exception = ExpectedException.none() + + @Test + fun writeReadTest() { + val barCode = BarCode("key", "value") + val persister = NoopPersister.create() + val success = persister.write(barCode, "foo").blockingGet() + assertThat(success).isTrue() + val rawValue = persister.read(barCode).blockingGet() + assertThat(rawValue).isEqualTo("foo") + } + + @Test + fun noopParserFuncTest() { + val noopParserFunc = NoopParserFunc() + val input = "foo" + val output = noopParserFunc.apply(input) + assertThat(input).isEqualTo(output) + //intended object ref comparison + assertThat(input).isSameAs(output) + } + + // https://github.com/NYTimes/Store/issues/312 + @Test + fun testReadingOfMemoryPolicies() { + val expireAfterWritePolicy = MemoryPolicy.builder() + .setExpireAfterWrite(1) + .setExpireAfterTimeUnit(TimeUnit.HOURS) + .build() + NoopPersister.create(expireAfterWritePolicy) + + val expireAfterAccessPolicy = MemoryPolicy.builder() + .setExpireAfterAccess(1) + .setExpireAfterTimeUnit(TimeUnit.HOURS) + .build() + NoopPersister.create(expireAfterAccessPolicy) + + exception.expect(IllegalArgumentException::class.java) + exception.expectMessage("No expiry policy set") + val incompletePolicy = MemoryPolicy.builder() + .setExpireAfterTimeUnit(TimeUnit.HOURS) + .build() + NoopPersister.create(incompletePolicy) + } +}