@@ -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
167204private 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