Skip to content

Commit 3cd4565

Browse files
committed
Update ProductListViewModelTests
1 parent e9e26e8 commit 3cd4565

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

WooCommerce/WooCommerceTests/ViewRelated/Products/ProductListViewModelTests.swift

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,28 @@ final class ProductListViewModelTests: XCTestCase {
142142
XCTAssertNil(viewModel.commonStatusForSelectedProducts)
143143
}
144144

145+
func test_common_price_works_correctly() {
146+
// Given
147+
let viewModel = ProductListViewModel(siteID: sampleSiteID, stores: storesManager)
148+
let sampleProduct1 = Product.fake().copy(productID: 1, regularPrice: "100")
149+
let sampleProduct2 = Product.fake().copy(productID: 2, regularPrice: "100")
150+
let sampleProduct3 = Product.fake().copy(productID: 3, regularPrice: "200")
151+
XCTAssertEqual(viewModel.commonPriceForSelectedProducts, .none)
152+
153+
// When
154+
viewModel.selectProduct(sampleProduct1)
155+
viewModel.selectProduct(sampleProduct2)
156+
157+
// Then
158+
XCTAssertEqual(viewModel.commonPriceForSelectedProducts, .value("100"))
159+
160+
// When
161+
viewModel.selectProduct(sampleProduct3)
162+
163+
// Then
164+
XCTAssertEqual(viewModel.commonPriceForSelectedProducts, .mixed)
165+
}
166+
145167
func test_updating_products_with_status_sets_correct_status() throws {
146168
// Given
147169
let viewModel = ProductListViewModel(siteID: sampleSiteID, stores: storesManager)
@@ -172,4 +194,35 @@ final class ProductListViewModelTests: XCTestCase {
172194
// Then
173195
XCTAssertTrue(result.isSuccess)
174196
}
197+
198+
func test_updating_products_with_price_sets_correct_price() throws {
199+
// Given
200+
let viewModel = ProductListViewModel(siteID: sampleSiteID, stores: storesManager)
201+
let sampleProduct1 = Product.fake().copy(productID: 1, regularPrice: "100")
202+
let sampleProduct2 = Product.fake().copy(productID: 2, regularPrice: "100")
203+
let sampleProduct3 = Product.fake().copy(productID: 3, regularPrice: "200")
204+
205+
storesManager.whenReceivingAction(ofType: ProductAction.self) { action in
206+
switch action {
207+
case let .updateProducts(_, products, completion):
208+
XCTAssertTrue(products.allSatisfy { $0.regularPrice == "150" })
209+
completion(.success(products))
210+
default:
211+
break
212+
}
213+
}
214+
215+
// When
216+
viewModel.selectProduct(sampleProduct1)
217+
viewModel.selectProduct(sampleProduct2)
218+
viewModel.selectProduct(sampleProduct3)
219+
let result = waitFor { promise in
220+
viewModel.updateSelectedProducts(with: "150") { result in
221+
promise(result)
222+
}
223+
}
224+
225+
// Then
226+
XCTAssertTrue(result.isSuccess)
227+
}
175228
}

0 commit comments

Comments
 (0)