Skip to content

Commit 6837ec5

Browse files
authored
Merge pull request #6652 from woocommerce/issue/6649-free-shipping-option
2 parents ee8e246 + dde6e6c commit 6837ec5

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Creation/PaymentSection/ShippingLineDetailsViewModel.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class ShippingLineDetailsViewModel: ObservableObject {
2121

2222
/// Placeholder for amount text field
2323
///
24-
let amountPlaceholder: String
24+
let amountPlaceholder: String = "0"
2525

2626
/// Stores the amount entered by the merchant.
2727
///
@@ -36,7 +36,7 @@ class ShippingLineDetailsViewModel: ObservableObject {
3636
///
3737
@Published var methodTitle: String
3838

39-
private let initialAmount: Decimal
39+
private let initialAmount: Decimal?
4040
private let initialMethodTitle: String
4141

4242
/// Returns true when existing shipping line is edited.
@@ -52,7 +52,7 @@ class ShippingLineDetailsViewModel: ObservableObject {
5252
/// Returns true when there are no valid pending changes.
5353
///
5454
var shouldDisableDoneButton: Bool {
55-
guard let amountDecimal = priceFieldFormatter.amountDecimal, amountDecimal != .zero else {
55+
guard let amountDecimal = priceFieldFormatter.amountDecimal else {
5656
return true
5757
}
5858

@@ -71,7 +71,6 @@ class ShippingLineDetailsViewModel: ObservableObject {
7171
self.priceFieldFormatter = .init(locale: locale, storeCurrencySettings: storeCurrencySettings, allowNegativeNumber: true)
7272
self.currencySymbol = storeCurrencySettings.symbol(from: storeCurrencySettings.currencyCode)
7373
self.currencyPosition = storeCurrencySettings.currencyPosition
74-
self.amountPlaceholder = priceFieldFormatter.formatAmount("0")
7574

7675
self.isExistingShippingLine = isExistingShippingLine
7776
self.initialMethodTitle = initialMethodTitle
@@ -81,10 +80,10 @@ class ShippingLineDetailsViewModel: ObservableObject {
8180
if let initialAmount = currencyFormatter.convertToDecimal(from: shippingTotal) {
8281
self.initialAmount = initialAmount as Decimal
8382
} else {
84-
self.initialAmount = .zero
83+
self.initialAmount = nil
8584
}
8685

87-
if initialAmount != .zero, let formattedInputAmount = currencyFormatter.formatAmount(initialAmount) {
86+
if let initialAmount = initialAmount, let formattedInputAmount = currencyFormatter.formatAmount(initialAmount) {
8887
self.amount = priceFieldFormatter.formatAmount(formattedInputAmount)
8988
}
9089

WooCommerce/WooCommerceTests/ViewRelated/Orders/Order Creation/ShippingLineDetailsViewModelTests.swift

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ final class ShippingLineDetailsViewModelTests: XCTestCase {
158158
// When
159159
viewModel.amount = "$11.30"
160160
viewModel.methodTitle = "Flat Rate"
161+
viewModel.saveData()
161162

162163
// Then
163-
viewModel.saveData()
164164
XCTAssertEqual(savedShippingLine?.total, "11.30")
165165
XCTAssertEqual(savedShippingLine?.methodTitle, "Flat Rate")
166166
}
@@ -180,13 +180,34 @@ final class ShippingLineDetailsViewModelTests: XCTestCase {
180180
// When
181181
viewModel.amount = "-11.30"
182182
viewModel.methodTitle = "Flat Rate"
183+
viewModel.saveData()
183184

184185
// Then
185-
viewModel.saveData()
186186
XCTAssertEqual(savedShippingLine?.total, "-11.30")
187187
XCTAssertEqual(savedShippingLine?.methodTitle, "Flat Rate")
188188
}
189189

190+
func test_view_model_allows_saving_zero_amount_and_creates_correct_shippping_line() {
191+
// Given
192+
var savedShippingLine: ShippingLine?
193+
let viewModel = ShippingLineDetailsViewModel(isExistingShippingLine: false,
194+
initialMethodTitle: "",
195+
shippingTotal: "",
196+
locale: usLocale,
197+
storeCurrencySettings: usStoreSettings,
198+
didSelectSave: { newShippingLine in
199+
savedShippingLine = newShippingLine
200+
})
201+
202+
// When
203+
viewModel.amount = "0"
204+
viewModel.saveData()
205+
206+
// Then
207+
XCTAssertFalse(viewModel.shouldDisableDoneButton)
208+
XCTAssertEqual(savedShippingLine?.total, "0")
209+
}
210+
190211
func test_view_model_creates_shippping_line_with_placeholder_for_method_title() {
191212
// Given
192213
var savedShippingLine: ShippingLine?

0 commit comments

Comments
 (0)