Bug 1851711 - Update highlights bottom fade and show more button visibility behaviour

fenix/119.0
rahulsainani 9 months ago committed by mergify[bot]
parent 82e53fc465
commit 26e69920df

@ -82,6 +82,13 @@ sealed interface ReviewQualityCheckState : State {
"reviewGrade, adjustedRating or highlights is not null"
}
}
val showMoreButtonVisible: Boolean =
highlights != null && highlights != highlights.forCompactMode()
val highlightsFadeVisible: Boolean =
highlights != null && showMoreButtonVisible &&
highlights.forCompactMode().entries.first().value.size > 1
}
}
}

@ -94,6 +94,8 @@ fun ProductAnalysis(
if (productAnalysis.highlights != null) {
HighlightsCard(
highlights = productAnalysis.highlights,
highlightsFadeVisible = productAnalysis.highlightsFadeVisible,
showMoreButtonVisible = productAnalysis.showMoreButtonVisible,
modifier = Modifier.fillMaxWidth(),
)
}
@ -192,6 +194,8 @@ private fun AdjustedProductRatingCard(
@Composable
private fun HighlightsCard(
highlights: Map<HighlightType, List<String>>,
highlightsFadeVisible: Boolean,
showMoreButtonVisible: Boolean,
modifier: Modifier = Modifier,
) {
ReviewQualityCheckCard(modifier = modifier) {
@ -243,7 +247,7 @@ private fun HighlightsCard(
targetState = isExpanded,
label = "HighlightsCard-Crossfade",
) { expanded ->
if (expanded.not()) {
if (expanded.not() && highlightsFadeVisible) {
Spacer(
modifier = Modifier
.height(32.dp)
@ -261,16 +265,18 @@ private fun HighlightsCard(
}
}
Spacer(modifier = Modifier.height(8.dp))
if (showMoreButtonVisible) {
Spacer(modifier = Modifier.height(8.dp))
SecondaryButton(
text = if (isExpanded) {
stringResource(R.string.review_quality_check_highlights_show_less)
} else {
stringResource(R.string.review_quality_check_highlights_show_more)
},
onClick = { isExpanded = isExpanded.not() },
)
SecondaryButton(
text = if (isExpanded) {
stringResource(R.string.review_quality_check_highlights_show_less)
} else {
stringResource(R.string.review_quality_check_highlights_show_more)
},
onClick = { isExpanded = isExpanded.not() },
)
}
}
}

@ -5,7 +5,9 @@
package org.mozilla.fenix.shopping.store
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertThrows
import org.junit.Assert.assertTrue
import org.junit.Test
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductReviewState.AnalysisPresent
@ -123,4 +125,137 @@ class ReviewQualityCheckStateTest {
assert(gradePresent.isSuccess)
assert(highlightsPresent.isSuccess)
}
@Test
fun `WHEN AnalysisPresent has more than 2 highlights snippets THEN show more button and highlights fade are visible`() {
val highlights = sortedMapOf(
ReviewQualityCheckState.HighlightType.QUALITY to listOf(
"High quality",
"Excellent craftsmanship",
"Superior materials",
),
ReviewQualityCheckState.HighlightType.PRICE to listOf(
"Affordable prices",
"Great value for money",
"Discounted offers",
),
ReviewQualityCheckState.HighlightType.SHIPPING to listOf(
"Fast and reliable shipping",
"Free shipping options",
"Express delivery",
),
ReviewQualityCheckState.HighlightType.PACKAGING_AND_APPEARANCE to listOf(
"Elegant packaging",
"Attractive appearance",
"Beautiful design",
),
ReviewQualityCheckState.HighlightType.COMPETITIVENESS to listOf(
"Competitive pricing",
"Strong market presence",
"Unbeatable deals",
),
)
val analysis = AnalysisPresent(
productId = "1",
reviewGrade = ReviewQualityCheckState.Grade.A,
needsAnalysis = false,
adjustedRating = 4.2f,
productUrl = "",
highlights = highlights,
)
assertTrue(analysis.highlightsFadeVisible)
assertTrue(analysis.showMoreButtonVisible)
}
@Test
fun `WHEN AnalysisPresent has exactly 1 highlights snippet THEN show more button and highlights fade are not visible`() {
val highlights = sortedMapOf(
ReviewQualityCheckState.HighlightType.PRICE to listOf("Affordable prices"),
)
val analysis = AnalysisPresent(
productId = "1",
reviewGrade = ReviewQualityCheckState.Grade.A,
needsAnalysis = false,
adjustedRating = 4.2f,
productUrl = "",
highlights = highlights,
)
assertFalse(analysis.highlightsFadeVisible)
assertFalse(analysis.showMoreButtonVisible)
}
@Test
fun `WHEN AnalysisPresent has exactly 2 highlights snippets THEN show more button and highlights fade are not visible`() {
val highlights = sortedMapOf(
ReviewQualityCheckState.HighlightType.SHIPPING to listOf(
"Fast and reliable shipping",
"Free shipping options",
),
)
val analysis = AnalysisPresent(
productId = "1",
reviewGrade = ReviewQualityCheckState.Grade.A,
needsAnalysis = false,
adjustedRating = 4.2f,
productUrl = "",
highlights = highlights,
)
assertFalse(analysis.highlightsFadeVisible)
assertFalse(analysis.showMoreButtonVisible)
}
@Test
fun `WHEN AnalysisPresent has a single highlights section and the section has more than 2 snippets THEN show more button and highlights fade are visible`() {
val highlights = sortedMapOf(
ReviewQualityCheckState.HighlightType.SHIPPING to listOf(
"Fast and reliable shipping",
"Free shipping options",
"Express delivery",
),
)
val analysis = AnalysisPresent(
productId = "1",
reviewGrade = ReviewQualityCheckState.Grade.A,
needsAnalysis = false,
adjustedRating = 4.2f,
productUrl = "",
highlights = highlights,
)
assertTrue(analysis.highlightsFadeVisible)
assertTrue(analysis.showMoreButtonVisible)
}
@Test
fun `WHEN AnalysisPresent has only 1 highlight snippet for the first category and more for others THEN show more button is visible and highlights fade is not visible`() {
val highlights = sortedMapOf(
ReviewQualityCheckState.HighlightType.QUALITY to listOf(
"High quality",
),
ReviewQualityCheckState.HighlightType.PACKAGING_AND_APPEARANCE to listOf(
"Elegant packaging",
"Attractive appearance",
"Beautiful design",
),
ReviewQualityCheckState.HighlightType.COMPETITIVENESS to listOf(
"Competitive pricing",
"Strong market presence",
"Unbeatable deals",
),
)
val analysis = AnalysisPresent(
productId = "1",
reviewGrade = ReviewQualityCheckState.Grade.A,
needsAnalysis = false,
adjustedRating = 4.2f,
productUrl = "",
highlights = highlights,
)
assertTrue(analysis.showMoreButtonVisible)
assertFalse(analysis.highlightsFadeVisible)
}
}

Loading…
Cancel
Save