diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt
index 40eebf690bd..0340850f8e5 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModel.kt
@@ -625,10 +625,10 @@ class WooPosOrdersViewModel @Inject constructor(
return OrderDetailsViewState.Computed.Details.TotalsBreakdown(
products = formatPrice(order.productsTotal),
- discount = order.discountTotal.takeIf { it != BigDecimal.ZERO }?.let { "-${formatPrice(it)}" },
+ discount = order.discountTotal.takeIf { !it.isZero() }?.let { "-${formatPrice(it)}" },
discountCode = discountCode,
taxes = formatPrice(order.totalTax),
- shipping = order.shippingTotal.takeIf { it != BigDecimal.ZERO }?.let { formatPrice(it) },
+ shipping = order.shippingTotal.takeIf { !it.isZero() }?.let { formatPrice(it) },
refunds = refundInfo.refundAmounts,
netPayment = netPayment
)
@@ -648,3 +648,5 @@ private fun Order.Status.localizedLabel(resourceProvider: ResourceProvider, loca
Order.Status.Refunded -> resourceProvider.getString(R.string.woopos_orders_status_refunded)
}
}
+
+private fun BigDecimal.isZero() = this.compareTo(BigDecimal.ZERO) == 0
diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml
index 3d206312215..753264b00b3 100644
--- a/WooCommerce/src/main/res/values/strings.xml
+++ b/WooCommerce/src/main/res/values/strings.xml
@@ -3826,8 +3826,8 @@
Totals
%1$d x %2$s
Products
- Discount
- Discount (%1$s)
+ Discount total
+ Discount total (%1$s)
Taxes
Shipping
Total
diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModelTest.kt
index 247d6e87a9a..d0d6172b3f6 100644
--- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModelTest.kt
+++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/orders/WooPosOrdersViewModelTest.kt
@@ -844,4 +844,57 @@ class WooPosOrdersViewModelTest {
// THEN
verify(ordersAnalyticsTracker).trackOrdersListSearchResultsFetched(any())
}
+
+ @Test
+ fun `given order with zero discount and zero shipping, when mapped, then discount and shipping are absent`() = runTest {
+ // GIVEN
+ val base = order(1)
+ val withZeros = base.copy(
+ discountTotal = BigDecimal("0.00"),
+ shippingTotal = BigDecimal("0.00")
+ )
+
+ // WHEN
+ whenever(dataSource.loadOrders()).thenReturn(
+ flow { emit(LoadOrdersResult.SuccessRemote(ordersMap(withZeros))) }
+ )
+
+ viewModel = createViewModel()
+ advanceUntilIdle()
+
+ // THEN
+ val content = viewModel.state.value as WooPosOrdersState.Content
+ val breakdown = content.selectedDetails.breakdown
+ assertThat(breakdown.discount).isNull()
+ assertThat(breakdown.shipping).isNull()
+ }
+
+ @Test
+ fun `given order with non-zero discount and shipping, when mapped, then discount and shipping are formatted`() = runTest {
+ // GIVEN
+ val base = order(2)
+ val withValues = base.copy(
+ discountTotal = BigDecimal("3.50"),
+ shippingTotal = BigDecimal("4.00")
+ )
+
+ // WHEN
+ runBlocking {
+ whenever(formatPrice.invoke(BigDecimal("3.50"))).thenReturn("$3.50")
+ whenever(formatPrice.invoke(BigDecimal("4.00"))).thenReturn("$4.00")
+ }
+
+ whenever(dataSource.loadOrders()).thenReturn(
+ flow { emit(LoadOrdersResult.SuccessRemote(ordersMap(withValues))) }
+ )
+
+ viewModel = createViewModel()
+ advanceUntilIdle()
+
+ // THEN
+ val content = viewModel.state.value as WooPosOrdersState.Content
+ val breakdown = content.selectedDetails.breakdown
+ assertThat(breakdown.discount).isEqualTo("-$3.50")
+ assertThat(breakdown.shipping).isEqualTo("$4.00")
+ }
}