Skip to content

Commit 1139bdb

Browse files
committed
Adds unit tests
1 parent b250a48 commit 1139bdb

File tree

3 files changed

+130
-2
lines changed

3 files changed

+130
-2
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Creation/Synchronizer/NewOrderInitialStatusResolver.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import Yosemite
33
/// Helper that defines which `status` a new order should initially have.
44
///
55
struct NewOrderInitialStatusResolver {
6-
76
/// Current site ID
87
///
98
private let siteID: Int64
@@ -20,6 +19,10 @@ struct NewOrderInitialStatusResolver {
2019
///
2120
private let wcPluginName = "WooCommerce"
2221

22+
init(siteID: Int64, stores: StoresManager = ServiceLocator.stores) {
23+
self.siteID = siteID
24+
self.stores = stores
25+
}
2326

2427
/// Decides the initial `status` for a new order based on the current store version.
2528
///
@@ -37,6 +40,6 @@ struct NewOrderInitialStatusResolver {
3740
onCompletion(.pending)
3841
}
3942
}
40-
ServiceLocator.stores.dispatch(action)
43+
stores.dispatch(action)
4144
}
4245
}

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@
421421
24F98C502502AEE200F49B68 /* EventLogging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F98C4F2502AEE200F49B68 /* EventLogging.swift */; };
422422
2602A63D27BD3C8C00B347F1 /* RemoteOrderSynchronizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2602A63C27BD3C8C00B347F1 /* RemoteOrderSynchronizer.swift */; };
423423
2602A63F27BD880A00B347F1 /* NewOrderInitialStatusResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2602A63E27BD880A00B347F1 /* NewOrderInitialStatusResolver.swift */; };
424+
2602A64227BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2602A64127BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift */; };
424425
260C315E2523CC4000157BC2 /* RefundProductsTotalViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 260C315D2523CC4000157BC2 /* RefundProductsTotalViewModel.swift */; };
425426
260C31602524ECA900157BC2 /* IssueRefundViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 260C315F2524ECA900157BC2 /* IssueRefundViewController.swift */; };
426427
260C31622524EEB200157BC2 /* IssueRefundViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 260C31612524EEB200157BC2 /* IssueRefundViewController.xib */; };
@@ -2060,6 +2061,7 @@
20602061
25D00C97936D2C6589F8ECE9 /* Pods-WooCommerce.release-alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WooCommerce.release-alpha.xcconfig"; path = "../Pods/Target Support Files/Pods-WooCommerce/Pods-WooCommerce.release-alpha.xcconfig"; sourceTree = "<group>"; };
20612062
2602A63C27BD3C8C00B347F1 /* RemoteOrderSynchronizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteOrderSynchronizer.swift; sourceTree = "<group>"; };
20622063
2602A63E27BD880A00B347F1 /* NewOrderInitialStatusResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewOrderInitialStatusResolver.swift; sourceTree = "<group>"; };
2064+
2602A64127BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewOrderInitialStatusResolverTests.swift; sourceTree = "<group>"; };
20632065
260C315D2523CC4000157BC2 /* RefundProductsTotalViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefundProductsTotalViewModel.swift; sourceTree = "<group>"; };
20642066
260C315F2524ECA900157BC2 /* IssueRefundViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IssueRefundViewController.swift; sourceTree = "<group>"; };
20652067
260C31612524EEB200157BC2 /* IssueRefundViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IssueRefundViewController.xib; sourceTree = "<group>"; };
@@ -4293,6 +4295,14 @@
42934295
path = "Edit Order Status";
42944296
sourceTree = "<group>";
42954297
};
4298+
2602A64027BD89B300B347F1 /* Synchronizer */ = {
4299+
isa = PBXGroup;
4300+
children = (
4301+
2602A64127BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift */,
4302+
);
4303+
path = Synchronizer;
4304+
sourceTree = "<group>";
4305+
};
42964306
2611EE57243A46C500A74490 /* Categories */ = {
42974307
isa = PBXGroup;
42984308
children = (
@@ -6306,6 +6316,7 @@
63066316
CC53FB3F2759042600C4CA4F /* AddProductToOrderViewModelTests.swift */,
63076317
CC13C0CC278E086D00C0B5B5 /* AddProductVariationToOrderViewModelTests.swift */,
63086318
AE90475B27A99D6000073E1D /* CreateOrderAddressFormViewModelTests.swift */,
6319+
2602A64027BD89B300B347F1 /* Synchronizer */,
63096320
);
63106321
path = "Order Creation";
63116322
sourceTree = "<group>";
@@ -9289,6 +9300,7 @@
92899300
31F635DC273AF0B100E14F10 /* VersionHelpersTests.swift in Sources */,
92909301
FE3E427726A8545B00C596CE /* MockRoleEligibilityUseCase.swift in Sources */,
92919302
02F67FF525806E0100C3BAD2 /* ShippingLabelTrackingURLGeneratorTests.swift in Sources */,
9303+
2602A64227BD89CE00B347F1 /* NewOrderInitialStatusResolverTests.swift in Sources */,
92929304
570AAB052472FACB00516C0C /* OrderDetailsDataSourceTests.swift in Sources */,
92939305
CC77488E2719A07D0043CDD7 /* ShippingLabelAddressTopBannerFactoryTests.swift in Sources */,
92949306
B517EA1A218B2D2600730EC4 /* StringFormatterTests.swift in Sources */,
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import XCTest
2+
import TestKit
3+
import Fakes
4+
5+
@testable import WooCommerce
6+
@testable import Yosemite
7+
8+
class NewOrderInitialStatusResolverTests: XCTestCase {
9+
10+
private let sampleSiteID: Int64 = 1234
11+
12+
func test_no_store_version_use_pending_status() {
13+
// Given
14+
let stores = createStoreWithVersion(nil)
15+
16+
// When
17+
let resolver = NewOrderInitialStatusResolver(siteID: sampleSiteID, stores: stores)
18+
let initialStatus: OrderStatusEnum = waitFor { promise in
19+
resolver.resolve { status in
20+
promise(status)
21+
}
22+
}
23+
24+
// Then
25+
XCTAssertEqual(initialStatus, .pending)
26+
}
27+
28+
func test_older_store_version_use_pending_status() {
29+
// Given
30+
let stores = createStoreWithVersion("6.2.5")
31+
32+
// When
33+
let resolver = NewOrderInitialStatusResolver(siteID: sampleSiteID, stores: stores)
34+
let initialStatus: OrderStatusEnum = waitFor { promise in
35+
resolver.resolve { status in
36+
promise(status)
37+
}
38+
}
39+
40+
// Then
41+
XCTAssertEqual(initialStatus, .pending)
42+
}
43+
44+
func test_same_store_version_use_draft_status() {
45+
// Given
46+
let stores = createStoreWithVersion("6.3.0")
47+
48+
// When
49+
let resolver = NewOrderInitialStatusResolver(siteID: sampleSiteID, stores: stores)
50+
let initialStatus: OrderStatusEnum = waitFor { promise in
51+
resolver.resolve { status in
52+
promise(status)
53+
}
54+
}
55+
56+
// Then
57+
XCTAssertEqual(initialStatus, .autoDraft)
58+
}
59+
60+
func test_newer_store_version_use_draft_status() {
61+
// Given
62+
let stores = createStoreWithVersion("6.4.0")
63+
64+
// When
65+
let resolver = NewOrderInitialStatusResolver(siteID: sampleSiteID, stores: stores)
66+
let initialStatus: OrderStatusEnum = waitFor { promise in
67+
resolver.resolve { status in
68+
promise(status)
69+
}
70+
}
71+
72+
// Then
73+
XCTAssertEqual(initialStatus, .autoDraft)
74+
}
75+
76+
func test_beta_store_version_use_draft_status() {
77+
// Given
78+
let stores = createStoreWithVersion("6.3.0-beta.1")
79+
80+
// When
81+
let resolver = NewOrderInitialStatusResolver(siteID: sampleSiteID, stores: stores)
82+
let initialStatus: OrderStatusEnum = waitFor { promise in
83+
resolver.resolve { status in
84+
promise(status)
85+
}
86+
}
87+
88+
// Then
89+
XCTAssertEqual(initialStatus, .autoDraft)
90+
}
91+
}
92+
93+
private extension NewOrderInitialStatusResolverTests {
94+
95+
/// Creates a mock store manager that returns the provided version as part of the `SystemStatusAction.fetchSystemPlugin` action.
96+
///
97+
func createStoreWithVersion(_ version: String?) -> StoresManager {
98+
let stores = MockStoresManager(sessionManager: .testingInstance)
99+
stores.whenReceivingAction(ofType: SystemStatusAction.self) { action in
100+
switch action {
101+
case let .fetchSystemPlugin(_, _, onCompletion):
102+
guard let version = version else {
103+
return onCompletion(nil)
104+
}
105+
let plugin = SystemPlugin.fake().copy(version: version)
106+
onCompletion(plugin)
107+
default:
108+
XCTFail("Unexpected action received: \(action)")
109+
}
110+
}
111+
return stores
112+
}
113+
}

0 commit comments

Comments
 (0)