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:
Jens Reinemann 2026-05-13 23:31:42 +02:00
parent b719739451
commit 7380dbbdea
2 changed files with 83 additions and 0 deletions

View file

@ -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)
}
}

View 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()
}