Skip to content

Commit e1b1161

Browse files
committed
Add unit tests for packages form view model
1 parent 7db6950 commit e1b1161

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,7 @@
12761276
DE279BA626E9C582002BA963 /* ShippingLabelPackagesFormViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE279BA526E9C582002BA963 /* ShippingLabelPackagesFormViewModel.swift */; };
12771277
DE279BA826E9C8E3002BA963 /* ShippingLabelPackageItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE279BA726E9C8E3002BA963 /* ShippingLabelPackageItem.swift */; };
12781278
DE279BAA26E9C91D002BA963 /* ShippingLabelPackateItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE279BA926E9C91D002BA963 /* ShippingLabelPackateItemViewModel.swift */; };
1279+
DE279BAD26E9CBEA002BA963 /* ShippingLabelPackagesFormViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE279BAC26E9CBEA002BA963 /* ShippingLabelPackagesFormViewModelTests.swift */; };
12791280
DE46133926B2BEB8001DE59C /* ShippingLabelCountryListSelectorCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE46133826B2BEB8001DE59C /* ShippingLabelCountryListSelectorCommand.swift */; };
12801281
DE4B3B2C2692DC2200EEF2D8 /* ReviewOrderViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE4B3B2B2692DC2200EEF2D8 /* ReviewOrderViewModelTests.swift */; };
12811282
DE4B3B2E269455D400EEF2D8 /* MockShipmentActionStoresManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE4B3B2D269455D400EEF2D8 /* MockShipmentActionStoresManager.swift */; };
@@ -2698,6 +2699,7 @@
26982699
DE279BA526E9C582002BA963 /* ShippingLabelPackagesFormViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelPackagesFormViewModel.swift; sourceTree = "<group>"; };
26992700
DE279BA726E9C8E3002BA963 /* ShippingLabelPackageItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelPackageItem.swift; sourceTree = "<group>"; };
27002701
DE279BA926E9C91D002BA963 /* ShippingLabelPackateItemViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelPackateItemViewModel.swift; sourceTree = "<group>"; };
2702+
DE279BAC26E9CBEA002BA963 /* ShippingLabelPackagesFormViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelPackagesFormViewModelTests.swift; sourceTree = "<group>"; };
27012703
DE46133826B2BEB8001DE59C /* ShippingLabelCountryListSelectorCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelCountryListSelectorCommand.swift; sourceTree = "<group>"; };
27022704
DE4B3B2B2692DC2200EEF2D8 /* ReviewOrderViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewOrderViewModelTests.swift; sourceTree = "<group>"; };
27032705
DE4B3B2D269455D400EEF2D8 /* MockShipmentActionStoresManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockShipmentActionStoresManager.swift; sourceTree = "<group>"; };
@@ -4179,6 +4181,7 @@
41794181
4569D3F225DC1BEC00CDC3E2 /* Create Shipping Label */ = {
41804182
isa = PBXGroup;
41814183
children = (
4184+
DE279BAB26E9CBD3002BA963 /* Multi-package */,
41824185
DE19BB1B26C6910500AB70D9 /* Customs */,
41834186
4569D3F325DC1BFF00CDC3E2 /* ShippingLabelFormViewModelTests.swift */,
41844187
45B98E1E25DECC1C00A1232B /* ShippingLabelAddressFormViewModelTests.swift */,
@@ -6321,6 +6324,14 @@
63216324
path = "Multi-package";
63226325
sourceTree = "<group>";
63236326
};
6327+
DE279BAB26E9CBD3002BA963 /* Multi-package */ = {
6328+
isa = PBXGroup;
6329+
children = (
6330+
DE279BAC26E9CBEA002BA963 /* ShippingLabelPackagesFormViewModelTests.swift */,
6331+
);
6332+
path = "Multi-package";
6333+
sourceTree = "<group>";
6334+
};
63246335
DE4B3B2A2692DBF200EEF2D8 /* Review Order */ = {
63256336
isa = PBXGroup;
63266337
children = (
@@ -8027,6 +8038,7 @@
80278038
D85DD1D7257F359800861AA8 /* NotWPErrorViewModelTests.swift in Sources */,
80288039
025678C725773399009D7E6C /* Collection+ShippingLabelTests.swift in Sources */,
80298040
02BC5AA624D27F8900C43326 /* ProductVariationFormViewModel+ChangesTests.swift in Sources */,
8041+
DE279BAD26E9CBEA002BA963 /* ShippingLabelPackagesFormViewModelTests.swift in Sources */,
80308042
57C2F6E624C27B3100131012 /* SwitchStoreNoticePresenterTests.swift in Sources */,
80318043
020BE77123B4A4C6007FE54C /* AztecHorizontalRulerFormatBarCommandTests.swift in Sources */,
80328044
B5C6CE612190D28E00515926 /* NSAttributedStringHelperTests.swift in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import XCTest
2+
@testable import WooCommerce
3+
import Yosemite
4+
@testable import Storage
5+
6+
class ShippingLabelPackagesFormViewModelTests: XCTestCase {
7+
8+
private let sampleSiteID: Int64 = 1234
9+
10+
private var storageManager: StorageManagerType!
11+
12+
private var storage: StorageType {
13+
storageManager.viewStorage
14+
}
15+
16+
private var stores: MockStoresManager!
17+
18+
override func setUp() {
19+
super.setUp()
20+
storageManager = MockStorageManager()
21+
stores = MockStoresManager(sessionManager: SessionManager.makeForTesting(authenticated: true))
22+
}
23+
24+
override func tearDown() {
25+
storageManager = nil
26+
stores = nil
27+
super.tearDown()
28+
}
29+
30+
func test_itemViewModels_returns_correctly_when_initial_selectedPackages_is_empty() {
31+
// Given
32+
let order = MockOrders().empty().copy(siteID: sampleSiteID)
33+
insert(MockShippingLabelAccountSettings.sampleAccountSettings(siteID: sampleSiteID, lastSelectedPackageID: "package-1"))
34+
35+
// When
36+
let viewModel = ShippingLabelPackagesFormViewModel(order: order, packagesResponse: nil, selectedPackages: [], storageManager: storageManager)
37+
38+
// Then
39+
XCTAssertEqual(viewModel.itemViewModels.count, 1)
40+
XCTAssertEqual(viewModel.itemViewModels.first?.selectedPackageID, "package-1")
41+
}
42+
43+
func test_itemViewModels_returns_correctly_when_initial_selectedPackages_is_not_empty() {
44+
// Given
45+
let order = MockOrders().makeOrder().copy(siteID: sampleSiteID)
46+
let package1 = ShippingLabelPackageAttributes(packageID: "Box 1", totalWeight: "12", productIDs: [1, 33, 23])
47+
let package2 = ShippingLabelPackageAttributes(packageID: "Box 2", totalWeight: "5.5", productIDs: [49])
48+
49+
// When
50+
let viewModel = ShippingLabelPackagesFormViewModel(order: order,
51+
packagesResponse: nil,
52+
selectedPackages: [package1, package2])
53+
54+
// Then
55+
XCTAssertEqual(viewModel.itemViewModels.count, 2)
56+
XCTAssertEqual(viewModel.itemViewModels.first?.selectedPackageID, package1.packageID)
57+
XCTAssertEqual(viewModel.itemViewModels.last?.selectedPackageID, package2.packageID)
58+
}
59+
60+
}
61+
62+
// MARK: - Utils
63+
private extension ShippingLabelPackagesFormViewModelTests {
64+
func insert(_ readOnlyOrderProduct: Yosemite.Product) {
65+
let product = storage.insertNewObject(ofType: StorageProduct.self)
66+
product.update(with: readOnlyOrderProduct)
67+
}
68+
69+
func insert(_ readOnlyOrderProductVariation: Yosemite.ProductVariation) {
70+
let productVariation = storage.insertNewObject(ofType: StorageProductVariation.self)
71+
productVariation.update(with: readOnlyOrderProductVariation)
72+
}
73+
74+
func insert(_ readOnlyAccountSettings: Yosemite.ShippingLabelAccountSettings) {
75+
let accountSettings = storage.insertNewObject(ofType: StorageShippingLabelAccountSettings.self)
76+
accountSettings.update(with: readOnlyAccountSettings)
77+
}
78+
}

0 commit comments

Comments
 (0)