Skip to content

Commit

Permalink
MBL-1380: Reward is showing as available for late pledges despite not…
Browse files Browse the repository at this point in the history
… being available (#2027)
  • Loading branch information
Arkariang authored Apr 30, 2024
1 parent a063f8d commit 7eeb4f9
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import com.kickstarter.libs.Environment
import com.kickstarter.libs.utils.RewardUtils
import com.kickstarter.libs.utils.extensions.isBacked
import com.kickstarter.mock.factories.RewardFactory
import com.kickstarter.models.Backing
Expand Down Expand Up @@ -176,9 +177,10 @@ class RewardsSelectionViewModel(environment: Environment) : ViewModel() {
private suspend fun emitCurrentState(
showAlertDialog: Boolean = false
) {
val filteredRewards = currentProjectData.project().rewards()?.filter { RewardUtils.isNoReward(it) || it.isAvailable() } ?: listOf()
mutableRewardSelectionUIState.emit(
RewardSelectionUIState(
rewardList = currentProjectData.project().rewards() ?: listOf(),
rewardList = filteredRewards,
initialRewardIndex = indexOfBackedReward,
project = currentProjectData,
showAlertDialog = showAlertDialog,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
fun test_providing_project_should_initialize_UIState() = runTest {
createViewModel()

val testRewards = (0..5).map { Reward.builder().title("$it").id(it.toLong()).build() }
val testRewards = (0..5).map { Reward.builder().title("$it").id(it.toLong()).isAvailable(true).build() }
val testBacking =
Backing.builder().reward(testRewards[2]).rewardId(testRewards[2].id()).build()
val testProject = Project.builder().rewards(testRewards).backing(testBacking).build()
Expand Down Expand Up @@ -65,7 +65,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards =
(0..5).map { Reward.builder().title("$it").id(it.toLong()).hasAddons(true).build() }
(0..5).map { Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(true).build() }
val testProject = Project.builder().rewards(testRewards).build()
val testProjectData = ProjectData.builder().project(testProject).build()

Expand Down Expand Up @@ -111,7 +111,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards =
(0..5).map { Reward.builder().title("$it").id(it.toLong()).hasAddons(false).build() }
(0..5).map { Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(false).build() }
val testProject = Project.builder().rewards(testRewards).build()
val testProjectData = ProjectData.builder().project(testProject).build()

Expand Down Expand Up @@ -157,7 +157,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards =
(0..5).map { Reward.builder().title("$it").id(it.toLong()).hasAddons(true).build() }
(0..5).map { Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(true).build() }
val testBacking =
Backing.builder().reward(testRewards[2]).rewardId(testRewards[2].id()).build()
val testProject =
Expand Down Expand Up @@ -207,7 +207,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards =
(0..5).map { Reward.builder().title("$it").id(it.toLong()).hasAddons(true).build() }
(0..5).map { Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(true).build() }
val testBacking =
Backing.builder().reward(testRewards[3]).rewardId(testRewards[3].id()).build()
val testProject =
Expand Down Expand Up @@ -257,7 +257,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards =
(0..5).map { Reward.builder().title("$it").id(it.toLong()).hasAddons(it != 2).build() }
(0..5).map { Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(it != 2).build() }
val testBacking =
Backing.builder().reward(testRewards[3]).rewardId(testRewards[3].id()).build()
val testProject =
Expand Down Expand Up @@ -313,7 +313,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards =
(0..5).map { Reward.builder().title("$it").id(it.toLong()).hasAddons(false).build() }
(0..5).map { Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(false).build() }
val testBacking =
Backing.builder().reward(testRewards[3]).rewardId(testRewards[3].id()).build()
val testProject =
Expand Down Expand Up @@ -364,7 +364,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards = (0..5).map {
Reward.builder().title("$it").id(it.toLong()).hasAddons(true).shippingType("$it")
Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(true).shippingType("$it")
.build()
}
val testBacking =
Expand Down Expand Up @@ -422,7 +422,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards = (0..5).map {
Reward.builder().title("$it").id(it.toLong()).hasAddons(true).shippingType("$it")
Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(true).shippingType("$it")
.build()
}
val testBacking =
Expand Down Expand Up @@ -489,7 +489,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards = (0..5).map {
Reward.builder().title("$it").id(it.toLong()).hasAddons(it != 2).shippingType("$it")
Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(it != 2).shippingType("$it")
.build()
}
val testBacking =
Expand Down Expand Up @@ -556,7 +556,7 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
createViewModel()

val testRewards = (0..5).map {
Reward.builder().title("$it").id(it.toLong()).hasAddons(it != 2).shippingType("$it")
Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(it != 2).shippingType("$it")
.build()
}
val testBacking =
Expand Down Expand Up @@ -623,6 +623,46 @@ class RewardsSelectionViewModelTest : KSRobolectricTestCase() {
this@RewardsSelectionViewModelTest.segmentTrack.assertValue(EventName.CTA_CLICKED.eventName)
}

@Test
fun `Test rewards list when given a list of rewards that contains unavailable rewards will produce a list of rewards with only rewards available`() = runTest {
createViewModel()
val testRewards = (0..8).map {
if (it % 2 == 0)
Reward.builder().title("$it").id(it.toLong()).isAvailable(true).hasAddons(it != 2).shippingType("$it")
.build()
else
Reward.builder().title("$it").id(it.toLong()).isAvailable(false).hasAddons(it != 2).shippingType("$it")
.build()
}

val testProject = Project.builder().rewards(testRewards).build()
val testProjectData = ProjectData.builder().project(testProject).build()

viewModel.provideProjectData(testProjectData)

val uiState = mutableListOf<RewardSelectionUIState>()
backgroundScope.launch(UnconfinedTestDispatcher(testScheduler)) {
viewModel.rewardSelectionUIState.toList(uiState)
}

val filteredRewards = testRewards.filter { it.isAvailable() }
assertEquals(uiState.size, 2)

// - make sure the uiState output reward list is filtered
assertEquals(
uiState.last(),
RewardSelectionUIState(
rewardList = filteredRewards,
initialRewardIndex = 0,
project = testProjectData,
showAlertDialog = false
)
)

// - make sure the uiState output reward list is not the same as the provided reward list
assertNotSame(uiState.last().rewardList, testRewards.size)
}

@Test
fun `test send analytic event trackRewardsCarouselViewed() when the currentPage is rewards and is expanded mode`() {
createViewModel()
Expand Down

0 comments on commit 7eeb4f9

Please sign in to comment.