Skip to content

Commit 4a30681

Browse files
committed
Add unit tests.
1 parent 99378ae commit 4a30681

File tree

5 files changed

+163
-3
lines changed

5 files changed

+163
-3
lines changed

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@
214214
02DD81FB242CAA400060E50B /* WordPressMediaLibraryPickerDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02DD81F7242CAA3F0060E50B /* WordPressMediaLibraryPickerDataSource.swift */; };
215215
02DD81FC242CAA400060E50B /* WordPressMediaLibraryImagePickerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02DD81F8242CAA400060E50B /* WordPressMediaLibraryImagePickerViewController.xib */; };
216216
02E262C9238D0AD300B79588 /* ProductStockStatusListSelectorCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E262C8238D0AD300B79588 /* ProductStockStatusListSelectorCommand.swift */; };
217+
02E493EF245C1087000AEA9E /* ProductFormBottomSheetListSelectorCommandTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E493EE245C1087000AEA9E /* ProductFormBottomSheetListSelectorCommandTests.swift */; };
217218
02E4FD7A230688BA0049610C /* OrderStatsV4Interval+Chart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E4FD79230688BA0049610C /* OrderStatsV4Interval+Chart.swift */; };
218219
02E4FD7C2306A04C0049610C /* StatsTimeRangeBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E4FD7B2306A04C0049610C /* StatsTimeRangeBarView.swift */; };
219220
02E4FD7E2306A8180049610C /* StatsTimeRangeBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E4FD7D2306A8180049610C /* StatsTimeRangeBarViewModel.swift */; };
@@ -1041,6 +1042,7 @@
10411042
02DD81F7242CAA3F0060E50B /* WordPressMediaLibraryPickerDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WordPressMediaLibraryPickerDataSource.swift; sourceTree = "<group>"; };
10421043
02DD81F8242CAA400060E50B /* WordPressMediaLibraryImagePickerViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WordPressMediaLibraryImagePickerViewController.xib; sourceTree = "<group>"; };
10431044
02E262C8238D0AD300B79588 /* ProductStockStatusListSelectorCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductStockStatusListSelectorCommand.swift; sourceTree = "<group>"; };
1045+
02E493EE245C1087000AEA9E /* ProductFormBottomSheetListSelectorCommandTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductFormBottomSheetListSelectorCommandTests.swift; sourceTree = "<group>"; };
10441046
02E4FD79230688BA0049610C /* OrderStatsV4Interval+Chart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OrderStatsV4Interval+Chart.swift"; sourceTree = "<group>"; };
10451047
02E4FD7B2306A04C0049610C /* StatsTimeRangeBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsTimeRangeBarView.swift; sourceTree = "<group>"; };
10461048
02E4FD7D2306A8180049610C /* StatsTimeRangeBarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsTimeRangeBarViewModel.swift; sourceTree = "<group>"; };
@@ -2148,6 +2150,7 @@
21482150
isa = PBXGroup;
21492151
children = (
21502152
02A9A495244D84AB00757B99 /* ProductsSortOrderBottomSheetListSelectorCommandTests.swift */,
2153+
02E493EE245C1087000AEA9E /* ProductFormBottomSheetListSelectorCommandTests.swift */,
21512154
);
21522155
path = BottomSheetListSelector;
21532156
sourceTree = "<group>";
@@ -4509,7 +4512,6 @@
45094512
028296EC237D28B600E84012 /* TextViewViewController.swift in Sources */,
45104513
454B28BE23BF63C600CD2091 /* DateIntervalFormatter+Helpers.swift in Sources */,
45114514
024DF3052372ADCD006658FE /* KeyboardScrollable.swift in Sources */,
4512-
0290E27A238E590500B5C466 /* ListSelectorViewProperties.swift in Sources */,
45134515
0212276324498CDC0042161F /* ProductFormBottomSheetAction.swift in Sources */,
45144516
B555530F21B57DE700449E71 /* ApplicationAdapter.swift in Sources */,
45154517
029D444E22F141CD00DEFA8A /* DashboardStatsV3ViewController.swift in Sources */,
@@ -4930,6 +4932,7 @@
49304932
D8C11A6222E24C4A00D4A88D /* LedgerTableViewCellTests.swift in Sources */,
49314933
D83A6A7A23792B2400419D48 /* UIColor+Muriel-Tests.swift in Sources */,
49324934
B5DBF3C320E1484400B53AED /* StoresManagerTests.swift in Sources */,
4935+
02E493EF245C1087000AEA9E /* ProductFormBottomSheetListSelectorCommandTests.swift in Sources */,
49334936
D88D5A3B230B5D63007B6E01 /* MockupAnalyticsProvider.swift in Sources */,
49344937
B53A569721123D3B000776C9 /* ResultsControllerUIKitTests.swift in Sources */,
49354938
022A45EE237BADA6001417F0 /* Product+ProductFormTests.swift in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
import XCTest
2+
@testable import WooCommerce
3+
@testable import Yosemite
4+
5+
final class ProductFormBottomSheetListSelectorCommandTests: XCTestCase {
6+
// MARK: - `data`
7+
8+
// M3 feature flag off
9+
10+
func testDataHasNoEditProductsRelease3ActionsForAPhysicalProductWhenFeatureFlagIsOff() {
11+
let product = Fixtures.physicalProduct
12+
let isEditProductsRelease3Enabled = false
13+
let command = ProductFormBottomSheetListSelectorCommand(product: product,
14+
isEditProductsRelease3Enabled: isEditProductsRelease3Enabled) { _ in }
15+
16+
let expectedActions: [ProductFormBottomSheetAction] = [
17+
.editInventorySettings,
18+
.editShippingSettings,
19+
.editBriefDescription
20+
]
21+
XCTAssertEqual(command.data, expectedActions)
22+
}
23+
24+
func testDataHasNoEditProductsRelease3AndShippingActionsForAVirtualProductWhenFeatureFlagIsOff() {
25+
let product = Fixtures.virtualProduct
26+
let isEditProductsRelease3Enabled = false
27+
let command = ProductFormBottomSheetListSelectorCommand(product: product,
28+
isEditProductsRelease3Enabled: isEditProductsRelease3Enabled) { _ in }
29+
30+
let expectedActions: [ProductFormBottomSheetAction] = [
31+
.editInventorySettings,
32+
.editBriefDescription
33+
]
34+
XCTAssertEqual(command.data, expectedActions)
35+
}
36+
37+
func testDataHasNoEditProductsRelease3AndShippingActionsForADownloadableProductWhenFeatureFlagIsOff() {
38+
let product = Fixtures.downloadableProduct
39+
let isEditProductsRelease3Enabled = false
40+
let command = ProductFormBottomSheetListSelectorCommand(product: product,
41+
isEditProductsRelease3Enabled: isEditProductsRelease3Enabled) { _ in }
42+
43+
let expectedActions: [ProductFormBottomSheetAction] = [
44+
.editInventorySettings,
45+
.editBriefDescription
46+
]
47+
XCTAssertEqual(command.data, expectedActions)
48+
}
49+
50+
// M3 feature flag on
51+
52+
func testDataHasEditProductsRelease3ActionsForAPhysicalProductWhenFeatureFlagIsOn() {
53+
let product = Fixtures.physicalProduct
54+
let isEditProductsRelease3Enabled = true
55+
let command = ProductFormBottomSheetListSelectorCommand(product: product,
56+
isEditProductsRelease3Enabled: isEditProductsRelease3Enabled) { _ in }
57+
58+
let expectedActions: [ProductFormBottomSheetAction] = [
59+
.editInventorySettings,
60+
.editShippingSettings,
61+
.editCategories,
62+
.editBriefDescription
63+
]
64+
XCTAssertEqual(command.data, expectedActions)
65+
}
66+
67+
func testDataHasEditProductsRelease3ButNoShippingActionsForAVirtualProductWhenFeatureFlagIsOn() {
68+
let product = Fixtures.virtualProduct
69+
let isEditProductsRelease3Enabled = true
70+
let command = ProductFormBottomSheetListSelectorCommand(product: product,
71+
isEditProductsRelease3Enabled: isEditProductsRelease3Enabled) { _ in }
72+
73+
let expectedActions: [ProductFormBottomSheetAction] = [
74+
.editInventorySettings,
75+
.editCategories,
76+
.editBriefDescription
77+
]
78+
XCTAssertEqual(command.data, expectedActions)
79+
}
80+
81+
func testDataHasEditProductsRelease3ButNoShippingActionsForADownloadableProductWhenFeatureFlagIsOn() {
82+
let product = Fixtures.downloadableProduct
83+
let isEditProductsRelease3Enabled = true
84+
let command = ProductFormBottomSheetListSelectorCommand(product: product,
85+
isEditProductsRelease3Enabled: isEditProductsRelease3Enabled) { _ in }
86+
87+
let expectedActions: [ProductFormBottomSheetAction] = [
88+
.editInventorySettings,
89+
.editCategories,
90+
.editBriefDescription
91+
]
92+
XCTAssertEqual(command.data, expectedActions)
93+
}
94+
95+
// MARK: - `handleSelectedChange`
96+
97+
func testCallbackIsCalledOnSelection() {
98+
// Arrange
99+
let product = Fixtures.physicalProduct
100+
var selectedActions = [ProductFormBottomSheetAction]()
101+
let command = ProductFormBottomSheetListSelectorCommand(product: product,
102+
isEditProductsRelease3Enabled: true) { selected in
103+
selectedActions.append(selected)
104+
}
105+
106+
// Action
107+
command.handleSelectedChange(selected: .editInventorySettings)
108+
command.handleSelectedChange(selected: .editBriefDescription)
109+
command.handleSelectedChange(selected: .editShippingSettings)
110+
command.handleSelectedChange(selected: .editCategories)
111+
112+
// Assert
113+
let expectedActions: [ProductFormBottomSheetAction] = [
114+
.editInventorySettings,
115+
.editBriefDescription,
116+
.editShippingSettings,
117+
.editCategories
118+
]
119+
XCTAssertEqual(selectedActions, expectedActions)
120+
}
121+
}
122+
123+
private extension ProductFormBottomSheetListSelectorCommandTests {
124+
enum Fixtures {
125+
static let physicalProduct = MockProduct().product(downloadable: false, virtual: false)
126+
static let virtualProduct = MockProduct().product(downloadable: false, virtual: true)
127+
static let downloadableProduct = MockProduct().product(downloadable: true, virtual: false)
128+
}
129+
}

Yosemite/Yosemite.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
02E262C0238CE80100B79588 /* StorageShippingSettingsServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E262BF238CE80100B79588 /* StorageShippingSettingsServiceTests.swift */; };
4747
02E262C2238CF74D00B79588 /* StorageShippingSettingsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E262C1238CF74D00B79588 /* StorageShippingSettingsService.swift */; };
4848
02E493EB245C0DCC000AEA9E /* Product+Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E493EA245C0DCC000AEA9E /* Product+Settings.swift */; };
49+
02E493ED245C0EBC000AEA9E /* Product+SettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E493EC245C0EBC000AEA9E /* Product+SettingsTests.swift */; };
4950
02E4F5E423CD5628003B0010 /* NSOrderedSet+Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E4F5E323CD5628003B0010 /* NSOrderedSet+Array.swift */; };
5051
02F096C4240670A400C0C1D5 /* Media+Equatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02F096C3240670A400C0C1D5 /* Media+Equatable.swift */; };
5152
02FF054D23D983F30058E6E7 /* MediaFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02FF054523D983F30058E6E7 /* MediaFileManager.swift */; };
@@ -260,6 +261,7 @@
260261
02E262BF238CE80100B79588 /* StorageShippingSettingsServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageShippingSettingsServiceTests.swift; sourceTree = "<group>"; };
261262
02E262C1238CF74D00B79588 /* StorageShippingSettingsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageShippingSettingsService.swift; sourceTree = "<group>"; };
262263
02E493EA245C0DCC000AEA9E /* Product+Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Product+Settings.swift"; sourceTree = "<group>"; };
264+
02E493EC245C0EBC000AEA9E /* Product+SettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Product+SettingsTests.swift"; sourceTree = "<group>"; };
263265
02E4F5E323CD5628003B0010 /* NSOrderedSet+Array.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSOrderedSet+Array.swift"; sourceTree = "<group>"; };
264266
02F096C3240670A400C0C1D5 /* Media+Equatable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Media+Equatable.swift"; sourceTree = "<group>"; };
265267
02FF054523D983F30058E6E7 /* MediaFileManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaFileManager.swift; sourceTree = "<group>"; };
@@ -528,6 +530,7 @@
528530
isa = PBXGroup;
529531
children = (
530532
0225512422FC312400D98613 /* OrderStatsV4Interval+DateTests.swift */,
533+
02E493EC245C0EBC000AEA9E /* Product+SettingsTests.swift */,
531534
);
532535
path = Extensions;
533536
sourceTree = "<group>";
@@ -1275,6 +1278,7 @@
12751278
0202B6992387B01500F3EBE0 /* AppSettingsStoreTests+ProductsVisibility.swift in Sources */,
12761279
02FF055623D984310058E6E7 /* MockupFileManager.swift in Sources */,
12771280
029B00A7230D64E800B0AE66 /* StatsTimeRangeTests.swift in Sources */,
1281+
02E493ED245C0EBC000AEA9E /* Product+SettingsTests.swift in Sources */,
12781282
02FF055F23D985710058E6E7 /* URL+MediaTests.swift in Sources */,
12791283
02124DAC24318D6B00980D74 /* Media+MediaTypeTests.swift in Sources */,
12801284
025CA2D0238F54E800B05C81 /* ProductShippingClassStoreTests.swift in Sources */,

Yosemite/YosemiteTests/Mockups/MockProduct.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ final class MockProduct {
66
func product(siteID: Int64 = 2019,
77
productID: Int64 = 2020,
88
dateCreated: Date = Date(),
9+
downloadable: Bool = false,
910
name: String = "Hogsmeade",
1011
sku: String? = nil,
1112
stockQuantity: Int? = nil,
1213
stockStatus: ProductStockStatus = .inStock,
1314
variations: [Int64] = [],
15+
virtual: Bool = true,
1416
images: [ProductImage] = [],
1517
shippingClassID: Int64 = 0,
1618
categories: [ProductCategory] = []) -> Product {
@@ -42,8 +44,8 @@ final class MockProduct {
4244
onSale: false,
4345
purchasable: true,
4446
totalSales: 0,
45-
virtual: true,
46-
downloadable: false,
47+
virtual: virtual,
48+
downloadable: downloadable,
4749
downloads: [],
4850
downloadLimit: -1,
4951
downloadExpiry: -1,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import XCTest
2+
@testable import Yosemite
3+
4+
/// Tests for `Product+Settings.swift`.
5+
final class Product_SettingsTests: XCTestCase {
6+
// MARK: - `isShippingEnabled`
7+
8+
func testShippingIsEnabledForAPhysicalProduct() {
9+
let product = MockProduct().product(downloadable: false, virtual: false)
10+
XCTAssertTrue(product.isShippingEnabled)
11+
}
12+
13+
func testShippingIsDisabledForADownloadableProduct() {
14+
let product = MockProduct().product(downloadable: true, virtual: false)
15+
XCTAssertFalse(product.isShippingEnabled)
16+
}
17+
18+
func testShippingIsDisabledForAVirtualProduct() {
19+
let product = MockProduct().product(downloadable: false, virtual: true)
20+
XCTAssertFalse(product.isShippingEnabled)
21+
}
22+
}

0 commit comments

Comments
 (0)