Issue#13 Finish Robolectric SharedPreferences test description

This commit is contained in:
Gergely Hegedus 2022-01-28 21:42:31 +02:00
parent d29207be12
commit c38e608c8c
6 changed files with 281 additions and 52 deletions

View file

@ -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() {
}
}

View file

@ -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
)
}
}

View file

@ -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() }
)
}
}