all: move all Hilt processing to app module

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2021-02-20 14:08:59 +05:30
parent cff16d17b5
commit 027e3410d8
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
9 changed files with 29 additions and 18 deletions

View file

@ -1,52 +0,0 @@
package dev.msfjarvis.lobsters.injection
import com.squareup.moshi.Moshi
import dagger.Lazy
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dev.msfjarvis.lobsters.data.api.LobstersApi
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.create
@Module
@InstallIn(SingletonComponent::class)
object ApiModule {
@Provides
@BaseUrlQualifier
fun provideBaseUrl(): String {
return LobstersApi.BASE_URL
}
@Provides
fun provideClient(): OkHttpClient {
return OkHttpClient.Builder()
.build()
}
/**
* Using [Lazy] here is a trick I picked up from Zac Sweers, which he explained in more
* detail here: https://www.zacsweers.dev/dagger-party-tricks-deferred-okhttp-init/
*/
@Provides
fun provideRetrofit(
client: Lazy<OkHttpClient>,
moshi: Lazy<Moshi>,
@BaseUrlQualifier baseUrl: String
): Retrofit {
return Retrofit.Builder()
.client(client.get())
.baseUrl(baseUrl)
.addConverterFactory(MoshiConverterFactory.create(moshi.get()))
.build()
}
@Provides
fun provideApi(retrofit: Retrofit): LobstersApi {
return retrofit.create()
}
}

View file

@ -1,11 +0,0 @@
package dev.msfjarvis.lobsters.injection
import javax.inject.Qualifier
/**
* Qualifier for a string value that needs to be provided to the [ApiModule.provideRetrofit] method
* as the base URL of our API.
*/
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class BaseUrlQualifier

View file

@ -1,31 +0,0 @@
package dev.msfjarvis.lobsters.injection
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.Moshi
import com.squareup.moshi.adapter
import dagger.Module
import dagger.Provides
import dagger.Reusable
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dev.msfjarvis.lobsters.model.Submitter
import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory
@Module
@InstallIn(SingletonComponent::class)
object MoshiModule {
@Provides
@Reusable
fun provideMoshi(): Moshi {
return Moshi.Builder()
.add(MetadataKotlinJsonAdapterFactory())
.build()
}
@OptIn(ExperimentalStdlibApi::class)
@Provides
@Reusable
fun provideSubmitterJsonAdapter(moshi: Moshi): JsonAdapter<Submitter> {
return moshi.adapter()
}
}

View file

@ -1,31 +1,39 @@
package dev.msfjarvis.lobsters.data.api
import dev.msfjarvis.lobsters.injection.ApiModule
import dev.msfjarvis.lobsters.injection.MoshiModule
import com.squareup.moshi.Moshi
import dev.msfjarvis.lobsters.util.TestUtils
import dev.zacsweers.moshix.reflect.MetadataKotlinJsonAdapterFactory
import kotlinx.coroutines.runBlocking
import mockwebserver3.Dispatcher
import mockwebserver3.MockResponse
import mockwebserver3.MockWebServer
import mockwebserver3.RecordedRequest
import okhttp3.OkHttpClient
import org.junit.AfterClass
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.BeforeClass
import org.junit.Test
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.create
class LobstersApiTest {
companion object {
private val webServer = MockWebServer()
private val apiData = TestUtils.getJson("hottest.json")
private val okHttp = ApiModule.provideClient()
private val retrofit = ApiModule.provideRetrofit(
{ okHttp },
{ MoshiModule.provideMoshi() },
"http://localhost:8080/"
)
private val apiClient = ApiModule.provideApi(retrofit)
private val moshi = Moshi.Builder()
.add(MetadataKotlinJsonAdapterFactory())
.build()
private val okHttp = OkHttpClient.Builder()
.build()
private val retrofit = Retrofit.Builder()
.client(okHttp)
.baseUrl("http://localhost:8080/")
.addConverterFactory(MoshiConverterFactory.create(moshi))
.build()
private val apiClient = retrofit.create<LobstersApi>()
@JvmStatic
@BeforeClass