feat(di): Add DatabaseModule with Hilt providers for Room DB and DAOs (#19)
- DatabaseModule: @Module + @InstallIn(SingletonComponent) with @Singleton-scoped Room.databaseBuilder provider and four @Provides methods for ItemDao, CategoryDao, LocationDao and SettingsDao - DatabaseModuleTest: smoke-test verifies all four DAO providers return non-null objects using an in-memory Room database
This commit is contained in:
parent
b719739451
commit
7380dbbdea
2 changed files with 83 additions and 0 deletions
|
|
@ -0,0 +1,46 @@
|
|||
package de.krisenvorrat.app.di
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import de.krisenvorrat.app.data.db.KrisenvorratDatabase
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertNotNull
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
internal class DatabaseModuleTest {
|
||||
|
||||
private lateinit var db: KrisenvorratDatabase
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
if (::db.isInitialized) {
|
||||
db.close()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun test_provideAllDaos_withInMemoryDb_allDaosAreNonNull() {
|
||||
// Given
|
||||
val context = ApplicationProvider.getApplicationContext<Context>()
|
||||
val module = DatabaseModule
|
||||
|
||||
// When
|
||||
db = Room.inMemoryDatabaseBuilder(context, KrisenvorratDatabase::class.java)
|
||||
.allowMainThreadQueries()
|
||||
.build()
|
||||
val itemDao = module.provideItemDao(db)
|
||||
val categoryDao = module.provideCategoryDao(db)
|
||||
val locationDao = module.provideLocationDao(db)
|
||||
val settingsDao = module.provideSettingsDao(db)
|
||||
|
||||
// Then
|
||||
assertNotNull(itemDao)
|
||||
assertNotNull(categoryDao)
|
||||
assertNotNull(locationDao)
|
||||
assertNotNull(settingsDao)
|
||||
}
|
||||
}
|
||||
37
app/src/main/java/de/krisenvorrat/app/di/DatabaseModule.kt
Normal file
37
app/src/main/java/de/krisenvorrat/app/di/DatabaseModule.kt
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
package de.krisenvorrat.app.di
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Room
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import de.krisenvorrat.app.data.db.KrisenvorratDatabase
|
||||
import de.krisenvorrat.app.data.db.dao.CategoryDao
|
||||
import de.krisenvorrat.app.data.db.dao.ItemDao
|
||||
import de.krisenvorrat.app.data.db.dao.LocationDao
|
||||
import de.krisenvorrat.app.data.db.dao.SettingsDao
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
internal object DatabaseModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideDatabase(@ApplicationContext context: Context): KrisenvorratDatabase =
|
||||
Room.databaseBuilder(context, KrisenvorratDatabase::class.java, "krisenvorrat.db").build()
|
||||
|
||||
@Provides
|
||||
fun provideItemDao(db: KrisenvorratDatabase): ItemDao = db.itemDao()
|
||||
|
||||
@Provides
|
||||
fun provideCategoryDao(db: KrisenvorratDatabase): CategoryDao = db.categoryDao()
|
||||
|
||||
@Provides
|
||||
fun provideLocationDao(db: KrisenvorratDatabase): LocationDao = db.locationDao()
|
||||
|
||||
@Provides
|
||||
fun provideSettingsDao(db: KrisenvorratDatabase): SettingsDao = db.settingsDao()
|
||||
}
|
||||
Loading…
Reference in a new issue