Skip to content

Commit 82dcacd

Browse files
committed
Update unit tests
1 parent 14c085d commit 82dcacd

File tree

2 files changed

+66
-15
lines changed

2 files changed

+66
-15
lines changed

WooCommerce/WooCommerceTests/ViewRelated/Orders/Order Details/Addresses/CountrySelector/CountrySelectorViewModelTests.swift

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@ import XCTest
22
import Yosemite
33
import TestKit
44
import Combine
5+
import struct SwiftUI.Binding
56
@testable import WooCommerce
67

78
final class CountrySelectorViewModelTests: XCTestCase {
89

9-
let selectedSubject = CurrentValueSubject<Country?, Never>(nil)
1010
var subscriptions = Set<AnyCancellable>()
1111

1212
override func setUp () {
1313
super.setUp()
1414

15-
selectedSubject.value = nil
1615
subscriptions.removeAll()
1716
}
1817

1918
func test_filter_countries_return_expected_results() {
2019
// Given
21-
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: selectedSubject)
20+
let binding = Binding<Country?>(get: { nil }, set: { _ in })
21+
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: binding)
2222

2323
// When
2424
viewModel.searchTerm = "Co"
@@ -43,7 +43,8 @@ final class CountrySelectorViewModelTests: XCTestCase {
4343

4444
func test_filter_countries_with_uppercase_letters_return_expected_results() {
4545
// Given
46-
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: selectedSubject)
46+
let binding = Binding<Country?>(get: { nil }, set: { _ in })
47+
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: binding)
4748

4849
// When
4950
viewModel.searchTerm = "CO"
@@ -68,7 +69,8 @@ final class CountrySelectorViewModelTests: XCTestCase {
6869

6970
func test_cleaning_search_terms_return_all_countries() {
7071
// Given
71-
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: selectedSubject)
72+
let binding = Binding<Country?>(get: { nil }, set: { _ in })
73+
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: binding)
7274
let totalNumberOfCountries = viewModel.command.data.count
7375

7476
// When
@@ -82,27 +84,28 @@ final class CountrySelectorViewModelTests: XCTestCase {
8284

8385
func test_providing_a_selected_country_is_reflected_on_command() {
8486
// Given
85-
let country = Self.sampleCountries[0]
86-
selectedSubject.value = country
87+
let binding = Binding<Country?>(get: { Self.sampleCountries[0] }, set: { _ in })
8788

8889
// When
89-
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: selectedSubject)
90+
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: binding)
9091

9192
// Then
92-
XCTAssertEqual(viewModel.command.selected, country)
93+
XCTAssertEqual(viewModel.command.selected, binding.wrappedValue)
9394
}
9495

95-
func test_selecting_country_via_command_updates_subject() {
96+
func test_selecting_country_via_command_updates_binding() {
9697
// Given
97-
let country = Self.sampleCountries[0]
98-
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: selectedSubject)
98+
let expectedCountry = Self.sampleCountries[0]
99+
var selectedCountry: Country? = nil
100+
let binding = Binding<Country?>(get: { selectedCountry }, set: { selectedCountry = $0 })
101+
let viewModel = CountrySelectorViewModel(countries: Self.sampleCountries, selected: binding)
99102

100103
// When
101104
let viewController = ListSelectorViewController(command: viewModel.command, onDismiss: { _ in }) // Needed because of legacy UIKit ways
102-
viewModel.command.handleSelectedChange(selected: country, viewController: viewController)
105+
viewModel.command.handleSelectedChange(selected: expectedCountry, viewController: viewController)
103106

104107
// Then
105-
XCTAssertEqual(selectedSubject.value, country)
108+
XCTAssertEqual(selectedCountry, expectedCountry)
106109
}
107110
}
108111

WooCommerce/WooCommerceTests/ViewRelated/Orders/Order Details/Addresses/EditAddressFormViewModelTests.swift

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,13 @@ final class EditAddressFormViewModelTests: XCTestCase {
2424

2525
func test_creating_with_address_prefills_fields_with_correct_data() {
2626
// Given
27+
testingStorage.insertSampleCountries(readOnlyCountries: Self.sampleCountries)
28+
2729
let address = sampleAddress()
28-
let viewModel = EditAddressFormViewModel(siteID: sampleSiteID, address: address)
30+
let viewModel = EditAddressFormViewModel(siteID: sampleSiteID, address: address, storageManager: testingStorage)
31+
32+
// When
33+
viewModel.onLoadTrigger.send()
2934

3035
// Then
3136
XCTAssertEqual(viewModel.fields.firstName, address.firstName)
@@ -38,6 +43,10 @@ final class EditAddressFormViewModelTests: XCTestCase {
3843
XCTAssertEqual(viewModel.fields.address2, address.address2 ?? "")
3944
XCTAssertEqual(viewModel.fields.city, address.city)
4045
XCTAssertEqual(viewModel.fields.postcode, address.postcode)
46+
XCTAssertEqual(viewModel.fields.state, address.state)
47+
48+
let countryName = Self.sampleCountries.first { $0.code == address.country }?.name
49+
XCTAssertEqual(viewModel.fields.country, countryName)
4150

4251
XCTAssertEqual(viewModel.navigationTrailingItem, .done(enabled: false))
4352
}
@@ -49,6 +58,7 @@ final class EditAddressFormViewModelTests: XCTestCase {
4958
XCTAssertEqual(viewModel.navigationTrailingItem, .done(enabled: false))
5059

5160
// When
61+
viewModel.onLoadTrigger.send()
5262
viewModel.fields.firstName = "John"
5363

5464
// Then
@@ -62,6 +72,7 @@ final class EditAddressFormViewModelTests: XCTestCase {
6272
XCTAssertEqual(viewModel.navigationTrailingItem, .done(enabled: false))
6373

6474
// When
75+
viewModel.onLoadTrigger.send()
6576
viewModel.fields.firstName = "John"
6677
viewModel.fields.lastName = "Ipsum"
6778
viewModel.fields.firstName = "Johnny"
@@ -75,6 +86,9 @@ final class EditAddressFormViewModelTests: XCTestCase {
7586
// Given
7687
let viewModel = EditAddressFormViewModel(siteID: sampleSiteID, address: nil)
7788

89+
// When
90+
viewModel.onLoadTrigger.send()
91+
7892
// Then
7993
XCTAssertEqual(viewModel.navigationTrailingItem, .done(enabled: false))
8094
}
@@ -84,6 +98,9 @@ final class EditAddressFormViewModelTests: XCTestCase {
8498
let address = sampleAddressWithEmptyNullableFields()
8599
let viewModel = EditAddressFormViewModel(siteID: sampleSiteID, address: address)
86100

101+
// When
102+
viewModel.onLoadTrigger.send()
103+
87104
// Then
88105
XCTAssertEqual(viewModel.navigationTrailingItem, .done(enabled: false))
89106
}
@@ -94,6 +111,7 @@ final class EditAddressFormViewModelTests: XCTestCase {
94111
let viewModel = EditAddressFormViewModel(siteID: sampleSiteID, address: address)
95112

96113
// When
114+
viewModel.onLoadTrigger.send()
97115
viewModel.updateRemoteAddress { _ in }
98116

99117
// Then
@@ -106,6 +124,7 @@ final class EditAddressFormViewModelTests: XCTestCase {
106124
let viewModel = EditAddressFormViewModel(siteID: sampleSiteID, address: address)
107125

108126
// When
127+
viewModel.onLoadTrigger.send()
109128
let navigationItem = waitFor { promise in
110129
viewModel.updateRemoteAddress { _ in
111130
promise(viewModel.navigationTrailingItem)
@@ -162,6 +181,24 @@ final class EditAddressFormViewModelTests: XCTestCase {
162181
// Then
163182
assertEqual(showPlaceholdersStates, [true, false]) // true: showPlaceholders, false: hide placeholders
164183
}
184+
185+
func test_selecting_country_updates_country_field() {
186+
// Given
187+
testingStorage.insertSampleCountries(readOnlyCountries: Self.sampleCountries)
188+
let newCountry = Self.sampleCountries[0]
189+
190+
let address = sampleAddress()
191+
let viewModel = EditAddressFormViewModel(siteID: sampleSiteID, address: address, storageManager: testingStorage)
192+
viewModel.onLoadTrigger.send()
193+
194+
// When
195+
let countryViewModel = viewModel.createCountryViewModel()
196+
let viewController = ListSelectorViewController(command: countryViewModel.command, onDismiss: { _ in }) // Needed because of legacy UIKit ways
197+
countryViewModel.command.handleSelectedChange(selected: newCountry, viewController: viewController)
198+
199+
// Then
200+
XCTAssertEqual(viewModel.fields.country, newCountry.name)
201+
}
165202
}
166203

167204
private extension EditAddressFormViewModelTests {
@@ -193,3 +230,14 @@ private extension EditAddressFormViewModelTests {
193230
email: "")
194231
}
195232
}
233+
234+
private extension EditAddressFormViewModelTests {
235+
static let sampleCountries: [Country] = {
236+
return Locale.isoRegionCodes.map { regionCode in
237+
let name = Locale.current.localizedString(forRegionCode: regionCode) ?? ""
238+
return Country(code: regionCode, name: name, states: [])
239+
}.sorted { a, b in
240+
a.name <= b.name
241+
}
242+
}()
243+
}

0 commit comments

Comments
 (0)