diff --git a/WooCommerce/Classes/POS/ViewHelpers/CollectCashViewHelper.swift b/WooCommerce/Classes/POS/ViewHelpers/CollectCashViewHelper.swift index 5c64de135c7..a80717b45a1 100644 --- a/WooCommerce/Classes/POS/ViewHelpers/CollectCashViewHelper.swift +++ b/WooCommerce/Classes/POS/ViewHelpers/CollectCashViewHelper.swift @@ -36,8 +36,10 @@ final class CollectCashViewHelper { func validateAmountOnSubmit(orderTotal: String, textFieldAmountInput: String, onError: (String) -> Void) -> Bool { + let userInput = textFieldAmountInput.isNotEmpty ? textFieldAmountInput : "0" + guard let orderDecimal = parseCurrency(orderTotal), - let inputDecimal = parseCurrency(textFieldAmountInput) else { + let inputDecimal = parseCurrency(userInput) else { onError(Localization.failedToCollectCashPayment) return false } diff --git a/WooCommerce/WooCommerceTests/POS/ViewModels/CollectCashViewHelperTests.swift b/WooCommerce/WooCommerceTests/POS/ViewModels/CollectCashViewHelperTests.swift index fa2ecbc2033..a6561bb7e8e 100644 --- a/WooCommerce/WooCommerceTests/POS/ViewModels/CollectCashViewHelperTests.swift +++ b/WooCommerce/WooCommerceTests/POS/ViewModels/CollectCashViewHelperTests.swift @@ -207,4 +207,59 @@ struct CollectCashViewHelperTests { #expect(result == false) #expect(capturedErrorMessage == expectedErrorMessage) } + + @Test func validateAmountOnSubmit_when_input_is_empty_then_returns_true() { + // Given + let orderTotal = "$0.00" + let inputAmount = "" + + // When + let result = sut.validateAmountOnSubmit( + orderTotal: orderTotal, + textFieldAmountInput: inputAmount, + onError: { _ in }) + + // Then + #expect(result == true) + } + + @Test func validateAmountOnSubmit_when_orderTotal_is_empty_then_returns_false_with_expected_error_message() { + // Given + let orderTotal = "" + let inputAmount = "" + let expectedErrorMessage = "Error trying to process payment. Try again." + var capturedErrorMessage: String? + + // When + let result = sut.validateAmountOnSubmit( + orderTotal: orderTotal, + textFieldAmountInput: inputAmount, + onError: { error in + capturedErrorMessage = error + }) + + // Then + #expect(result == false) + #expect(capturedErrorMessage == expectedErrorMessage) + } + + @Test func validateAmountOnSubmit_when_inputDecimal_is_empty_and_less_than_orderTotal_then_returns_false_with_expected_error_message() { + // Given + let orderTotal = "$1.00" + let inputAmount = "" + let expectedErrorMessage = "Amount must be more or equal to total." + var capturedErrorMessage: String? + + // When + let result = sut.validateAmountOnSubmit( + orderTotal: orderTotal, + textFieldAmountInput: inputAmount, + onError: { error in + capturedErrorMessage = error + }) + + // Then + #expect(result == false) + #expect(capturedErrorMessage == expectedErrorMessage) + } }