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