diff --git a/app/src/main/java/dev/msfjarvis/lobsters/MainActivity.kt b/app/src/main/java/dev/msfjarvis/lobsters/MainActivity.kt index ab159edf..9780be37 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/MainActivity.kt @@ -20,9 +20,6 @@ import dev.msfjarvis.lobsters.ui.LobstersItem import dev.msfjarvis.lobsters.ui.LobstersTheme import dev.msfjarvis.lobsters.urllauncher.UrlLauncher import kotlinx.coroutines.launch -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response import javax.inject.Inject val UrlLauncherAmbient = ambientOf { error("Needs to be provided") } @@ -40,20 +37,7 @@ class MainActivity : AppCompatActivity() { val coroutineScope = rememberCoroutineScope() val posts = mutableStateListOf() coroutineScope.launch { - apiClient.getHottestPosts().enqueue(object : Callback> { - override fun onResponse( - call: Call>, - response: Response> - ) { - if (response.isSuccessful) { - response.body()?.let { posts.addAll(it) } - } - } - - override fun onFailure(call: Call>, t: Throwable) { - TODO("Not yet implemented") - } - }) + posts.addAll(apiClient.getHottestPosts()) } LobstersApp(posts) } diff --git a/lobsters-api/build.gradle b/lobsters-api/build.gradle index 7c1d953e..4de188c3 100644 --- a/lobsters-api/build.gradle +++ b/lobsters-api/build.gradle @@ -7,10 +7,11 @@ dependencies { def moshi_version = "1.9.3" def retrofit_version = "2.9.0" implementation project(":model") - api "com.squareup.retrofit2:retrofit:$retrofit_version" + implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version" kaptTest "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version" testImplementation 'junit:junit:4.13' + testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9" // retrofit uses 3.14.9, so shall we. //noinspection GradleDependency testImplementation "com.squareup.okhttp3:mockwebserver:3.14.9" diff --git a/lobsters-api/src/main/java/dev/msfjarvis/lobsters/api/LobstersApi.kt b/lobsters-api/src/main/java/dev/msfjarvis/lobsters/api/LobstersApi.kt index 5422bc7a..f90b4e1b 100644 --- a/lobsters-api/src/main/java/dev/msfjarvis/lobsters/api/LobstersApi.kt +++ b/lobsters-api/src/main/java/dev/msfjarvis/lobsters/api/LobstersApi.kt @@ -1,10 +1,9 @@ package dev.msfjarvis.lobsters.api import dev.msfjarvis.lobsters.model.LobstersPost -import retrofit2.Call import retrofit2.http.GET interface LobstersApi { @GET("hottest.json") - fun getHottestPosts(): Call> + suspend fun getHottestPosts(): List } diff --git a/lobsters-api/src/test/java/dev/msfjarvis/lobsters/api/LobstersApiTest.kt b/lobsters-api/src/test/java/dev/msfjarvis/lobsters/api/LobstersApiTest.kt index 2e0305b7..9e567ce9 100644 --- a/lobsters-api/src/test/java/dev/msfjarvis/lobsters/api/LobstersApiTest.kt +++ b/lobsters-api/src/test/java/dev/msfjarvis/lobsters/api/LobstersApiTest.kt @@ -1,18 +1,14 @@ package dev.msfjarvis.lobsters.api -import dev.msfjarvis.lobsters.model.LobstersPost +import kotlinx.coroutines.runBlocking import okhttp3.mockwebserver.Dispatcher import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.RecordedRequest import org.junit.After import org.junit.Assert.assertEquals -import org.junit.Assert.fail import org.junit.Before import org.junit.Test -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response class LobstersApiTest { private val webServer = MockWebServer() @@ -30,21 +26,9 @@ class LobstersApiTest { } @Test - fun `api gets correct number of items`() { - apiClient.getHottestPosts().enqueue(object : Callback> { - override fun onResponse( - call: Call>, - response: Response> - ) { - val posts = response.body() - require(posts != null) - assertEquals(25, posts.size) - } - - override fun onFailure(call: Call>, t: Throwable) { - fail("Call cannot fail in tests") - } - }) + fun `api gets correct number of items`() = runBlocking { + val posts = apiClient.getHottestPosts() + assertEquals(25, posts.size) } @After