Skip to content

Instantly share code, notes, and snippets.

View prokash-sarkar's full-sized avatar
🎯
Focusing

Prokash Sarkar prokash-sarkar

🎯
Focusing
View GitHub Profile
@Module()
interface ActivityBuildersModule {
@ActivityScope
@ContributesAndroidInjector(modules = [LoginModule::class, LoginFragmentsBuilderModule::class])
fun contributeMainActivity(): MainActivity
}
@Module
class AppModule {
@Singleton
@Provides
fun provideTasksRemoteDataSource(
apiService: ApiService
): DataSource {
return RemoteDataSource(apiService)
}
}
@Module
interface AppModuleBinds {
@Singleton
@Binds
fun bindRepository(defaultDataRepository: DefaultDataRepository): DataRepository
}
@Module
class NetworkModule {
@Singleton
@Provides
fun provideHttpLoggingInterceptor(): HttpLoggingInterceptor {
return HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY)
}
@Singleton
@Provides
@Singleton
@Component(
modules = [
AndroidInjectionModule::class, NetworkModule::class,
AppModule::class, AppModuleBinds::class,
ViewModelBuilderModule::class, ActivityBuildersModule::class
]
)
interface AppComponent : AndroidInjector<DaggerApplication> {
@Component.Factory
open class BaseApplication : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return initializeDaggerComponent()
}
open fun initializeDaggerComponent(): AppComponent {
val component: AppComponent = DaggerAppComponent.factory()
.create(this)
component.inject(this)
return component
}
class DefaultDataRepositoryTest {
private val remoteDataSource: DataSource = mockk()
private lateinit var dataRepository: DefaultDataRepository
@Before
fun setup() {
dataRepository = DefaultDataRepository(remoteDataSource)
}
@ExperimentalCoroutinesApi
@Module
class TestAppModule {
@Singleton
@Provides
fun provideTasksRemoteDataSource(
apiService: ApiService
): DataSource {
return mockk()
}
}
@Singleton
@Component(
modules = [
AndroidInjectionModule::class, NetworkModule::class,
TestAppModule::class, AppModuleBinds::class,
ViewModelBuilderModule::class, ActivityBuildersModule::class
]
)
interface TestAppComponent : AppComponent {
@Component.Factory
class TestBaseApplication : BaseApplication() {
override fun initializeDaggerComponent(): AppComponent {
val component: TestAppComponent = DaggerTestAppComponent.factory()
.create(this)
component.inject(this)
return component
}
}