From 33cab939f072052055b8931b99c39524e0997f40 Mon Sep 17 00:00:00 2001 From: darken Date: Mon, 29 Sep 2025 14:23:52 +0200 Subject: [PATCH] Refactor: Use DeviceProfilesRepo for keys This commit replaces the direct usage of GeneralSettings for fetching identity and encryption keys with the DeviceProfilesRepo. BaseAirPodsTest is updated to reflect this change, mocking DeviceProfilesRepo instead of GeneralSettings. --- .../capod/pods/core/apple/BaseAirPodsTest.kt | 29 ++++++------------- .../pods/core/apple/airpods/AirPodsProTest.kt | 12 ++++++-- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/BaseAirPodsTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/BaseAirPodsTest.kt index 52a87b05..0f67ea61 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/BaseAirPodsTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/BaseAirPodsTest.kt @@ -6,16 +6,17 @@ import eu.darken.capod.common.SystemClockWrap import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.fromHex import eu.darken.capod.common.serialization.SerializationModule -import eu.darken.capod.main.core.GeneralSettings import eu.darken.capod.pods.core.PodDevice import eu.darken.capod.pods.core.apple.protocol.ContinuityProtocol +import eu.darken.capod.profiles.core.DeviceProfile +import eu.darken.capod.profiles.core.DeviceProfilesRepo import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.mockk import io.mockk.mockkObject +import kotlinx.coroutines.flow.flowOf import org.junit.jupiter.api.BeforeEach import testhelpers.BaseTest -import testhelpers.preferences.mockFlowPreference import java.time.Instant import javax.inject.Singleton @@ -29,14 +30,14 @@ abstract class BaseAirPodsTest : BaseTest() { @Component.Factory interface Factory { fun create( - @BindsInstance generalSettings: GeneralSettings, + @BindsInstance profilesRepo: DeviceProfilesRepo, ): AppleFactoryTestComponent } } - val generalSettings = mockk().apply { - every { mainDeviceIdentityKey } returns mockFlowPreference(null) - every { mainDeviceEncryptionKey } returns mockFlowPreference(null) + val profileList = mutableListOf() + val profileRepo = mockk().apply { + every { profiles } returns flowOf(profileList) } private fun hexToByteArray(hex: String): ByteArray = hex @@ -44,23 +45,11 @@ abstract class BaseAirPodsTest : BaseTest() { .replace("<", "") .fromHex() - private fun cleanKey(key: String): ByteArray = hexToByteArray(key) + fun cleanKey(key: String): ByteArray = hexToByteArray(key) .also { require(it.size == 16) { "Not a valid key: ${it.size} byte" } } - fun setKeyIRK(key: String?) { - generalSettings.apply { - every { mainDeviceIdentityKey } returns mockFlowPreference(key?.let { cleanKey(it) }) - } - } - - fun setKeyEnc(key: String?) { - generalSettings.apply { - every { mainDeviceEncryptionKey } returns mockFlowPreference(key?.let { cleanKey(it) }) - } - } - val factory: AppleFactory = DaggerBaseAirPodsTest_AppleFactoryTestComponent.factory().create( - generalSettings = generalSettings + profilesRepo = profileRepo ).appleFactory @BeforeEach diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsProTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsProTest.kt index aedc527b..1ca36e07 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsProTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsProTest.kt @@ -4,6 +4,7 @@ import eu.darken.capod.common.toHex import eu.darken.capod.pods.core.PodDevice import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor +import eu.darken.capod.profiles.core.AppleDeviceProfile import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Test @@ -206,8 +207,15 @@ class AirPodsProTest : BaseAirPodsTest() { payload.public.data.toByteArray().toHex(" ") shouldBe "01 0E 20 51 9A 98 33 00 04" payload.private shouldBe null } - setKeyIRK("79-04-65-1E-E2-CC-D9-26-F2-6E-20-EE-3E-CC-DE-79") - setKeyEnc("3B-9C-80-57-E6-45-7F-F2-1B-8E-07-63-6C-99-E0-29") + + profileList.add( + AppleDeviceProfile( + label = "TestProfile", + identityKey = cleanKey("79-04-65-1E-E2-CC-D9-26-F2-6E-20-EE-3E-CC-DE-79"), + encryptionKey = cleanKey("3B-9C-80-57-E6-45-7F-F2-1B-8E-07-63-6C-99-E0-29") + ) + ) + create(data, address) { batteryLeftPodPercent shouldBe 0.98f isLeftPodCharging shouldBe false