summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/test
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2025-07-09 16:14:17 +0200
committerDavid Göransson <david.goransson@mullvad.net>2025-07-09 16:14:17 +0200
commit4d90ff4fd81b0692945df0c67e0e8074716c14f3 (patch)
treedc54697af312d65ff246d0fc3c07d5a44fd524af /android/app/src/test
parentab2cf79c4b36e7ecf0485e57c89b50738b4fc482 (diff)
parentb1020e692b5cb4dfefb77a75c34d4f6af569d41e (diff)
downloadmullvadvpn-4d90ff4fd81b0692945df0c67e0e8074716c14f3.tar.xz
mullvadvpn-4d90ff4fd81b0692945df0c67e0e8074716c14f3.zip
Merge branch 'billing-tests-are-flaky-droid-2075'
Diffstat (limited to 'android/app/src/test')
-rw-r--r--android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/AddTimeViewModelTest.kt33
1 files changed, 21 insertions, 12 deletions
diff --git a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/AddTimeViewModelTest.kt b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/AddTimeViewModelTest.kt
index 1b9c4a9ef3..f9497bd159 100644
--- a/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/AddTimeViewModelTest.kt
+++ b/android/app/src/test/kotlin/net/mullvad/mullvadvpn/viewmodel/AddTimeViewModelTest.kt
@@ -21,6 +21,7 @@ import net.mullvad.mullvadvpn.lib.model.TunnelState
import net.mullvad.mullvadvpn.lib.payment.model.PaymentAvailability
import net.mullvad.mullvadvpn.lib.payment.model.PaymentProduct
import net.mullvad.mullvadvpn.lib.payment.model.ProductId
+import net.mullvad.mullvadvpn.lib.payment.model.ProductPrice
import net.mullvad.mullvadvpn.lib.payment.model.PurchaseResult
import net.mullvad.mullvadvpn.lib.payment.model.VerificationResult
import net.mullvad.mullvadvpn.lib.shared.AccountRepository
@@ -78,12 +79,14 @@ class AddTimeViewModelTest {
@Test
fun `when paymentAvailability emits ErrorOther uiState should be null`() = runTest {
- // Arrange
- paymentAvailability.emit(PaymentAvailability.Error.Other(mockk()))
// Act, Assert
viewModel.uiState.test {
awaitItem() // Default state
+
+ // Emit an error with a mock exception
+ paymentAvailability.emit(PaymentAvailability.Error.Other(mockk()))
+
val result = awaitItem()
assertIs<Lc.Content<AddTimeUiState>>(result)
assertIs<PaymentState.Error.Generic>(result.value.billingPaymentState)
@@ -122,7 +125,7 @@ class AddTimeViewModelTest {
}
@Test
- fun `startBillingPayment should invoke purchaseProduct on PaymentUseCase`() {
+ fun `startBillingPayment should invoke purchaseProduct on PaymentUseCase`() = runTest {
// Arrange
val mockProductId = ProductId("MOCK")
val mockActivityProvider = mockk<() -> Activity>()
@@ -149,7 +152,7 @@ class AddTimeViewModelTest {
}
@Test
- fun `purchaseState error should invoke queryPaymentAvailability on PaymentUseCase`() {
+ fun `purchaseState error should invoke queryPaymentAvailability on PaymentUseCase`() = runTest {
// Arrange
val purchaseResultData = PurchaseResult.Error.VerificationError(Throwable())
@@ -161,25 +164,31 @@ class AddTimeViewModelTest {
}
@Test
- fun `resetPurchaseResult with success should invoke resetPurchaseResult on PaymentUseCase`() {
- // Arrange
+ fun `resetPurchaseResult with success should invoke resetPurchaseResult on PaymentUseCase`() =
+ runTest {
+ // Arrange
- // Act
- viewModel.resetPurchaseResult()
+ // Act
+ viewModel.resetPurchaseResult()
- // Assert
- coVerify { mockPaymentUseCase.resetPurchaseResult() }
- }
+ // Assert
+ coVerify { mockPaymentUseCase.resetPurchaseResult() }
+ }
@Test
fun `purchaseResult emitting Success should result in success dialog state`() = runTest {
// Arrange
- val result = PurchaseState.Success(ProductId("one_month"))
+ val productId = ProductId("one_month")
+ val paymentProduct =
+ PaymentProduct(productId = productId, price = ProductPrice("€5.00"), status = null)
+ val result = PurchaseState.Success(productId)
val purchaseResultData = PurchaseResult.Completed.Success(ProductId("one_month"))
// Act, Assert
viewModel.uiState.test {
awaitItem() // Default state
+ paymentAvailability.emit(PaymentAvailability.ProductsAvailable(listOf(paymentProduct)))
+ awaitItem()
purchaseResult.emit(purchaseResultData)
val item = awaitItem()
assertIs<Lc.Content<AddTimeUiState>>(item)