Update dependencies and make adjustments based on version migrations
This commit is contained in:
parent
4147ac7afd
commit
472b7591f5
27 changed files with 120 additions and 97 deletions
|
|
@ -83,20 +83,17 @@ afterEvaluate {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
||||||
implementation "androidx.core:core-ktx:$androidx_core_version"
|
implementation "androidx.core:core-ktx:$androidx_core_version"
|
||||||
implementation "androidx.appcompat:appcompat:$androidx_appcompat_version"
|
implementation "androidx.appcompat:appcompat:$androidx_appcompat_version"
|
||||||
implementation "com.google.android.material:material:$androidx_material_version"
|
implementation "com.google.android.material:material:$androidx_material_version"
|
||||||
implementation "androidx.constraintlayout:constraintlayout:$androidx_constraintlayout_version"
|
implementation "androidx.constraintlayout:constraintlayout:$androidx_constraintlayout_version"
|
||||||
implementation "androidx.lifecycle:lifecycle-livedata-core-ktx:$androidx_livedata_version"
|
implementation "androidx.lifecycle:lifecycle-livedata-core-ktx:$androidx_livedata_version"
|
||||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$androidx_livedata_version"
|
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$androidx_livedata_version"
|
||||||
|
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$androidx_livedata_version"
|
||||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:$androidx_swiperefreshlayout_version"
|
implementation "androidx.swiperefreshlayout:swiperefreshlayout:$androidx_swiperefreshlayout_version"
|
||||||
|
|
||||||
// Koin
|
// Koin
|
||||||
implementation "org.koin:koin-androidx-scope:$koin_version"
|
implementation "io.insert-koin:koin-android:$koin_version"
|
||||||
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
|
|
||||||
implementation "org.koin:koin-androidx-fragment:$koin_version"
|
|
||||||
|
|
||||||
implementation "androidx.room:room-runtime:$androidx_room_version"
|
implementation "androidx.room:room-runtime:$androidx_room_version"
|
||||||
kapt "androidx.room:room-compiler:$androidx_room_version"
|
kapt "androidx.room:room-compiler:$androidx_room_version"
|
||||||
|
|
@ -113,7 +110,7 @@ dependencies {
|
||||||
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
||||||
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
||||||
testImplementation "com.jraska.livedata:testing-ktx:$testing_livedata_version"
|
testImplementation "com.jraska.livedata:testing-ktx:$testing_livedata_version"
|
||||||
testImplementation "org.koin:koin-test:$koin_version"
|
testImplementation "io.insert-koin:koin-test-junit5:$koin_version"
|
||||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||||
|
|
||||||
// robolectric specific
|
// robolectric specific
|
||||||
|
|
@ -130,7 +127,7 @@ dependencies {
|
||||||
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$testing_junit5_version"
|
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$testing_junit5_version"
|
||||||
|
|
||||||
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
||||||
androidTestImplementation "org.koin:koin-test:$koin_version"
|
androidTestImplementation "io.insert-koin:koin-test-junit4:$koin_version"
|
||||||
androidTestImplementation "junit:junit:$testing_junit4_version"
|
androidTestImplementation "junit:junit:$testing_junit4_version"
|
||||||
androidTestImplementation "androidx.test:core:$testing_androidx_code_version"
|
androidTestImplementation "androidx.test:core:$testing_androidx_code_version"
|
||||||
androidTestImplementation "androidx.test:runner:$testing_androidx_code_version"
|
androidTestImplementation "androidx.test:runner:$testing_androidx_code_version"
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ object AndroidTestServerTypeConfiguration : ServerTypeConfiguration, KoinTest {
|
||||||
.build()
|
.build()
|
||||||
loadKoinModules(
|
loadKoinModules(
|
||||||
module {
|
module {
|
||||||
single(qualifier = sessionless, override = true) { okHttpClientWithCertificate }
|
single(qualifier = sessionless) { okHttpClientWithCertificate }
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,16 @@
|
||||||
package org.fnives.test.showcase.favourite
|
package org.fnives.test.showcase.favourite
|
||||||
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.flow.take
|
import kotlinx.coroutines.flow.take
|
||||||
import kotlinx.coroutines.flow.toList
|
import kotlinx.coroutines.flow.toList
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.test.TestCoroutineDispatcher
|
import kotlinx.coroutines.test.TestCoroutineDispatcher
|
||||||
|
import kotlinx.coroutines.test.TestCoroutineScope
|
||||||
|
import kotlinx.coroutines.test.runBlockingTest
|
||||||
import org.fnives.test.showcase.core.storage.content.FavouriteContentLocalStorage
|
import org.fnives.test.showcase.core.storage.content.FavouriteContentLocalStorage
|
||||||
import org.fnives.test.showcase.model.content.ContentId
|
import org.fnives.test.showcase.model.content.ContentId
|
||||||
import org.fnives.test.showcase.storage.database.DatabaseInitialization
|
import org.fnives.test.showcase.storage.database.DatabaseInitialization
|
||||||
|
|
@ -20,6 +24,7 @@ import org.koin.test.KoinTest
|
||||||
import org.koin.test.inject
|
import org.koin.test.inject
|
||||||
|
|
||||||
@Suppress("TestFunctionName")
|
@Suppress("TestFunctionName")
|
||||||
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
internal class FavouriteContentLocalStorageImplTest : KoinTest {
|
internal class FavouriteContentLocalStorageImplTest : KoinTest {
|
||||||
|
|
||||||
|
|
@ -63,6 +68,7 @@ internal class FavouriteContentLocalStorageImplTest : KoinTest {
|
||||||
runBlocking<Unit> {
|
runBlocking<Unit> {
|
||||||
val expected = listOf(listOf(), listOf(ContentId("a")))
|
val expected = listOf(listOf(), listOf(ContentId("a")))
|
||||||
|
|
||||||
|
val testDispatcher = TestCoroutineDispatcher()
|
||||||
val actual = async(testDispatcher) {
|
val actual = async(testDispatcher) {
|
||||||
sut.observeFavourites().take(2).toList()
|
sut.observeFavourites().take(2).toList()
|
||||||
}
|
}
|
||||||
|
|
@ -79,6 +85,7 @@ internal class FavouriteContentLocalStorageImplTest : KoinTest {
|
||||||
val expected = listOf(listOf(ContentId("a")), listOf())
|
val expected = listOf(listOf(ContentId("a")), listOf())
|
||||||
sut.markAsFavourite(ContentId("a"))
|
sut.markAsFavourite(ContentId("a"))
|
||||||
|
|
||||||
|
val testDispatcher = TestCoroutineDispatcher()
|
||||||
val actual = async(testDispatcher) {
|
val actual = async(testDispatcher) {
|
||||||
sut.observeFavourites().take(2).toList()
|
sut.observeFavourites().take(2).toList()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,13 @@ import org.fnives.test.showcase.core.login.LoginUseCase
|
||||||
import org.fnives.test.showcase.testutils.InstantExecutorExtension
|
import org.fnives.test.showcase.testutils.InstantExecutorExtension
|
||||||
import org.fnives.test.showcase.testutils.TestMainDispatcher
|
import org.fnives.test.showcase.testutils.TestMainDispatcher
|
||||||
import org.junit.jupiter.api.BeforeEach
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.Disabled
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.extension.ExtendWith
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
import org.mockito.kotlin.mock
|
import org.mockito.kotlin.mock
|
||||||
|
|
||||||
|
@Disabled("CodeKata")
|
||||||
@ExtendWith(InstantExecutorExtension::class, TestMainDispatcher::class)
|
@ExtendWith(InstantExecutorExtension::class, TestMainDispatcher::class)
|
||||||
class CodeKataAuthViewModel {
|
class CodeKataAuthViewModel {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import org.fnives.test.showcase.testutils.InstantExecutorExtension
|
||||||
import org.fnives.test.showcase.testutils.TestMainDispatcher
|
import org.fnives.test.showcase.testutils.TestMainDispatcher
|
||||||
import org.fnives.test.showcase.ui.shared.Event
|
import org.fnives.test.showcase.ui.shared.Event
|
||||||
import org.junit.jupiter.api.BeforeEach
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.Disabled
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.extension.ExtendWith
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
|
|
@ -12,6 +13,7 @@ import org.mockito.kotlin.doReturn
|
||||||
import org.mockito.kotlin.mock
|
import org.mockito.kotlin.mock
|
||||||
import org.mockito.kotlin.whenever
|
import org.mockito.kotlin.whenever
|
||||||
|
|
||||||
|
@Disabled("CodeKata")
|
||||||
internal class CodeKataSplashViewModelTest {
|
internal class CodeKataSplashViewModelTest {
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
sdk=28
|
sdk=28
|
||||||
shadows=org.fnives.test.showcase.testutils.shadow.ShadowSnackbar
|
shadows=org.fnives.test.showcase.testutils.shadow.ShadowSnackbar
|
||||||
|
instrumentedPackages=androidx.loader.content
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = "1.4.32"
|
ext.kotlin_version = "1.5.30"
|
||||||
ext.detekt_version = "1.16.0"
|
ext.detekt_version = "1.16.0"
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
google()
|
google()
|
||||||
maven { url "https://plugins.gradle.org/m2/" }
|
maven { url "https://plugins.gradle.org/m2/" }
|
||||||
jcenter()
|
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "com.android.tools.build:gradle:4.1.3"
|
classpath "com.android.tools.build:gradle:4.1.3"
|
||||||
|
|
@ -47,8 +47,8 @@ detekt {
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
google()
|
google()
|
||||||
jcenter()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,19 @@ test {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compileKotlin {
|
||||||
|
kotlinOptions {
|
||||||
|
freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
||||||
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
||||||
|
|
||||||
api project(":model")
|
api project(":model")
|
||||||
implementation project(":network")
|
implementation project(":network")
|
||||||
|
|
||||||
testImplementation "org.koin:koin-test:$koin_version"
|
testImplementation "io.insert-koin:koin-test-junit5:$koin_version"
|
||||||
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
||||||
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
||||||
testImplementation "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
testImplementation "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package org.fnives.test.showcase.core.content
|
package org.fnives.test.showcase.core.content
|
||||||
|
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
|
|
@ -24,6 +25,8 @@ internal class ContentRepository(private val contentRemoteSource: ContentRemoteS
|
||||||
}
|
}
|
||||||
emit(response)
|
emit(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
val contents: Flow<Resource<List<Content>>> = mutableContentFlow.flatMapLatest {
|
val contents: Flow<Resource<List<Content>>> = mutableContentFlow.flatMapLatest {
|
||||||
if (it.item != null) flowOf(Resource.Success(it.item)) else requestFlow
|
if (it.item != null) flowOf(Resource.Success(it.item)) else requestFlow
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ fun createCoreModule(
|
||||||
.plus(repositoryModule())
|
.plus(repositoryModule())
|
||||||
|
|
||||||
fun repositoryModule() = module {
|
fun repositoryModule() = module {
|
||||||
single(override = true) { ContentRepository(get()) }
|
single { ContentRepository(get()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun useCaseModule() = module {
|
fun useCaseModule() = module {
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,7 @@ import org.fnives.test.showcase.model.content.ContentId
|
||||||
import org.fnives.test.showcase.model.content.ImageUrl
|
import org.fnives.test.showcase.model.content.ImageUrl
|
||||||
import org.fnives.test.showcase.model.shared.Resource
|
import org.fnives.test.showcase.model.shared.Resource
|
||||||
import org.fnives.test.showcase.network.content.ContentRemoteSource
|
import org.fnives.test.showcase.network.content.ContentRemoteSource
|
||||||
import org.junit.jupiter.api.Assertions
|
import org.junit.jupiter.api.*
|
||||||
import org.junit.jupiter.api.BeforeEach
|
|
||||||
import org.junit.jupiter.api.DisplayName
|
|
||||||
import org.junit.jupiter.api.Test
|
|
||||||
import org.mockito.kotlin.doAnswer
|
import org.mockito.kotlin.doAnswer
|
||||||
import org.mockito.kotlin.doReturn
|
import org.mockito.kotlin.doReturn
|
||||||
import org.mockito.kotlin.doSuspendableAnswer
|
import org.mockito.kotlin.doSuspendableAnswer
|
||||||
|
|
@ -26,6 +23,7 @@ import org.mockito.kotlin.verify
|
||||||
import org.mockito.kotlin.verifyNoMoreInteractions
|
import org.mockito.kotlin.verifyNoMoreInteractions
|
||||||
import org.mockito.kotlin.whenever
|
import org.mockito.kotlin.whenever
|
||||||
|
|
||||||
|
@Disabled("CodeKata")
|
||||||
class CodeKataContentRepositoryTest {
|
class CodeKataContentRepositoryTest {
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package org.fnives.test.showcase.core.content
|
package org.fnives.test.showcase.core.content
|
||||||
|
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.take
|
import kotlinx.coroutines.flow.take
|
||||||
|
|
@ -20,6 +21,7 @@ import org.mockito.kotlin.mock
|
||||||
import org.mockito.kotlin.whenever
|
import org.mockito.kotlin.whenever
|
||||||
|
|
||||||
@Suppress("TestFunctionName")
|
@Suppress("TestFunctionName")
|
||||||
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
internal class GetAllContentUseCaseTest {
|
internal class GetAllContentUseCaseTest {
|
||||||
|
|
||||||
private lateinit var sut: GetAllContentUseCase
|
private lateinit var sut: GetAllContentUseCase
|
||||||
|
|
@ -36,13 +38,16 @@ internal class GetAllContentUseCaseTest {
|
||||||
mockContentRepository = mock()
|
mockContentRepository = mock()
|
||||||
favouriteContentIdFlow = MutableStateFlow(emptyList())
|
favouriteContentIdFlow = MutableStateFlow(emptyList())
|
||||||
contentFlow = MutableStateFlow(Resource.Loading())
|
contentFlow = MutableStateFlow(Resource.Loading())
|
||||||
whenever(mockFavouriteContentLocalStorage.observeFavourites()).doReturn(favouriteContentIdFlow)
|
whenever(mockFavouriteContentLocalStorage.observeFavourites()).doReturn(
|
||||||
|
favouriteContentIdFlow
|
||||||
|
)
|
||||||
whenever(mockContentRepository.contents).doReturn(contentFlow)
|
whenever(mockContentRepository.contents).doReturn(contentFlow)
|
||||||
sut = GetAllContentUseCase(mockContentRepository, mockFavouriteContentLocalStorage)
|
sut = GetAllContentUseCase(mockContentRepository, mockFavouriteContentLocalStorage)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun GIVEN_loading_AND_empty_favourite_WHEN_observed_THEN_loading_is_shown() = runBlockingTest(testDispatcher) {
|
fun GIVEN_loading_AND_empty_favourite_WHEN_observed_THEN_loading_is_shown() =
|
||||||
|
runBlockingTest(testDispatcher) {
|
||||||
favouriteContentIdFlow.value = emptyList()
|
favouriteContentIdFlow.value = emptyList()
|
||||||
contentFlow.value = Resource.Loading()
|
contentFlow.value = Resource.Loading()
|
||||||
val expected = Resource.Loading<List<FavouriteContent>>()
|
val expected = Resource.Loading<List<FavouriteContent>>()
|
||||||
|
|
@ -53,7 +58,8 @@ internal class GetAllContentUseCaseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun GIVEN_loading_AND_listOfFavourite_WHEN_observed_THEN_loading_is_shown() = runBlockingTest(testDispatcher) {
|
fun GIVEN_loading_AND_listOfFavourite_WHEN_observed_THEN_loading_is_shown() =
|
||||||
|
runBlockingTest(testDispatcher) {
|
||||||
favouriteContentIdFlow.value = listOf(ContentId("a"))
|
favouriteContentIdFlow.value = listOf(ContentId("a"))
|
||||||
contentFlow.value = Resource.Loading()
|
contentFlow.value = Resource.Loading()
|
||||||
val expected = Resource.Loading<List<FavouriteContent>>()
|
val expected = Resource.Loading<List<FavouriteContent>>()
|
||||||
|
|
@ -64,7 +70,8 @@ internal class GetAllContentUseCaseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun GIVEN_error_AND_empty_favourite_WHEN_observed_THEN_error_is_shown() = runBlockingTest(testDispatcher) {
|
fun GIVEN_error_AND_empty_favourite_WHEN_observed_THEN_error_is_shown() =
|
||||||
|
runBlockingTest(testDispatcher) {
|
||||||
favouriteContentIdFlow.value = emptyList()
|
favouriteContentIdFlow.value = emptyList()
|
||||||
val exception = Throwable()
|
val exception = Throwable()
|
||||||
contentFlow.value = Resource.Error(exception)
|
contentFlow.value = Resource.Error(exception)
|
||||||
|
|
@ -76,7 +83,8 @@ internal class GetAllContentUseCaseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun GIVEN_error_AND_listOfFavourite_WHEN_observed_THEN_error_is_shown() = runBlockingTest(testDispatcher) {
|
fun GIVEN_error_AND_listOfFavourite_WHEN_observed_THEN_error_is_shown() =
|
||||||
|
runBlockingTest(testDispatcher) {
|
||||||
favouriteContentIdFlow.value = listOf(ContentId("b"))
|
favouriteContentIdFlow.value = listOf(ContentId("b"))
|
||||||
val exception = Throwable()
|
val exception = Throwable()
|
||||||
contentFlow.value = Resource.Error(exception)
|
contentFlow.value = Resource.Error(exception)
|
||||||
|
|
@ -88,7 +96,8 @@ internal class GetAllContentUseCaseTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun GIVEN_listOfContent_AND_empty_favourite_WHEN_observed_THEN_favourites_are_returned() = runBlockingTest(testDispatcher) {
|
fun GIVEN_listOfContent_AND_empty_favourite_WHEN_observed_THEN_favourites_are_returned() =
|
||||||
|
runBlockingTest(testDispatcher) {
|
||||||
favouriteContentIdFlow.value = emptyList()
|
favouriteContentIdFlow.value = emptyList()
|
||||||
val content = Content(ContentId("a"), "b", "c", ImageUrl("d"))
|
val content = Content(ContentId("a"), "b", "c", ImageUrl("d"))
|
||||||
contentFlow.value = Resource.Success(listOf(content))
|
contentFlow.value = Resource.Success(listOf(content))
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,10 @@ import org.fnives.test.showcase.model.session.Session
|
||||||
import org.fnives.test.showcase.model.shared.Answer
|
import org.fnives.test.showcase.model.shared.Answer
|
||||||
import org.fnives.test.showcase.network.auth.LoginRemoteSource
|
import org.fnives.test.showcase.network.auth.LoginRemoteSource
|
||||||
import org.fnives.test.showcase.network.auth.model.LoginStatusResponses
|
import org.fnives.test.showcase.network.auth.model.LoginStatusResponses
|
||||||
import org.junit.jupiter.api.Assertions
|
import org.junit.jupiter.api.*
|
||||||
import org.junit.jupiter.api.BeforeEach
|
|
||||||
import org.junit.jupiter.api.DisplayName
|
|
||||||
import org.junit.jupiter.api.Test
|
|
||||||
import org.mockito.kotlin.*
|
import org.mockito.kotlin.*
|
||||||
|
|
||||||
|
@Disabled("CodeKata")
|
||||||
class CodeKataSecondLoginUseCaseTest {
|
class CodeKataSecondLoginUseCaseTest {
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
package org.fnives.test.showcase.core.session
|
package org.fnives.test.showcase.core.session
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeEach
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.Disabled
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.mockito.kotlin.*
|
import org.mockito.kotlin.*
|
||||||
|
|
||||||
|
@Disabled("CodeKata")
|
||||||
class CodeKataFirstSessionExpirationAdapterTest {
|
class CodeKataFirstSessionExpirationAdapterTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1 +1 @@
|
||||||
#mock-maker-inline
|
mock-maker-inline
|
||||||
|
|
@ -17,5 +17,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
# Automatically convert third-party libraries to use AndroidX
|
# Automatically convert third-party libraries to use AndroidX
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
|
android.jetifier.blacklist=bcprov-jdk15on
|
||||||
# Kotlin code style for this project: "official" or "obsolete":
|
# Kotlin code style for this project: "official" or "obsolete":
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
|
|
@ -1,28 +1,28 @@
|
||||||
project.ext {
|
project.ext {
|
||||||
androidx_core_version = "1.3.2"
|
androidx_core_version = "1.6.0"
|
||||||
androidx_appcompat_version = "1.2.0"
|
androidx_appcompat_version = "1.3.1"
|
||||||
androidx_material_version = "1.3.0"
|
androidx_material_version = "1.4.0"
|
||||||
androidx_constraintlayout_version = "2.0.4"
|
androidx_constraintlayout_version = "2.1.0"
|
||||||
androidx_livedata_version = "2.3.1"
|
androidx_livedata_version = "2.3.1"
|
||||||
androidx_swiperefreshlayout_version = "1.1.0"
|
androidx_swiperefreshlayout_version = "1.1.0"
|
||||||
androidx_room_version = "2.2.6"
|
androidx_room_version = "2.3.0"
|
||||||
|
|
||||||
coroutines_version = "1.4.3"
|
coroutines_version = "1.4.3"
|
||||||
koin_version = "2.2.2"
|
koin_version = "3.1.2"
|
||||||
coil_version = "1.1.1"
|
coil_version = "1.1.1"
|
||||||
retrofit_version = "2.9.0"
|
retrofit_version = "2.9.0"
|
||||||
okhttp_version = "4.9.1"
|
okhttp_version = "4.9.1"
|
||||||
moshi_version = "1.11.0"
|
moshi_version = "1.12.0"
|
||||||
|
|
||||||
testing_androidx_code_version = "1.3.0"
|
testing_androidx_code_version = "1.4.0"
|
||||||
testing_androidx_junit_version = "1.1.2"
|
testing_androidx_junit_version = "1.1.3"
|
||||||
testing_androidx_arch_core_version = "2.1.0"
|
testing_androidx_arch_core_version = "2.1.0"
|
||||||
testing_livedata_version = "1.1.2"
|
testing_livedata_version = "1.2.0"
|
||||||
testing_kotlin_mockito_version = "3.1.0"
|
testing_kotlin_mockito_version = "3.1.0"
|
||||||
testing_junit5_version = "5.7.0"
|
testing_junit5_version = "5.7.0"
|
||||||
testing_json_assert_version = "1.5.0"
|
testing_json_assert_version = "1.5.0"
|
||||||
testing_junit4_version = "4.13.2"
|
testing_junit4_version = "4.13.2"
|
||||||
testing_robolectric_version = "4.5.1"
|
testing_robolectric_version = "4.6.1"
|
||||||
testing_espresso_version = "3.3.0"
|
testing_espresso_version = "3.4.0"
|
||||||
testing_okhttp3_idling_resource_version = "1.0.0"
|
testing_okhttp3_idling_resource_version = "1.0.0"
|
||||||
}
|
}
|
||||||
|
|
@ -9,8 +9,6 @@ java {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
||||||
|
|
||||||
api project(":model")
|
api project(":model")
|
||||||
|
|
||||||
api "com.squareup.okhttp3:mockwebserver:$okhttp_version"
|
api "com.squareup.okhttp3:mockwebserver:$okhttp_version"
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ class MockServerScenarioSetup internal constructor(
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val PORT: Int = 7335
|
const val PORT: Int = 7335
|
||||||
val HTTP_BASE_URL get() = "http://${InetAddress.getLocalHost().hostName}"
|
val HTTP_BASE_URL get() = "http://${InetAddress.getLocalHost().canonicalHostName}"
|
||||||
val HTTPS_BASE_URL get() = "https://localhost"
|
val HTTPS_BASE_URL get() = "https://localhost"
|
||||||
|
|
||||||
private fun MockWebServer.useHttps(): HandshakeCertificates {
|
private fun MockWebServer.useHttps(): HandshakeCertificates {
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,6 @@ java {
|
||||||
|
|
||||||
compileKotlin {
|
compileKotlin {
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
freeCompilerArgs = ["-Xinline-classes"]
|
freeCompilerArgs += "-Xinline-classes"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
||||||
}
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
package org.fnives.test.showcase.model.content
|
package org.fnives.test.showcase.model.content
|
||||||
|
|
||||||
inline class ContentId(val id: String)
|
@JvmInline
|
||||||
|
value class ContentId(val id: String)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
package org.fnives.test.showcase.model.content
|
package org.fnives.test.showcase.model.content
|
||||||
|
|
||||||
inline class ImageUrl(val url: String)
|
@JvmInline
|
||||||
|
value class ImageUrl(val url: String)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
package org.fnives.test.showcase.model.network
|
package org.fnives.test.showcase.model.network
|
||||||
|
|
||||||
inline class BaseUrl(val baseUrl: String)
|
@JvmInline
|
||||||
|
value class BaseUrl(val baseUrl: String)
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ test {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
||||||
|
|
||||||
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
|
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
|
||||||
|
|
@ -27,15 +26,15 @@ dependencies {
|
||||||
implementation "com.squareup.moshi:moshi:$moshi_version"
|
implementation "com.squareup.moshi:moshi:$moshi_version"
|
||||||
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
|
||||||
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
|
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
|
||||||
api "org.koin:koin-core:$koin_version"
|
api "io.insert-koin:koin-core:$koin_version"
|
||||||
|
|
||||||
api project(":model")
|
api project(":model")
|
||||||
|
|
||||||
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
||||||
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
testImplementation "org.mockito.kotlin:mockito-kotlin:$testing_kotlin_mockito_version"
|
||||||
testImplementation "org.junit.jupiter:junit-jupiter-engine:5.7.0"
|
testImplementation "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||||
testImplementation project(':mockserver')
|
testImplementation project(':mockserver')
|
||||||
testImplementation "org.koin:koin-test:$koin_version"
|
testImplementation "io.insert-koin:koin-test-junit5:$koin_version"
|
||||||
testImplementation "org.skyscreamer:jsonassert:$testing_json_assert_version"
|
testImplementation "org.skyscreamer:jsonassert:$testing_json_assert_version"
|
||||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$testing_junit5_version"
|
||||||
}
|
}
|
||||||
|
|
@ -50,7 +50,7 @@ private fun contentModule() = module {
|
||||||
|
|
||||||
private fun sessionlessNetworkingModule(baseUrl: BaseUrl, enableLogging: Boolean) = module {
|
private fun sessionlessNetworkingModule(baseUrl: BaseUrl, enableLogging: Boolean) = module {
|
||||||
factory { MoshiConverterFactory.create() }
|
factory { MoshiConverterFactory.create() }
|
||||||
single(qualifier = sessionless, override = true) {
|
single(qualifier = sessionless) {
|
||||||
OkHttpClient.Builder()
|
OkHttpClient.Builder()
|
||||||
.addInterceptor(PlatformInterceptor())
|
.addInterceptor(PlatformInterceptor())
|
||||||
.setupLogging(enableLogging)
|
.setupLogging(enableLogging)
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import org.skyscreamer.jsonassert.JSONCompareMode
|
||||||
import java.io.BufferedReader
|
import java.io.BufferedReader
|
||||||
import java.io.InputStreamReader
|
import java.io.InputStreamReader
|
||||||
|
|
||||||
|
@Disabled("CodeKata")
|
||||||
class CodeKataLoginRemoteSourceTest {
|
class CodeKataLoginRemoteSourceTest {
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import org.koin.test.KoinTest
|
||||||
import org.koin.test.inject
|
import org.koin.test.inject
|
||||||
import org.mockito.kotlin.*
|
import org.mockito.kotlin.*
|
||||||
|
|
||||||
|
@Disabled("CodeKata")
|
||||||
class CodeKataSessionExpirationTest : KoinTest {
|
class CodeKataSessionExpirationTest : KoinTest {
|
||||||
|
|
||||||
private val sut by inject<ContentRemoteSource>()
|
private val sut by inject<ContentRemoteSource>()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue