diff --git a/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/core/DataConnectGrpcMetadataUnitTest.kt b/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/core/DataConnectGrpcMetadataUnitTest.kt index 772caf9af07..a7da2670489 100644 --- a/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/core/DataConnectGrpcMetadataUnitTest.kt +++ b/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/core/DataConnectGrpcMetadataUnitTest.kt @@ -19,6 +19,8 @@ import android.os.Build import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.firebase.dataconnect.BuildConfig import com.google.firebase.dataconnect.FirebaseDataConnect.CallerSdkType +import com.google.firebase.dataconnect.core.DataConnectAppCheck.GetAppCheckTokenResult +import com.google.firebase.dataconnect.core.DataConnectAuth.GetAuthTokenResult import com.google.firebase.dataconnect.testutil.FirebaseAppUnitTestingRule import com.google.firebase.dataconnect.testutil.property.arbitrary.appCheckTokenResult import com.google.firebase.dataconnect.testutil.property.arbitrary.authTokenResult @@ -31,9 +33,12 @@ import io.kotest.matchers.collections.shouldNotContain import io.kotest.matchers.shouldBe import io.kotest.matchers.types.shouldBeSameInstanceAs import io.kotest.property.Arb +import io.kotest.property.Exhaustive import io.kotest.property.arbitrary.constant import io.kotest.property.arbitrary.enum import io.kotest.property.arbitrary.next +import io.kotest.property.checkAll +import io.kotest.property.exhaustive.of import io.mockk.coEvery import io.mockk.mockk import kotlinx.coroutines.test.runTest @@ -160,24 +165,33 @@ class DataConnectGrpcMetadataUnitTest { @Test fun `should omit x-firebase-auth-token when the auth token is null`() = runTest { - val dataConnectAuth: DataConnectAuth = mockk() - coEvery { dataConnectAuth.getToken(any()) } returns null - val dataConnectGrpcMetadata = - Arb.dataConnect - .dataConnectGrpcMetadata(dataConnectAuth = Arb.constant(dataConnectAuth)) - .next() - val requestId = Arb.dataConnect.requestId().next() - val callerSdkType = Arb.enum().next() + val getAuthTokenResults: Exhaustive = + Exhaustive.of( + null, + Arb.dataConnect.authTokenResult(accessToken = Arb.constant(null)).next(), + ) - val metadata = dataConnectGrpcMetadata.get(requestId, callerSdkType) + checkAll(getAuthTokenResults) { getAuthTokenResult -> + val dataConnectAuth: DataConnectAuth = mockk() + coEvery { dataConnectAuth.getToken(any()) } returns getAuthTokenResult + val dataConnectGrpcMetadata = + Arb.dataConnect + .dataConnectGrpcMetadata(dataConnectAuth = Arb.constant(dataConnectAuth)) + .next() + val requestId = Arb.dataConnect.requestId().next() + val callerSdkType = Arb.enum().next() - metadata.asClue { it.keys() shouldNotContain "x-firebase-auth-token" } + val metadata = dataConnectGrpcMetadata.get(requestId, callerSdkType) + + metadata.asClue { it.keys() shouldNotContain "x-firebase-auth-token" } + } } @Test fun `should include x-firebase-auth-token when the auth token is not null`() = runTest { val dataConnectAuth: DataConnectAuth = mockk() - val authTokenResult = Arb.dataConnect.authTokenResult().next() + val authTokenResult = + Arb.dataConnect.authTokenResult(accessToken = Arb.dataConnect.accessToken()).next() coEvery { dataConnectAuth.getToken(any()) } returns authTokenResult val dataConnectGrpcMetadata = Arb.dataConnect @@ -197,24 +211,33 @@ class DataConnectGrpcMetadataUnitTest { @Test fun `should omit x-firebase-appcheck when the AppCheck token is null`() = runTest { - val dataConnectAppCheck: DataConnectAppCheck = mockk { - coEvery { getToken(any()) } returns null - } - val dataConnectGrpcMetadata = - Arb.dataConnect - .dataConnectGrpcMetadata(dataConnectAppCheck = Arb.constant(dataConnectAppCheck)) - .next() - val requestId = Arb.dataConnect.requestId().next() - val callerSdkType = Arb.enum().next() + val getAppCheckTokenResults: Exhaustive = + Exhaustive.of( + null, + Arb.dataConnect.appCheckTokenResult(accessToken = Arb.constant(null)).next(), + ) - val metadata = dataConnectGrpcMetadata.get(requestId, callerSdkType) + checkAll(getAppCheckTokenResults) { getAppCheckTokenResult -> + val dataConnectAppCheck: DataConnectAppCheck = mockk { + coEvery { getToken(any()) } returns getAppCheckTokenResult + } + val dataConnectGrpcMetadata = + Arb.dataConnect + .dataConnectGrpcMetadata(dataConnectAppCheck = Arb.constant(dataConnectAppCheck)) + .next() + val requestId = Arb.dataConnect.requestId().next() + val callerSdkType = Arb.enum().next() - metadata.asClue { it.keys() shouldNotContain "x-firebase-appcheck" } + val metadata = dataConnectGrpcMetadata.get(requestId, callerSdkType) + + metadata.asClue { it.keys() shouldNotContain "x-firebase-appcheck" } + } } @Test fun `should include x-firebase-appcheck when the AppCheck token is not null`() = runTest { - val appCheckTokenResult = Arb.dataConnect.appCheckTokenResult().next() + val appCheckTokenResult = + Arb.dataConnect.appCheckTokenResult(accessToken = Arb.dataConnect.accessToken()).next() val dataConnectAppCheck: DataConnectAppCheck = mockk { coEvery { getToken(any()) } returns appCheckTokenResult } diff --git a/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/testutil/property/arbitrary/arbs.kt b/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/testutil/property/arbitrary/arbs.kt index 6d66f01fa88..dafcf7e7e21 100644 --- a/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/testutil/property/arbitrary/arbs.kt +++ b/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/testutil/property/arbitrary/arbs.kt @@ -333,9 +333,9 @@ internal inline fun DataConnectArb.operationRefConstru } internal fun DataConnectArb.authTokenResult( - accessToken: Arb = accessToken() + accessToken: Arb = accessToken().orNull(nullProbability = 0.33), ): Arb = accessToken.map { GetAuthTokenResult(it) } internal fun DataConnectArb.appCheckTokenResult( - accessToken: Arb = accessToken() + accessToken: Arb = accessToken().orNull(nullProbability = 0.33), ): Arb = accessToken.map { GetAppCheckTokenResult(it) }