Skip to content

Commit 8ad55b8

Browse files
committed
Adds unit tests for ProductInputTransformerTests
1 parent 2458bb0 commit 8ad55b8

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@
423423
2602A63F27BD880A00B347F1 /* NewOrderInitialStatusResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2602A63E27BD880A00B347F1 /* NewOrderInitialStatusResolver.swift */; };
424424
2602A64227BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2602A64127BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift */; };
425425
2602A64627BDBEBA00B347F1 /* ProductInputTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2602A64527BDBEBA00B347F1 /* ProductInputTransformer.swift */; };
426+
2602A64827BDBF8000B347F1 /* ProductInputTransformerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2602A64727BDBF8000B347F1 /* ProductInputTransformerTests.swift */; };
426427
260C315E2523CC4000157BC2 /* RefundProductsTotalViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 260C315D2523CC4000157BC2 /* RefundProductsTotalViewModel.swift */; };
427428
260C31602524ECA900157BC2 /* IssueRefundViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 260C315F2524ECA900157BC2 /* IssueRefundViewController.swift */; };
428429
260C31622524EEB200157BC2 /* IssueRefundViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 260C31612524EEB200157BC2 /* IssueRefundViewController.xib */; };
@@ -2064,6 +2065,7 @@
20642065
2602A63E27BD880A00B347F1 /* NewOrderInitialStatusResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewOrderInitialStatusResolver.swift; sourceTree = "<group>"; };
20652066
2602A64127BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewOrderInitialStatusResolverTests.swift; sourceTree = "<group>"; };
20662067
2602A64527BDBEBA00B347F1 /* ProductInputTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductInputTransformer.swift; sourceTree = "<group>"; };
2068+
2602A64727BDBF8000B347F1 /* ProductInputTransformerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductInputTransformerTests.swift; sourceTree = "<group>"; };
20672069
260C315D2523CC4000157BC2 /* RefundProductsTotalViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefundProductsTotalViewModel.swift; sourceTree = "<group>"; };
20682070
260C315F2524ECA900157BC2 /* IssueRefundViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IssueRefundViewController.swift; sourceTree = "<group>"; };
20692071
260C31612524EEB200157BC2 /* IssueRefundViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IssueRefundViewController.xib; sourceTree = "<group>"; };
@@ -4301,6 +4303,7 @@
43014303
isa = PBXGroup;
43024304
children = (
43034305
2602A64127BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift */,
4306+
2602A64727BDBF8000B347F1 /* ProductInputTransformerTests.swift */,
43044307
);
43054308
path = Synchronizer;
43064309
sourceTree = "<group>";
@@ -9258,6 +9261,7 @@
92589261
57B374B6245B331100D58BE0 /* EmptyStateViewControllerTests.swift in Sources */,
92599262
020BE76923B4A268007FE54C /* AztecItalicFormatBarCommandTests.swift in Sources */,
92609263
0271E1642509C66200633F7A /* DefaultProductFormTableViewModelTests.swift in Sources */,
9264+
2602A64827BDBF8000B347F1 /* ProductInputTransformerTests.swift in Sources */,
92619265
D802548726552E07001B2CC1 /* CardPresentModalNonRetryableErrorTests.swift in Sources */,
92629266
02BAB02924D13AA500F8B06E /* ProductVariationFormActionsFactoryTests.swift in Sources */,
92639267
B53A569B21123E8E000776C9 /* MockTableView.swift in Sources */,
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import XCTest
2+
import TestKit
3+
import Fakes
4+
5+
@testable import WooCommerce
6+
@testable import Yosemite
7+
8+
class ProductInputTransformerTests: XCTestCase {
9+
10+
private let sampleProductID: Int64 = 123
11+
private let sampleProductVariationID: Int64 = 345
12+
private let sampleInputID: Int64 = 567
13+
14+
func test_sending_a_new_product_input_adds_an_item_to_order() throws {
15+
// Given
16+
let product = Product.fake().copy(productID: sampleProductID, price: "9.99")
17+
let input = OrderSyncProductInput(product: .product(product), quantity: 1)
18+
let originalOrder = OrderFactory.emptyNewOrder
19+
20+
// When
21+
let updatedOrder = ProductInputTransformer.update(input: input, on: originalOrder)
22+
23+
// Then
24+
let item = try XCTUnwrap(updatedOrder.items.first)
25+
XCTAssertEqual(item.itemID, input.id)
26+
XCTAssertEqual(item.quantity, input.quantity)
27+
XCTAssertEqual(item.productID, product.productID)
28+
XCTAssertEqual(item.variationID, 0)
29+
XCTAssertEqual(item.price, 9.99)
30+
XCTAssertEqual(item.subtotal, "9.99")
31+
}
32+
33+
func test_sending_a_new_product_variation_input_adds_an_item_to_order() throws {
34+
// Given
35+
let productVariation = ProductVariation.fake().copy(productID: sampleProductID, productVariationID: sampleProductVariationID, price: "9.99")
36+
let input = OrderSyncProductInput(product: .variation(productVariation), quantity: 1)
37+
let originalOrder = OrderFactory.emptyNewOrder
38+
39+
// When
40+
let updatedOrder = ProductInputTransformer.update(input: input, on: originalOrder)
41+
42+
// Then
43+
let item = try XCTUnwrap(updatedOrder.items.first)
44+
XCTAssertEqual(item.itemID, input.id)
45+
XCTAssertEqual(item.quantity, input.quantity)
46+
XCTAssertEqual(item.productID, productVariation.productID)
47+
XCTAssertEqual(item.variationID, productVariation.productVariationID)
48+
XCTAssertEqual(item.price, 9.99)
49+
XCTAssertEqual(item.subtotal, "9.99")
50+
}
51+
52+
func test_sending_a_new_product_input_twice_adds_adds_two_items_to_order() throws {
53+
// Given
54+
let product = Product.fake().copy(productID: sampleProductID)
55+
let input1 = OrderSyncProductInput(product: .product(product), quantity: 1)
56+
let update1 = ProductInputTransformer.update(input: input1, on: OrderFactory.emptyNewOrder)
57+
58+
// When
59+
let input2 = OrderSyncProductInput(product: .product(product), quantity: 1)
60+
let update2 = ProductInputTransformer.update(input: input2, on: update1)
61+
62+
// Then
63+
XCTAssertEqual(update2.items.count, 2)
64+
}
65+
66+
func test_sending_an_update_product_input_updates_item_on_order() throws {
67+
// Given
68+
let product = Product.fake().copy(productID: sampleProductID, price: "9.99")
69+
let input1 = OrderSyncProductInput(id: sampleProductID, product: .product(product), quantity: 1)
70+
let update1 = ProductInputTransformer.update(input: input1, on: OrderFactory.emptyNewOrder)
71+
72+
// When
73+
let input2 = OrderSyncProductInput(id: sampleProductID, product: .product(product), quantity: 2)
74+
let update2 = ProductInputTransformer.update(input: input2, on: update1)
75+
76+
// Then
77+
let item = try XCTUnwrap(update2.items.first)
78+
XCTAssertEqual(item.itemID, input2.id)
79+
XCTAssertEqual(item.quantity, input2.quantity)
80+
XCTAssertEqual(item.productID, product.productID)
81+
XCTAssertEqual(item.price, 9.99)
82+
XCTAssertEqual(item.subtotal, "19.98")
83+
}
84+
85+
func test_sending_an_zero_quantity_update_product_input_deletes_item_on_order() throws {
86+
// Given
87+
let product = Product.fake().copy(productID: sampleProductID)
88+
let input1 = OrderSyncProductInput(id: sampleProductID, product: .product(product), quantity: 1)
89+
let update1 = ProductInputTransformer.update(input: input1, on: OrderFactory.emptyNewOrder)
90+
91+
// When
92+
let input2 = OrderSyncProductInput(id: sampleProductID, product: .product(product), quantity: 0)
93+
let update2 = ProductInputTransformer.update(input: input2, on: update1)
94+
95+
// Then
96+
XCTAssertEqual(update2.items.count, 0)
97+
}
98+
}

0 commit comments

Comments
 (0)