Skip to content

Commit 6421ece

Browse files
committed
Update tests for WooShippingCreateLabelsViewModel
1 parent 4d06a14 commit 6421ece

File tree

1 file changed

+165
-2
lines changed

1 file changed

+165
-2
lines changed

WooCommerce/WooCommerceTests/ViewRelated/Shipping Label/WooShipping Create Shipping Labels/WooShippingCreateLabelsViewModelTests.swift

Lines changed: 165 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,9 @@ final class WooShippingCreateLabelsViewModelTests: XCTestCase {
778778
}
779779

780780
// When
781-
let viewModel = WooShippingCreateLabelsViewModel(order: Order.fake(), stores: stores)
781+
let viewModel = WooShippingCreateLabelsViewModel(order: Order.fake(),
782+
shippingSettingsService: MockShippingSettingsService(dimensionUnit: "", weightUnit: ""),
783+
stores: stores)
782784

783785
waitUntil {
784786
viewModel.state == .ready
@@ -847,6 +849,7 @@ final class WooShippingCreateLabelsViewModelTests: XCTestCase {
847849
case .loadOriginAddresses(_, let completion):
848850
completion(.success([originAddress]))
849851
case .loadAccountSettings(_, let completion):
852+
self.insert(accountSettings: accountSettings)
850853
completion(.success(settings))
851854
case .loadPackages, .verifyDestinationAddress:
852855
break
@@ -856,7 +859,9 @@ final class WooShippingCreateLabelsViewModelTests: XCTestCase {
856859
}
857860

858861

859-
let viewModel = WooShippingCreateLabelsViewModel(order: Order.fake(), stores: stores)
862+
let viewModel = WooShippingCreateLabelsViewModel(order: Order.fake(),
863+
shippingSettingsService: MockShippingSettingsService(dimensionUnit: "", weightUnit: ""),
864+
stores: stores)
860865

861866
waitUntil {
862867
viewModel.state == .ready
@@ -885,6 +890,154 @@ final class WooShippingCreateLabelsViewModelTests: XCTestCase {
885890
isEditable: true)
886891
))
887892
}
893+
894+
// MARK: - loadRequiredData with stored data tests
895+
896+
func test_loadRequiredData_state_becomes_ready_immediately_when_origin_addresses_and_settings_are_stored() {
897+
// Given
898+
let originAddress = WooShippingOriginAddress(siteID: siteID,
899+
id: "stored_address",
900+
company: "Stored Company",
901+
address1: "123 Stored St",
902+
address2: "",
903+
city: "San Francisco",
904+
state: "CA",
905+
postcode: "94102",
906+
country: "US",
907+
phone: "555-0123",
908+
firstName: "John",
909+
lastName: "Doe",
910+
911+
defaultAddress: true,
912+
isVerified: true)
913+
914+
let accountSettings = ShippingLabelAccountSettings.fake().copy(siteID: siteID)
915+
916+
// Pre-populate storage with data
917+
insert(originAddress: originAddress)
918+
insert(accountSettings: accountSettings)
919+
920+
let stores = MockStoresManager(sessionManager: .testingInstance)
921+
let shippingSettingsService = MockShippingSettingsService(dimensionUnit: "cm", weightUnit: "g")
922+
let viewModel = WooShippingCreateLabelsViewModel(order: Order.fake().copy(siteID: siteID),
923+
shippingSettingsService: shippingSettingsService,
924+
stores: stores,
925+
storageManager: storageManager)
926+
927+
waitUntil {
928+
viewModel.state == .ready
929+
}
930+
931+
// Then
932+
XCTAssertEqual(viewModel.originAddress, "123 Stored St, San Francisco CA 94102, US")
933+
XCTAssertEqual(viewModel.dimensionsUnit, "cm")
934+
XCTAssertEqual(viewModel.weightUnit, "g")
935+
}
936+
937+
func test_loadRequiredData_state_becomes_ready_immediately_when_only_origin_addresses_are_stored() {
938+
// Given
939+
let originAddress = WooShippingOriginAddress(siteID: siteID,
940+
id: "stored_address",
941+
company: "Stored Company",
942+
address1: "456 Another St",
943+
address2: "",
944+
city: "Los Angeles",
945+
state: "CA",
946+
postcode: "90210",
947+
country: "US",
948+
phone: "555-0456",
949+
firstName: "Jane",
950+
lastName: "Smith",
951+
952+
defaultAddress: true,
953+
isVerified: false)
954+
955+
// Pre-populate storage with origin addresses only
956+
insert(originAddress: originAddress)
957+
958+
let stores = MockStoresManager(sessionManager: .testingInstance)
959+
var accountSettingsLoaded = false
960+
961+
stores.whenReceivingAction(ofType: WooShippingAction.self) { action in
962+
switch action {
963+
case .loadAccountSettings(_, let completion):
964+
accountSettingsLoaded = true
965+
completion(.success(self.settings))
966+
case .loadPackages, .verifyDestinationAddress, .loadOriginAddresses:
967+
break
968+
default:
969+
XCTFail("Unexpected action: \(action)")
970+
}
971+
}
972+
973+
let shippingSettingsService = MockShippingSettingsService(dimensionUnit: nil, weightUnit: nil)
974+
let viewModel = WooShippingCreateLabelsViewModel(order: Order.fake().copy(siteID: siteID),
975+
shippingSettingsService: shippingSettingsService,
976+
stores: stores,
977+
storageManager: storageManager)
978+
979+
waitUntil {
980+
viewModel.state == .ready
981+
}
982+
983+
// Then
984+
XCTAssertEqual(viewModel.originAddress, "456 Another St, Los Angeles CA 90210, US")
985+
XCTAssertTrue(accountSettingsLoaded, "Account settings should be loaded from remote when missing")
986+
XCTAssertEqual(viewModel.dimensionsUnit, settings.storeOptions.dimensionUnit)
987+
XCTAssertEqual(viewModel.weightUnit, settings.storeOptions.weightUnit)
988+
}
989+
990+
func test_loadRequiredData_state_becomes_ready_immediately_when_only_account_settings_are_stored() {
991+
// Given
992+
let accountSettings = ShippingLabelAccountSettings.fake().copy(siteID: siteID)
993+
994+
// Pre-populate storage with account settings only
995+
insert(accountSettings: accountSettings)
996+
997+
let originAddress = WooShippingOriginAddress(siteID: siteID,
998+
id: "stored_address",
999+
company: "Stored Company",
1000+
address1: "456 Another St",
1001+
address2: "",
1002+
city: "Los Angeles",
1003+
state: "CA",
1004+
postcode: "90210",
1005+
country: "US",
1006+
phone: "555-0456",
1007+
firstName: "Jane",
1008+
lastName: "Smith",
1009+
1010+
defaultAddress: true,
1011+
isVerified: false)
1012+
let stores = MockStoresManager(sessionManager: .testingInstance)
1013+
var originAddressesLoaded = false
1014+
1015+
stores.whenReceivingAction(ofType: WooShippingAction.self) { action in
1016+
switch action {
1017+
case .loadOriginAddresses(_, let completion):
1018+
originAddressesLoaded = true
1019+
completion(.success([originAddress]))
1020+
case .loadPackages, .verifyDestinationAddress, .loadAccountSettings:
1021+
break
1022+
default:
1023+
XCTFail("Unexpected action: \(action)")
1024+
}
1025+
}
1026+
1027+
let shippingSettingsService = MockShippingSettingsService(dimensionUnit: "cm", weightUnit: "g")
1028+
let viewModel = WooShippingCreateLabelsViewModel(order: Order.fake().copy(siteID: siteID),
1029+
shippingSettingsService: shippingSettingsService,
1030+
stores: stores,
1031+
storageManager: storageManager)
1032+
1033+
waitUntil {
1034+
viewModel.state == .ready
1035+
}
1036+
1037+
// Then
1038+
XCTAssertTrue(originAddressesLoaded, "Origin addresses should be loaded from remote when missing")
1039+
XCTAssertFalse(viewModel.originAddress.isEmpty, "Origin address should be set from loaded data")
1040+
}
8881041
}
8891042

8901043
private extension WooShippingCreateLabelsViewModelTests {
@@ -934,4 +1087,14 @@ private extension WooShippingCreateLabelsViewModelTests {
9341087
}
9351088
}
9361089
}
1090+
1091+
func insert(originAddress: WooShippingOriginAddress) {
1092+
let storageAddress = storage.insertNewObject(ofType: StorageWooShippingOriginAddress.self)
1093+
storageAddress.update(with: originAddress)
1094+
}
1095+
1096+
func insert(accountSettings: ShippingLabelAccountSettings) {
1097+
let storageSettings = storage.insertNewObject(ofType: StorageShippingLabelAccountSettings.self)
1098+
storageSettings.update(with: accountSettings)
1099+
}
9371100
}

0 commit comments

Comments
 (0)