Skip to content

Commit ab71a38

Browse files
committed
Add PriceInputViewControllerTests
1 parent 3cd4565 commit ab71a38

File tree

3 files changed

+79
-1
lines changed

3 files changed

+79
-1
lines changed

WooCommerce/Classes/ViewRelated/Products/PriceInputViewController.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@ final class PriceInputViewController: UIViewController {
1515
return noticePresenter
1616
}()
1717

18-
init(viewModel: PriceInputViewModel) {
18+
init(viewModel: PriceInputViewModel, noticePresenter: NoticePresenter? = nil) {
1919
self.viewModel = viewModel
2020
super.init(nibName: nil, bundle: nil)
21+
22+
if let noticePresenter {
23+
self.noticePresenter = noticePresenter
24+
}
2125
}
2226
required init?(coder: NSCoder) {
2327
fatalError("init(coder:) has not been implemented")

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,6 +1277,7 @@
12771277
AEE9A880293A3E5500227C92 /* RefreshablePlainList.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE9A87F293A3E5500227C92 /* RefreshablePlainList.swift */; };
12781278
AEFF77A42978389400667F7A /* PriceInputViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFF77A32978389400667F7A /* PriceInputViewController.swift */; };
12791279
AEFF77A629783CA600667F7A /* PriceInputViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFF77A529783CA600667F7A /* PriceInputViewModel.swift */; };
1280+
AEFF77A829786A2900667F7A /* PriceInputViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFF77A729786A2900667F7A /* PriceInputViewControllerTests.swift */; };
12801281
B50911302049E27A007D25DC /* DashboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B509112D2049E27A007D25DC /* DashboardViewController.swift */; };
12811282
B509FED121C041DF000076A9 /* Locale+Woo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B509FED021C041DF000076A9 /* Locale+Woo.swift */; };
12821283
B509FED321C05121000076A9 /* SupportManagerAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B509FED221C05121000076A9 /* SupportManagerAdapter.swift */; };
@@ -3333,6 +3334,7 @@
33333334
AEE9A87F293A3E5500227C92 /* RefreshablePlainList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshablePlainList.swift; sourceTree = "<group>"; };
33343335
AEFF77A32978389400667F7A /* PriceInputViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceInputViewController.swift; sourceTree = "<group>"; };
33353336
AEFF77A529783CA600667F7A /* PriceInputViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceInputViewModel.swift; sourceTree = "<group>"; };
3337+
AEFF77A729786A2900667F7A /* PriceInputViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceInputViewControllerTests.swift; sourceTree = "<group>"; };
33363338
B509112D2049E27A007D25DC /* DashboardViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DashboardViewController.swift; sourceTree = "<group>"; };
33373339
B509FED021C041DF000076A9 /* Locale+Woo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Locale+Woo.swift"; sourceTree = "<group>"; };
33383340
B509FED221C05121000076A9 /* SupportManagerAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportManagerAdapter.swift; sourceTree = "<group>"; };
@@ -5433,6 +5435,7 @@
54335435
children = (
54345436
093B265827DF15100026F92D /* BulkUpdatePriceViewControllerTests.swift */,
54355437
09BE3A9027C921A70070B69D /* BulkUpdatePriceSettingsViewModelTests.swift */,
5438+
AEFF77A729786A2900667F7A /* PriceInputViewControllerTests.swift */,
54365439
);
54375440
path = "Bulk Edit Price";
54385441
sourceTree = "<group>";
@@ -11642,6 +11645,7 @@
1164211645
57A5D8D92534FEBB00AA54D6 /* TotalRefundedCalculationUseCaseTests.swift in Sources */,
1164311646
B5718D6521B56B400026C9F0 /* PushNotificationsManagerTests.swift in Sources */,
1164411647
D8A8C4F32268288F001C72BF /* AddManualCustomTrackingViewModelTests.swift in Sources */,
11648+
AEFF77A829786A2900667F7A /* PriceInputViewControllerTests.swift in Sources */,
1164511649
02C2756F24F5F5EE00286C04 /* ProductShippingSettingsViewModel+ProductVariationTests.swift in Sources */,
1164611650
571FDDAE24C768DC00D486A5 /* MockZendeskManager.swift in Sources */,
1164711651
45FBDF3C238D4EA800127F77 /* ExtendedAddProductImageCollectionViewCellTests.swift in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import Foundation
2+
import XCTest
3+
import Yosemite
4+
5+
@testable import WooCommerce
6+
7+
/// Tests for `PriceInputViewController`.
8+
///
9+
final class PriceInputViewControllerTests: XCTestCase {
10+
private let sampleSiteID: Int64 = 123
11+
private var storesManager: MockStoresManager!
12+
13+
override func setUp() {
14+
super.setUp()
15+
storesManager = MockStoresManager(sessionManager: .makeForTesting())
16+
}
17+
18+
override func tearDown() {
19+
storesManager = nil
20+
super.tearDown()
21+
}
22+
23+
func test_view_controller_displays_notice_on_selected_regular_price_is_less_than_sale_price_validation_error() throws {
24+
// Given
25+
let noticePresenter = MockNoticePresenter()
26+
let listViewModel = ProductListViewModel(siteID: sampleSiteID, stores: storesManager)
27+
let sampleProduct1 = Product.fake().copy(productID: 1, dateOnSaleStart: Date(), dateOnSaleEnd: Date(), regularPrice: "100", salePrice: "42")
28+
listViewModel.selectProduct(sampleProduct1)
29+
30+
let viewModel = PriceInputViewModel(productListViewModel: listViewModel)
31+
let viewController = PriceInputViewController(viewModel: viewModel, noticePresenter: noticePresenter)
32+
33+
// When
34+
_ = try XCTUnwrap(viewController.view)
35+
viewModel.handlePriceChange("24")
36+
viewModel.applyButtonTapped()
37+
38+
waitUntil {
39+
noticePresenter.queuedNotices.count == 1
40+
}
41+
42+
// Then
43+
let notice = try XCTUnwrap(noticePresenter.queuedNotices.first)
44+
XCTAssertEqual(notice.feedbackType, .error)
45+
}
46+
47+
func test_view_controller_displays_notice_on_no_regular_price_validation_error() throws {
48+
// Given
49+
let noticePresenter = MockNoticePresenter()
50+
let listViewModel = ProductListViewModel(siteID: sampleSiteID, stores: storesManager)
51+
let sampleProduct1 = Product.fake().copy(productID: 1, dateOnSaleStart: Date(), dateOnSaleEnd: Date(), regularPrice: "100", salePrice: "42")
52+
listViewModel.selectProduct(sampleProduct1)
53+
54+
let viewModel = PriceInputViewModel(productListViewModel: listViewModel)
55+
let viewController = PriceInputViewController(viewModel: viewModel, noticePresenter: noticePresenter)
56+
57+
// When
58+
_ = try XCTUnwrap(viewController.view)
59+
viewModel.handlePriceChange("")
60+
viewModel.applyButtonTapped()
61+
62+
waitUntil {
63+
noticePresenter.queuedNotices.count == 1
64+
}
65+
66+
// Then
67+
let notice = try XCTUnwrap(noticePresenter.queuedNotices.first)
68+
XCTAssertEqual(notice.feedbackType, .error)
69+
}
70+
}

0 commit comments

Comments
 (0)