Skip to content

Commit 6e6a83a

Browse files
committed
Add unit tests for Add New Package view model
1 parent 2493eee commit 6e6a83a

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,7 @@
965965
CC4A4FF126557D0E00B75DCD /* TitleAndToggleRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4A4FF026557D0E00B75DCD /* TitleAndToggleRow.swift */; };
966966
CC4D1D8625E6CDDE00B6E4E7 /* RenameAttributesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4D1D8525E6CDDE00B6E4E7 /* RenameAttributesViewModel.swift */; };
967967
CC4D1E7925EE415D00B6E4E7 /* RenameAttributesViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4D1E7825EE415D00B6E4E7 /* RenameAttributesViewModelTests.swift */; };
968+
CC593A6726EA116300EF0E04 /* ShippingLabelAddNewPackageViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC593A6626EA116300EF0E04 /* ShippingLabelAddNewPackageViewModelTests.swift */; };
968969
CC69236226010946002FB669 /* LoginProloguePages.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC69236126010946002FB669 /* LoginProloguePages.swift */; };
969970
CC6923AC26010D8D002FB669 /* LoginProloguePageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC6923AB26010D8D002FB669 /* LoginProloguePageViewController.swift */; };
970971
CC8413E423F5C48E00EFC277 /* stop.sh in Resources */ = {isa = PBXBuildFile; fileRef = CCFC011123E9E40B00157A78 /* stop.sh */; };
@@ -2389,6 +2390,7 @@
23892390
CC4A4FF026557D0E00B75DCD /* TitleAndToggleRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleAndToggleRow.swift; sourceTree = "<group>"; };
23902391
CC4D1D8525E6CDDE00B6E4E7 /* RenameAttributesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameAttributesViewModel.swift; sourceTree = "<group>"; };
23912392
CC4D1E7825EE415D00B6E4E7 /* RenameAttributesViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameAttributesViewModelTests.swift; sourceTree = "<group>"; };
2393+
CC593A6626EA116300EF0E04 /* ShippingLabelAddNewPackageViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelAddNewPackageViewModelTests.swift; sourceTree = "<group>"; };
23922394
CC69236126010946002FB669 /* LoginProloguePages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginProloguePages.swift; sourceTree = "<group>"; };
23932395
CC6923AB26010D8D002FB669 /* LoginProloguePageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginProloguePageViewController.swift; sourceTree = "<group>"; };
23942396
CCCC29DC25E5757C0046B96F /* RenameAttributesViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RenameAttributesViewController.xib; sourceTree = "<group>"; };
@@ -4167,6 +4169,7 @@
41674169
45AF9DA9265CEAA3001EB794 /* ShippingLabelCarrierRowViewModelTests.swift */,
41684170
CCE4CD162667EBB100E09FD4 /* ShippingLabelPaymentMethodsViewModelTests.swift */,
41694171
CCCC5B1226CC2B9F0034FB63 /* ShippingLabelCustomPackageFormViewModelTests.swift */,
4172+
CC593A6626EA116300EF0E04 /* ShippingLabelAddNewPackageViewModelTests.swift */,
41704173
);
41714174
path = "Create Shipping Label";
41724175
sourceTree = "<group>";
@@ -7805,6 +7808,7 @@
78057808
0279F0DC252DBF1F0098D7DE /* ProductVariationDetailsFactoryTests.swift in Sources */,
78067809
450C2CB324D0803000D570DD /* ProductSettingsRowsTests.swift in Sources */,
78077810
45AF9DAF265CFAB4001EB794 /* MockShippingLabelCarrierRate.swift in Sources */,
7811+
CC593A6726EA116300EF0E04 /* ShippingLabelAddNewPackageViewModelTests.swift in Sources */,
78087812
455A2FDB246B1349000CA72C /* ProductVisibilityTests.swift in Sources */,
78097813
0215C6FC2518A3CD005240CD /* ProductFormViewModel+SaveTests.swift in Sources */,
78107814
265284092624ACE900F91BA1 /* AddOnCrossreferenceTests.swift in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import XCTest
2+
@testable import Yosemite
3+
@testable import WooCommerce
4+
5+
class ShippingLabelAddNewPackageViewModelTests: XCTestCase {
6+
7+
private let sampleSiteID = 12345
8+
9+
func test_createCustomPackage_resets_child_view_models_on_success() {
10+
// Given
11+
let stores = MockStoresManager(sessionManager: .testingInstance)
12+
let viewModel = ShippingLabelAddNewPackageViewModel(stores: stores,
13+
siteID: 12345,
14+
packagesResponse: ShippingLabelPackagesResponse.fake(),
15+
onCompletion: {_, _, _ in })
16+
17+
// Given a validated custom package
18+
viewModel.customPackageVM.packageName = "Test Package"
19+
viewModel.customPackageVM.packageHeight = "1"
20+
viewModel.customPackageVM.packageWidth = "1"
21+
viewModel.customPackageVM.packageLength = "1"
22+
viewModel.customPackageVM.emptyPackageWeight = "1"
23+
24+
// When
25+
stores.whenReceivingAction(ofType: ShippingLabelAction.self) { action in
26+
switch action {
27+
case let .createPackage(_, _, _, onCompletion):
28+
onCompletion(.success(true))
29+
case let .packagesDetails(_, onCompletion):
30+
onCompletion(.success(ShippingLabelPackagesResponse.fake()))
31+
default:
32+
break
33+
}
34+
}
35+
36+
viewModel.createCustomPackage(onCompletion: { _ in })
37+
38+
// Then
39+
XCTAssertNil(viewModel.customPackageVM.validatedCustomPackage)
40+
}
41+
42+
func test_activateServicePackage_resets_child_view_models_on_success() {
43+
// Given
44+
let stores = MockStoresManager(sessionManager: .testingInstance)
45+
let viewModel = ShippingLabelAddNewPackageViewModel(stores: stores,
46+
siteID: 12345,
47+
packagesResponse: Mocks.packagesResponse,
48+
onCompletion: {_, _, _ in })
49+
50+
// Given changes to child view models
51+
viewModel.customPackageVM.packageName = "Test Package"
52+
viewModel.servicePackageVM.selectedPackage = Mocks.predefinedPackage
53+
54+
// When
55+
stores.whenReceivingAction(ofType: ShippingLabelAction.self) { action in
56+
switch action {
57+
case let .createPackage(_, _, _, onCompletion):
58+
onCompletion(.success(true))
59+
case let .packagesDetails(_, onCompletion):
60+
onCompletion(.success(ShippingLabelPackagesResponse.fake()))
61+
default:
62+
break
63+
}
64+
}
65+
66+
viewModel.activateServicePackage(onCompletion: { _ in })
67+
68+
// Then
69+
XCTAssertEqual(viewModel.customPackageVM.packageName, "")
70+
XCTAssertNotEqual(viewModel.servicePackageVM.selectedPackage, Mocks.predefinedPackage)
71+
XCTAssertFalse(viewModel.servicePackageVM.predefinedOptions.contains(Mocks.predefinedOption))
72+
}
73+
}
74+
75+
extension ShippingLabelAddNewPackageViewModelTests {
76+
enum Mocks {
77+
static let predefinedPackage = ShippingLabelPredefinedPackage(id: "small_flat_box",
78+
title: "Small Flat Rate Box",
79+
isLetter: false,
80+
dimensions: "21.91 x 13.65 x 4.13")
81+
static let predefinedOption = ShippingLabelPredefinedOption(title: "USPS Priority Mail Flat Rate Boxes",
82+
providerID: "usps",
83+
predefinedPackages: [predefinedPackage])
84+
static let packagesResponse = ShippingLabelPackagesResponse(storeOptions: ShippingLabelStoreOptions.fake(),
85+
customPackages: [ShippingLabelCustomPackage.fake()],
86+
predefinedOptions: [],
87+
unactivatedPredefinedOptions: [predefinedOption])
88+
}
89+
}

0 commit comments

Comments
 (0)