From a49961ab4d8acdb49546674b5bd2fc967b3202c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Wed, 12 Nov 2025 12:28:15 +0100 Subject: [PATCH 1/2] Improve zero check for shipping and discount --- .../ui/woopos/orders/WooPosOrdersViewModel.kt | 8 +-- .../orders/WooPosOrdersViewModelTest.kt | 53 +++++++++++++++++++ 2 files changed, 58 insertions(+), 3 deletions(-) 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 3696b653263..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 @@ -527,7 +527,7 @@ class WooPosOrdersViewModel @Inject constructor( createdAtMillis = order.dateCreated.time ) } - + private suspend fun mapOrderDetails( order: Order, refundResult: RefundFetchResult @@ -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/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") + } } From 387da5575b1e55a637e3ab8162e628e3c2c94464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81sar=20Vargas=20Casaseca?= Date: Wed, 12 Nov 2025 12:47:36 +0100 Subject: [PATCH 2/2] Update discount strings --- WooCommerce/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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