Skip to content

Commit 91194ec

Browse files
committed
Update product and variation list view models to remove references to protocol
1 parent 0ab5c26 commit 91194ec

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Creation/ProductsSection/AddProductToOrderViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ final class AddProductToOrderViewModel: ObservableObject {
4848

4949
/// Current sync status; used to determine what list view to display.
5050
///
51-
@Published private(set) var syncStatus: AddProductToOrderSyncStatus?
51+
@Published private(set) var syncStatus: SyncStatus?
5252

5353
/// SyncCoordinator: Keeps tracks of which pages have been refreshed, and encapsulates the "What should we sync now" logic.
5454
///

WooCommerce/Classes/ViewRelated/Orders/Order Creation/ProductsSection/AddProductVariationToOrderViewModel.swift

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import Yosemite
22
import protocol Storage.StorageManagerType
33

4-
/// View model for `AddProductToOrder` with a list of product variations for a product.
4+
/// View model for `AddProductVariationToOrder`.
55
///
6-
final class AddProductVariationToOrderViewModel: AddProductToOrderViewModelProtocol {
6+
final class AddProductVariationToOrderViewModel: ObservableObject {
77
private let siteID: Int64
88

99
/// Storage to fetch product variation list
@@ -24,17 +24,17 @@ final class AddProductVariationToOrderViewModel: AddProductToOrderViewModelProto
2424
productVariationsResultsController.fetchedObjects.filter { $0.purchasable }
2525
}
2626

27-
/// View models for each product row
27+
/// View models for each product variation row
2828
///
29-
var productRows: [ProductRowViewModel] {
29+
var productVariationRows: [ProductRowViewModel] {
3030
productVariations.map { .init(productVariation: $0, allAttributes: product.attributesForVariations, canChangeQuantity: false) }
3131
}
3232

3333
// MARK: Sync & Storage properties
3434

3535
/// Current sync status; used to determine what list view to display.
3636
///
37-
@Published private(set) var syncStatus: AddProductToOrderSyncStatus?
37+
@Published private(set) var syncStatus: SyncStatus?
3838

3939
/// SyncCoordinator: Keeps tracks of which pages have been refreshed, and encapsulates the "What should we sync now" logic.
4040
///
@@ -68,7 +68,7 @@ final class AddProductVariationToOrderViewModel: AddProductToOrderViewModelProto
6868

6969
/// Select a product variation to add to the order
7070
///
71-
func selectProductOrVariation(_ productID: Int64) {
71+
func selectVariation(_ productID: Int64) {
7272
// TODO: Add the selected product variation to the order
7373
}
7474
}
@@ -155,3 +155,14 @@ private extension AddProductVariationToOrderViewModel {
155155
syncingCoordinator.delegate = self
156156
}
157157
}
158+
159+
// MARK: - Utils
160+
extension AddProductVariationToOrderViewModel {
161+
/// Represents possible statuses for syncing product variations
162+
///
163+
enum SyncStatus {
164+
case firstPageSync
165+
case results
166+
case empty
167+
}
168+
}

WooCommerce/WooCommerceTests/ViewRelated/Orders/Order Creation/AddProductVariationToOrderViewModelTests.swift

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class AddProductVariationToOrderViewModelTests: XCTestCase {
2424
super.tearDown()
2525
}
2626

27-
func test_view_model_adds_product_rows_with_unchangeable_quantity() {
27+
func test_view_model_adds_product_variation_rows_with_unchangeable_quantity() {
2828
// Given
2929
let product = Product.fake().copy(productID: sampleProductID)
3030
let productVariation = ProductVariation.fake().copy(siteID: sampleSiteID, productID: sampleProductID, purchasable: true)
@@ -34,13 +34,14 @@ class AddProductVariationToOrderViewModelTests: XCTestCase {
3434
let viewModel = AddProductVariationToOrderViewModel(siteID: sampleSiteID, product: product, storageManager: storageManager)
3535

3636
// Then
37-
XCTAssertEqual(viewModel.productRows.count, 1)
37+
XCTAssertEqual(viewModel.productVariationRows.count, 1)
3838

39-
let productRow = viewModel.productRows[0]
40-
XCTAssertFalse(productRow.canChangeQuantity, "Product row canChangeQuantity property should be false but is true instead")
39+
let productVariationRow = viewModel.productVariationRows[0]
40+
XCTAssertFalse(productVariationRow.canChangeQuantity,
41+
"Product variation row canChangeQuantity property should be false but is true instead")
4142
}
4243

43-
func test_product_rows_only_include_purchasable_product_variations() {
44+
func test_product_variation_rows_only_include_purchasable_product_variations() {
4445
// Given
4546
let product = Product.fake().copy(productID: sampleProductID)
4647
let purchasableProductVariation = ProductVariation.fake().copy(siteID: sampleSiteID,
@@ -54,8 +55,10 @@ class AddProductVariationToOrderViewModelTests: XCTestCase {
5455
let viewModel = AddProductVariationToOrderViewModel(siteID: sampleSiteID, product: product, storageManager: storageManager)
5556

5657
// Then
57-
XCTAssertTrue(viewModel.productRows.contains(where: { $0.productOrVariationID == 1 }), "Product rows do not include purchasable product variation")
58-
XCTAssertFalse(viewModel.productRows.contains(where: { $0.productOrVariationID == 2 }), "Product rows include non-purchasable product variation")
58+
XCTAssertTrue(viewModel.productVariationRows.contains(where: { $0.productOrVariationID == 1 }),
59+
"Product variation rows do not include purchasable product variation")
60+
XCTAssertFalse(viewModel.productVariationRows.contains(where: { $0.productOrVariationID == 2 }),
61+
"Product variation rows include non-purchasable product variation")
5962
}
6063

6164
func test_scrolling_indicator_appears_only_during_sync() {

0 commit comments

Comments
 (0)