@@ -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