app: debug-only Hilt bindings of every :core:model interface to the fakes (temporary until M8)

Features' @HiltViewModel classes need bindings in :app's graph; until M8 binds :data, debug builds bind
FakeRepositories(FakeScenarios.empty). Debug source set only; M8 deletes the file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
2026-10-18 10:35:17 +02:00
parent 9ee67d4c64
commit a41f240873
@@ -0,0 +1,53 @@
// Temporary until M8 binds :data; M8 deletes this file.
package se.hagstedt.kvitt.debug
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import se.hagstedt.kvitt.fakes.FakeRepositories
import se.hagstedt.kvitt.fakes.FakeScenarios
import se.hagstedt.kvitt.model.AboutRepository
import se.hagstedt.kvitt.model.AccountRepository
import se.hagstedt.kvitt.model.AnalyticsRepository
import se.hagstedt.kvitt.model.CategoryRepository
import se.hagstedt.kvitt.model.ConnectivityRepository
import se.hagstedt.kvitt.model.DeviceRepository
import se.hagstedt.kvitt.model.ExpenseRepository
import se.hagstedt.kvitt.model.HomeRepository
import se.hagstedt.kvitt.model.InviteRepository
import se.hagstedt.kvitt.model.ProfileRepository
import se.hagstedt.kvitt.model.RecurringRepository
import se.hagstedt.kvitt.model.SessionRepository
import se.hagstedt.kvitt.model.SettlementRepository
import se.hagstedt.kvitt.model.SyncRepository
import se.hagstedt.kvitt.model.UpdateRepository
import javax.inject.Singleton
/**
* Debug builds only (src/debug): binds every `:core:model` repository interface of SPEC §14.2.4 to one set of fakes at
* [FakeScenarios.empty], so the features' `@HiltViewModel`s have bindings in the debug graph before M8 binds `:data`.
* Fakes never reach a release build: this source set and `debugImplementation(project(":core:fakes"))` are debug only.
*/
@Module
@InstallIn(SingletonComponent::class)
object DebugFakesModule {
@Provides @Singleton
fun fakes(): FakeRepositories = FakeRepositories(FakeScenarios.empty)
@Provides fun session(f: FakeRepositories): SessionRepository = f.session
@Provides fun home(f: FakeRepositories): HomeRepository = f.home
@Provides fun accounts(f: FakeRepositories): AccountRepository = f.accounts
@Provides fun expenses(f: FakeRepositories): ExpenseRepository = f.expenses
@Provides fun settlements(f: FakeRepositories): SettlementRepository = f.settlements
@Provides fun analytics(f: FakeRepositories): AnalyticsRepository = f.analytics
@Provides fun profile(f: FakeRepositories): ProfileRepository = f.profile
@Provides fun categories(f: FakeRepositories): CategoryRepository = f.categories
@Provides fun recurring(f: FakeRepositories): RecurringRepository = f.recurring
@Provides fun devices(f: FakeRepositories): DeviceRepository = f.devices
@Provides fun invites(f: FakeRepositories): InviteRepository = f.invites
@Provides fun sync(f: FakeRepositories): SyncRepository = f.sync
@Provides fun update(f: FakeRepositories): UpdateRepository = f.update
@Provides fun about(f: FakeRepositories): AboutRepository = f.about
@Provides fun connectivity(f: FakeRepositories): ConnectivityRepository = f.connectivity
}