Issue#13 Finish Robolectric SharedPreferences test description
This commit is contained in:
parent
d29207be12
commit
c38e608c8c
6 changed files with 281 additions and 52 deletions
|
|
@ -0,0 +1,28 @@
|
|||
package org.fnives.test.showcase.storage
|
||||
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.jupiter.api.Disabled
|
||||
|
||||
@Disabled("CodeKata")
|
||||
class CodeKataUserDataLocalStorageTest {
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
}
|
||||
|
||||
/** GIVEN session value WHEN accessed THEN it's returned **/
|
||||
@Test
|
||||
fun sessionSetWillStayBeKept() {
|
||||
}
|
||||
|
||||
/** GIVEN null value WHEN accessed THEN it's null **/
|
||||
@Test
|
||||
fun sessionSetToNullWillStayNull() {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
package org.fnives.test.showcase.storage
|
||||
|
||||
import android.content.Context
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import org.fnives.test.showcase.core.integration.fake.FakeUserDataLocalStorage
|
||||
import org.fnives.test.showcase.core.storage.UserDataLocalStorage
|
||||
import org.fnives.test.showcase.model.session.Session
|
||||
import org.junit.After
|
||||
import org.junit.Assert
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.koin.core.context.GlobalContext.stopKoin
|
||||
import org.koin.test.KoinTest
|
||||
import org.robolectric.ParameterizedRobolectricTestRunner
|
||||
|
||||
@RunWith(ParameterizedRobolectricTestRunner::class)
|
||||
class UserDataLocalStorageTest(
|
||||
private val userDataLocalStorageFactory: () -> UserDataLocalStorage
|
||||
) : KoinTest {
|
||||
|
||||
private lateinit var userDataLocalStorage: UserDataLocalStorage
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
userDataLocalStorage = userDataLocalStorageFactory.invoke()
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
stopKoin()
|
||||
}
|
||||
|
||||
/** GIVEN session value WHEN accessed THEN it's returned **/
|
||||
@Test
|
||||
fun sessionSetWillStayBeKept() {
|
||||
val session = Session(accessToken = "a", refreshToken = "b")
|
||||
userDataLocalStorage.session = session
|
||||
|
||||
val actual = userDataLocalStorage.session
|
||||
|
||||
Assert.assertEquals(session, actual)
|
||||
}
|
||||
|
||||
/** GIVEN null value WHEN accessed THEN it's null **/
|
||||
@Test
|
||||
fun sessionSetToNullWillStayNull() {
|
||||
userDataLocalStorage.session = Session(accessToken = "a", refreshToken = "b")
|
||||
|
||||
userDataLocalStorage.session = null
|
||||
val actual = userDataLocalStorage.session
|
||||
|
||||
Assert.assertEquals(null, actual)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private fun createFake(): UserDataLocalStorage = FakeUserDataLocalStorage()
|
||||
|
||||
private fun createReal(): UserDataLocalStorage {
|
||||
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||
|
||||
return SharedPreferencesManagerImpl.create(context)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@ParameterizedRobolectricTestRunner.Parameters
|
||||
fun userDataLocalStorageFactories(): List<() -> UserDataLocalStorage> = listOf(
|
||||
::createFake,
|
||||
::createReal
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package org.fnives.test.showcase.storage.favourite
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.flow.first
|
||||
|
|
@ -11,6 +10,7 @@ import kotlinx.coroutines.test.TestCoroutineScheduler
|
|||
import kotlinx.coroutines.test.TestDispatcher
|
||||
import kotlinx.coroutines.test.advanceUntilIdle
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.fnives.test.showcase.core.integration.fake.FakeFavouriteContentLocalStorage
|
||||
import org.fnives.test.showcase.core.storage.content.FavouriteContentLocalStorage
|
||||
import org.fnives.test.showcase.model.content.ContentId
|
||||
import org.fnives.test.showcase.storage.database.DatabaseInitialization
|
||||
|
|
@ -21,20 +21,24 @@ import org.junit.Test
|
|||
import org.junit.runner.RunWith
|
||||
import org.koin.core.context.stopKoin
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.inject
|
||||
import org.koin.test.get
|
||||
import org.robolectric.ParameterizedRobolectricTestRunner
|
||||
|
||||
@Suppress("TestFunctionName")
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
internal class FavouriteContentLocalStorageImplInstrumentedTest : KoinTest {
|
||||
@RunWith(ParameterizedRobolectricTestRunner::class)
|
||||
internal class FavouriteContentLocalStorageImplInstrumentedTest(
|
||||
private val favouriteContentLocalStorageFactory: KoinTest.() -> FavouriteContentLocalStorage
|
||||
) : KoinTest {
|
||||
|
||||
private val sut by inject<FavouriteContentLocalStorage>()
|
||||
private lateinit var sut: FavouriteContentLocalStorage
|
||||
private lateinit var testDispatcher: TestDispatcher
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
testDispatcher = StandardTestDispatcher(TestCoroutineScheduler())
|
||||
DatabaseInitialization.dispatcher = testDispatcher
|
||||
sut = favouriteContentLocalStorageFactory()
|
||||
}
|
||||
|
||||
@After
|
||||
|
|
@ -117,4 +121,18 @@ internal class FavouriteContentLocalStorageImplInstrumentedTest : KoinTest {
|
|||
Assert.assertFalse(actual.isCompleted)
|
||||
actual.cancel()
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private fun createFake(): FavouriteContentLocalStorage = FakeFavouriteContentLocalStorage()
|
||||
|
||||
private fun KoinTest.createReal(): FavouriteContentLocalStorage = get()
|
||||
|
||||
@JvmStatic
|
||||
@ParameterizedRobolectricTestRunner.Parameters
|
||||
fun favouriteContentLocalStorageFactories(): List<KoinTest.() -> FavouriteContentLocalStorage> = listOf(
|
||||
{ createFake() },
|
||||
{ createReal() }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue