Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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<CallerSdkType>().next()
val getAuthTokenResults: Exhaustive<GetAuthTokenResult?> =
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<CallerSdkType>().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
Expand All @@ -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<CallerSdkType>().next()
val getAppCheckTokenResults: Exhaustive<GetAppCheckTokenResult?> =
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<CallerSdkType>().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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -333,9 +333,9 @@ internal inline fun <Data, reified Variables> DataConnectArb.operationRefConstru
}

internal fun DataConnectArb.authTokenResult(
accessToken: Arb<String> = accessToken()
accessToken: Arb<String?> = accessToken().orNull(nullProbability = 0.33),
): Arb<GetAuthTokenResult> = accessToken.map { GetAuthTokenResult(it) }

internal fun DataConnectArb.appCheckTokenResult(
accessToken: Arb<String> = accessToken()
accessToken: Arb<String?> = accessToken().orNull(nullProbability = 0.33),
): Arb<GetAppCheckTokenResult> = accessToken.map { GetAppCheckTokenResult(it) }