Skip to content

Commit

Permalink
[Woo POS][Cash & Receipts] Validate empty cash user input as zero (#1…
Browse files Browse the repository at this point in the history
  • Loading branch information
iamgabrielma authored Jan 23, 2025
2 parents fe0d95e + 29b3990 commit d3a6ea1
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}

0 comments on commit d3a6ea1

Please sign in to comment.