Skip to content

Commit 64dbfcd

Browse files
committed
Adds Unit tests foir ProductVariationGeneratorTests
1 parent 6f41d6e commit 64dbfcd

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed

WooCommerce/Classes/ViewRelated/Products/Variations/ProductVariationGenerator.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ struct ProductVariationGenerator {
6969
let attributes = combination.options.map { option in
7070
ProductVariationAttribute(id: option.attributeID, name: option.attributeName, option: option.value)
7171
}
72+
// Setting a regular price is not required when creating a variation.
7273
return CreateProductVariation(regularPrice: "", attributes: attributes)
7374
}
7475
}

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,7 @@
633633
2676F4CC2908284800C7A15B /* ProductCreationTypeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2676F4CB2908284800C7A15B /* ProductCreationTypeCommand.swift */; };
634634
26771A14256FFA8700EE030E /* IssueRefundCoordinatingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26771A13256FFA8700EE030E /* IssueRefundCoordinatingController.swift */; };
635635
2678897C270E6E8B00BD249E /* SimplePaymentsAmount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2678897B270E6E8B00BD249E /* SimplePaymentsAmount.swift */; };
636+
267D6882296485850072ED0C /* ProductVariationGeneratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 267D6881296485850072ED0C /* ProductVariationGeneratorTests.swift */; };
636637
2687165524D21BC80042F6AE /* SurveySubmittedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2687165324D21BC80042F6AE /* SurveySubmittedViewController.swift */; };
637638
2687165624D21BC80042F6AE /* SurveySubmittedViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2687165424D21BC80042F6AE /* SurveySubmittedViewController.xib */; };
638639
2687165A24D350C20042F6AE /* SurveyCoordinatingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2687165924D350C20042F6AE /* SurveyCoordinatingController.swift */; };
@@ -2683,6 +2684,7 @@
26832684
26771A13256FFA8700EE030E /* IssueRefundCoordinatingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IssueRefundCoordinatingController.swift; sourceTree = "<group>"; };
26842685
2678897B270E6E8B00BD249E /* SimplePaymentsAmount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimplePaymentsAmount.swift; sourceTree = "<group>"; };
26852686
267CFE1824435A5500AF3A13 /* ProductCategoryViewModelBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductCategoryViewModelBuilderTests.swift; sourceTree = "<group>"; };
2687+
267D6881296485850072ED0C /* ProductVariationGeneratorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductVariationGeneratorTests.swift; sourceTree = "<group>"; };
26862688
2687165324D21BC80042F6AE /* SurveySubmittedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurveySubmittedViewController.swift; sourceTree = "<group>"; };
26872689
2687165424D21BC80042F6AE /* SurveySubmittedViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SurveySubmittedViewController.xib; sourceTree = "<group>"; };
26882690
2687165924D350C20042F6AE /* SurveyCoordinatingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurveyCoordinatingController.swift; sourceTree = "<group>"; };
@@ -7814,6 +7816,7 @@
78147816
09C6A26027C01151001FAD73 /* Bulk Update */,
78157817
CCD2E68825DD52C100BD975D /* ProductVariationsViewModelTests.swift */,
78167818
26F65C9D25DEDE67008FAE29 /* GenerateVariationUseCaseTests.swift */,
7819+
267D6881296485850072ED0C /* ProductVariationGeneratorTests.swift */,
78177820
);
78187821
path = Variations;
78197822
sourceTree = "<group>";
@@ -11281,6 +11284,7 @@
1128111284
CE4DA5C821DD759400074607 /* CurrencyFormatterTests.swift in Sources */,
1128211285
DE61979528A25842005E4362 /* StorePickerViewModelTests.swift in Sources */,
1128311286
B57C745120F56EE900EEFC87 /* UITableViewCellHelpersTests.swift in Sources */,
11287+
267D6882296485850072ED0C /* ProductVariationGeneratorTests.swift in Sources */,
1128411288
0225C42824768A4C00C5B4F0 /* FilterProductListViewModelTests.swift in Sources */,
1128511289
D85136C9231E12B600DD0539 /* ReviewViewModelTests.swift in Sources */,
1128611290
57C5FF7C25091DE50074EC26 /* OrderListSyncActionUseCaseTests.swift in Sources */,
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import XCTest
2+
@testable import WooCommerce
3+
@testable import Yosemite
4+
5+
final class ProductVariationGeneratorTests: XCTestCase {
6+
7+
func test_all_variations_are_generated_correctly() {
8+
// Given
9+
let product = Product.fake().copy(attributes: [
10+
ProductAttribute.fake().copy(attributeID: 1, name: "Size", options: ["S", "M"]),
11+
ProductAttribute.fake().copy(attributeID: 2, name: "Color", options: ["Red", "Green"]),
12+
ProductAttribute.fake().copy(attributeID: 3, name: "Fabric", options: ["Cotton", "Nylon"]),
13+
])
14+
15+
// When
16+
let variations = ProductVariationGenerator.generateVariations(for: product, excluding: [])
17+
18+
// Then
19+
XCTAssertEqual(variations, [
20+
CreateProductVariation(regularPrice: "", attributes: [
21+
.init(id: 1, name: "Size", option: "S"),
22+
.init(id: 2, name: "Color", option: "Red"),
23+
.init(id: 3, name: "Fabric", option: "Cotton")
24+
]),
25+
CreateProductVariation(regularPrice: "", attributes: [
26+
.init(id: 1, name: "Size", option: "S"),
27+
.init(id: 2, name: "Color", option: "Red"),
28+
.init(id: 3, name: "Fabric", option: "Nylon")
29+
]),
30+
CreateProductVariation(regularPrice: "", attributes: [
31+
.init(id: 1, name: "Size", option: "S"),
32+
.init(id: 2, name: "Color", option: "Green"),
33+
.init(id: 3, name: "Fabric", option: "Cotton")
34+
]),
35+
CreateProductVariation(regularPrice: "", attributes: [
36+
.init(id: 1, name: "Size", option: "S"),
37+
.init(id: 2, name: "Color", option: "Green"),
38+
.init(id: 3, name: "Fabric", option: "Nylon")
39+
]),
40+
CreateProductVariation(regularPrice: "", attributes: [
41+
.init(id: 1, name: "Size", option: "M"),
42+
.init(id: 2, name: "Color", option: "Red"),
43+
.init(id: 3, name: "Fabric", option: "Cotton")
44+
]),
45+
CreateProductVariation(regularPrice: "", attributes: [
46+
.init(id: 1, name: "Size", option: "M"),
47+
.init(id: 2, name: "Color", option: "Red"),
48+
.init(id: 3, name: "Fabric", option: "Nylon")
49+
]),
50+
CreateProductVariation(regularPrice: "", attributes: [
51+
.init(id: 1, name: "Size", option: "M"),
52+
.init(id: 2, name: "Color", option: "Green"),
53+
.init(id: 3, name: "Fabric", option: "Cotton")
54+
]),
55+
CreateProductVariation(regularPrice: "", attributes: [
56+
.init(id: 1, name: "Size", option: "M"),
57+
.init(id: 2, name: "Color", option: "Green"),
58+
.init(id: 3, name: "Fabric", option: "Nylon")
59+
]),
60+
])
61+
}
62+
63+
func test_existing_variations_are_excluded_correctly() {
64+
// Given
65+
let product = Product.fake().copy(attributes: [
66+
ProductAttribute.fake().copy(attributeID: 1, name: "Size", options: ["S", "M"]),
67+
ProductAttribute.fake().copy(attributeID: 2, name: "Color", options: ["Red", "Green"]),
68+
ProductAttribute.fake().copy(attributeID: 3, name: "Fabric", options: ["Cotton", "Nylon"]),
69+
])
70+
71+
let existingVariations = [
72+
ProductVariation.fake().copy(attributes: [
73+
.init(id: 1, name: "Size", option: "M"),
74+
.init(id: 2, name: "Color", option: "Green"),
75+
.init(id: 3, name: "Fabric", option: "Cotton"),
76+
]),
77+
ProductVariation.fake().copy(attributes: [
78+
.init(id: 1, name: "Size", option: "S"),
79+
.init(id: 2, name: "Color", option: "Red"),
80+
.init(id: 3, name: "Fabric", option: "Nylon"),
81+
])
82+
]
83+
84+
// When
85+
let variations = ProductVariationGenerator.generateVariations(for: product, excluding: existingVariations)
86+
87+
// Then
88+
XCTAssertEqual(variations, [
89+
CreateProductVariation(regularPrice: "", attributes: [
90+
.init(id: 1, name: "Size", option: "S"),
91+
.init(id: 2, name: "Color", option: "Red"),
92+
.init(id: 3, name: "Fabric", option: "Cotton")
93+
]),
94+
CreateProductVariation(regularPrice: "", attributes: [
95+
.init(id: 1, name: "Size", option: "S"),
96+
.init(id: 2, name: "Color", option: "Green"),
97+
.init(id: 3, name: "Fabric", option: "Cotton")
98+
]),
99+
CreateProductVariation(regularPrice: "", attributes: [
100+
.init(id: 1, name: "Size", option: "S"),
101+
.init(id: 2, name: "Color", option: "Green"),
102+
.init(id: 3, name: "Fabric", option: "Nylon")
103+
]),
104+
CreateProductVariation(regularPrice: "", attributes: [
105+
.init(id: 1, name: "Size", option: "M"),
106+
.init(id: 2, name: "Color", option: "Red"),
107+
.init(id: 3, name: "Fabric", option: "Cotton")
108+
]),
109+
CreateProductVariation(regularPrice: "", attributes: [
110+
.init(id: 1, name: "Size", option: "M"),
111+
.init(id: 2, name: "Color", option: "Red"),
112+
.init(id: 3, name: "Fabric", option: "Nylon")
113+
]),
114+
CreateProductVariation(regularPrice: "", attributes: [
115+
.init(id: 1, name: "Size", option: "M"),
116+
.init(id: 2, name: "Color", option: "Green"),
117+
.init(id: 3, name: "Fabric", option: "Nylon")
118+
]),
119+
])
120+
}
121+
}

0 commit comments

Comments
 (0)