Meshtastic-Android/core
James Rich 2afb82b600 test: migrate MigrationTest to runTest and add missing repository fakes
Part A — runBlocking → runTest
- Migrated all 5 runBlocking sites in core/database MigrationTest
  (@Before + 4 @Test bodies) to kotlinx.coroutines.test.runTest so
  test dispatchers are virtual-time aware and cancellation semantics
  match the rest of the suite.
- Left DatabaseManagerLegacyCleanupTest on runBlocking: it polls with
  delay(100) for async cleanup that runs on Dispatchers.IO. runTest's
  virtual-time delay would collapse instantly and race the real IO
  cleanup, so runBlocking is the correct choice there.

Part B — missing repository fakes
Added five in-memory fakes in core:testing (pure Kotlin, MutableStateFlow
backed) that implement their repository interface exactly:
- FakeDeviceHardwareRepository      (DeviceHardwareRepository)
- FakeFirmwareReleaseRepository     (FirmwareReleaseRepository)
- FakeQuickChatActionRepository     (QuickChatActionRepository)
- FakeTracerouteSnapshotRepository  (TracerouteSnapshotRepository)
- FakeRadioConfigRepository         (RadioConfigRepository)

Each fake is exercised by a new test in
core/testing/src/commonTest/kotlin/.../RepositoryFakesTest.kt:
upsert/delete/reorder flows for quick-chat, seeded lookups +
call-recording for device hardware, stable/alpha emission for
firmware releases, snapshot round-trips for traceroute, and
channel-set mutations for radio config. PacketRepository was
skipped — 40+ members and a FakePacketRepository helper already
exists for informal use; left for a focused follow-up.

Validation (all green):
  ./gradlew spotlessApply spotlessCheck
  ./gradlew :core:testing:jvmTest :core:database:testAndroid
  ./gradlew detekt kmpSmokeCompile

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 11:24:15 -05:00
..
api fix(build): resolve all actionable compile-time warnings (#5058) 2026-04-10 22:42:30 +00:00
barcode fix(build): align AndroidX Compose versions with CMP and migrate to runComposeUiTest (#5096) 2026-04-13 02:49:11 +00:00
ble chore: KMP audit — commonize code, centralize utilities, eliminate dead abstractions (#5133) 2026-04-15 02:17:50 +00:00
common chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
data feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
database test: migrate MigrationTest to runTest and add missing repository fakes 2026-04-17 11:24:15 -05:00
datastore refactor: modern APIs — Koin 4.2, CMP 1.11, Ktor resilience, Room @Upsert, injected dispatchers (#5119) 2026-04-14 11:41:01 +00:00
di refactor: BLE transport and UI for Kotlin Multiplatform unification (#4911) 2026-03-25 02:15:51 +00:00
domain feat: add high-contrast theme with accessible message bubbles (#5135) 2026-04-15 01:14:20 +00:00
model feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
navigation chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
network feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
nfc fix: harden reliability, clean up KMP compliance, and improve code quality (#5023) 2026-04-09 18:21:46 +00:00
prefs chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
proto chore(deps): update core/proto/src/main/proto digest to 4d5b500 (#5161) 2026-04-16 21:41:36 -05:00
repository feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
resources feat(mqtt): migrate to MQTTastic-Client-KMP (#5165) 2026-04-17 15:19:08 +00:00
service chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
takserver chore: review-cleanup fleet (audit + fix + hardening) (#5158) 2026-04-17 00:02:59 +00:00
testing test: migrate MigrationTest to runTest and add missing repository fakes 2026-04-17 11:24:15 -05:00
ui chore: KMP audit — commonize code, centralize utilities, eliminate dead abstractions (#5133) 2026-04-15 02:17:50 +00:00