Skip to content

Commit 429a174

Browse files
authored
Remove favoriteProducts feature flag (#15786)
2 parents 17e46f1 + 7c56b3b commit 429a174

File tree

8 files changed

+16
-78
lines changed

8 files changed

+16
-78
lines changed

Modules/Sources/Experiments/DefaultFeatureFlagService.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ public struct DefaultFeatureFlagService: FeatureFlagService {
7171
return true
7272
case .blazeCampaignObjective:
7373
return true
74-
case .favoriteProducts:
75-
return true
7674
case .hideSitesInStorePicker:
7775
return true
7876
case .filterHistoryOnOrderAndProductLists:

Modules/Sources/Experiments/FeatureFlag.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,6 @@ public enum FeatureFlag: Int {
157157
///
158158
case blazeCampaignObjective
159159

160-
/// Allows marking product as favorite
161-
///
162-
case favoriteProducts
163-
164160
/// Supports hiding sites from the store picker
165161
///
166162
case hideSitesInStorePicker

WooCommerce/Classes/ViewRelated/Products/Edit Product/FavoriteProducts/FavoriteProductsUseCase.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,6 @@ struct DefaultFavoriteProductsUseCase: FavoriteProductsUseCase {
6868

6969
@MainActor
7070
func favoriteProductIDs() async -> [Int64] {
71-
guard featureFlagService.isFeatureFlagEnabled(.favoriteProducts) else {
72-
return []
73-
}
7471
return await withCheckedContinuation { continuation in
7572
stores.dispatch(AppSettingsAction.loadFavoriteProductIDs(siteID: siteID, onCompletion: { savedFavProductIDs in
7673
continuation.resume(returning: savedFavProductIDs)

WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormViewModel.swift

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,6 @@ final class ProductFormViewModel: ProductFormViewModelProtocol {
230230
///
231231
private lazy var remoteActionUseCase = ProductFormRemoteActionUseCase(stores: stores)
232232

233-
private let featureFlagService: FeatureFlagService
234-
235233
init(product: EditableProductModel,
236234
formType: ProductFormType,
237235
productImageActionHandler: ProductImageActionHandler,
@@ -240,8 +238,7 @@ final class ProductFormViewModel: ProductFormViewModelProtocol {
240238
productImagesUploader: ProductImageUploaderProtocol = ServiceLocator.productImageUploader,
241239
analytics: Analytics = ServiceLocator.analytics,
242240
blazeEligibilityChecker: BlazeEligibilityCheckerProtocol = BlazeEligibilityChecker(),
243-
favoriteProductsUseCase: FavoriteProductsUseCase? = nil,
244-
featureFlagService: FeatureFlagService = ServiceLocator.featureFlagService) {
241+
favoriteProductsUseCase: FavoriteProductsUseCase? = nil) {
245242
self.formType = formType
246243
self.productImageActionHandler = productImageActionHandler
247244
self.originalProduct = product
@@ -253,7 +250,6 @@ final class ProductFormViewModel: ProductFormViewModelProtocol {
253250
self.analytics = analytics
254251
self.blazeEligibilityChecker = blazeEligibilityChecker
255252
self.favoriteProductsUseCase = favoriteProductsUseCase ?? DefaultFavoriteProductsUseCase(siteID: product.siteID)
256-
self.featureFlagService = featureFlagService
257253

258254
self.cancellable = productImageActionHandler.addUpdateObserver(self) { [weak self] allStatuses in
259255
guard let self = self else { return }
@@ -316,9 +312,6 @@ extension ProductFormViewModel {
316312
}
317313

318314
func canFavoriteProduct() -> Bool {
319-
guard featureFlagService.isFeatureFlagEnabled(.favoriteProducts) else {
320-
return false
321-
}
322315
return formType != .add
323316
}
324317

WooCommerce/Classes/ViewRelated/Products/Filters/FilterProductListViewModel.swift

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -101,22 +101,13 @@ final class FilterProductListViewModel: FilterListViewModel {
101101
self.siteID = siteID
102102
self.analytics = analytics
103103

104-
if featureFlagService.isFeatureFlagEnabled(.favoriteProducts) {
105-
self.filterTypeViewModels = [
106-
stockStatusFilterViewModel,
107-
productStatusFilterViewModel,
108-
productTypeFilterViewModel,
109-
productCategoryFilterViewModel,
110-
productFavoriteFilterViewModel
111-
]
112-
} else {
113-
self.filterTypeViewModels = [
114-
stockStatusFilterViewModel,
115-
productStatusFilterViewModel,
116-
productTypeFilterViewModel,
117-
productCategoryFilterViewModel,
118-
]
119-
}
104+
self.filterTypeViewModels = [
105+
stockStatusFilterViewModel,
106+
productStatusFilterViewModel,
107+
productTypeFilterViewModel,
108+
productCategoryFilterViewModel,
109+
productFavoriteFilterViewModel
110+
]
120111
}
121112

122113
var criteria: Filters {

WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ final class MockFeatureFlagService: FeatureFlagService {
1717
var blazeEvergreenCampaigns: Bool
1818
var blazeCampaignObjective: Bool
1919
var revampedShippingLabelCreation: Bool
20-
var favoriteProducts: Bool
2120
var hideSitesInStorePicker: Bool
2221
var backgroundProductImageUpload: Bool
2322
var notificationSettings: Bool
@@ -40,7 +39,6 @@ final class MockFeatureFlagService: FeatureFlagService {
4039
blazeEvergreenCampaigns: Bool = false,
4140
blazeCampaignObjective: Bool = false,
4241
revampedShippingLabelCreation: Bool = false,
43-
favoriteProducts: Bool = false,
4442
hideSitesInStorePicker: Bool = false,
4543
backgroundProductImageUpload: Bool = false,
4644
notificationSettings: Bool = false,
@@ -61,7 +59,6 @@ final class MockFeatureFlagService: FeatureFlagService {
6159
self.blazeEvergreenCampaigns = blazeEvergreenCampaigns
6260
self.blazeCampaignObjective = blazeCampaignObjective
6361
self.revampedShippingLabelCreation = revampedShippingLabelCreation
64-
self.favoriteProducts = favoriteProducts
6562
self.hideSitesInStorePicker = hideSitesInStorePicker
6663
self.backgroundProductImageUpload = backgroundProductImageUpload
6764
self.notificationSettings = notificationSettings
@@ -107,8 +104,6 @@ final class MockFeatureFlagService: FeatureFlagService {
107104
return blazeCampaignObjective
108105
case .revampedShippingLabelCreation:
109106
return revampedShippingLabelCreation
110-
case .favoriteProducts:
111-
return favoriteProducts
112107
case .hideSitesInStorePicker:
113108
return hideSitesInStorePicker
114109
case .backgroundProductImageUpload:

WooCommerce/WooCommerceTests/ViewRelated/Products/Edit Product/ProductFormViewModelTests.swift

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,7 @@ final class ProductFormViewModelTests: XCTestCase {
232232
// Given
233233
let product = Product.fake()
234234
let viewModel = createViewModel(product: product,
235-
formType: .edit,
236-
featureFlagService: MockFeatureFlagService(favoriteProducts: true))
235+
formType: .edit)
237236

238237
// When
239238
XCTAssertTrue(viewModel.canFavoriteProduct())
@@ -243,8 +242,7 @@ final class ProductFormViewModelTests: XCTestCase {
243242
// Given
244243
let product = Product.fake()
245244
let viewModel = createViewModel(product: product,
246-
formType: .add,
247-
featureFlagService: MockFeatureFlagService(favoriteProducts: true))
245+
formType: .add)
248246

249247
// When
250248
XCTAssertFalse(viewModel.canFavoriteProduct())
@@ -254,8 +252,7 @@ final class ProductFormViewModelTests: XCTestCase {
254252
// Given
255253
let product = Product.fake()
256254
let viewModel = createViewModel(product: product,
257-
formType: .add,
258-
featureFlagService: MockFeatureFlagService(favoriteProducts: false))
255+
formType: .add)
259256

260257
// When
261258
XCTAssertFalse(viewModel.canFavoriteProduct())
@@ -268,8 +265,7 @@ final class ProductFormViewModelTests: XCTestCase {
268265
let viewModel = createViewModel(product: product,
269266
formType: .edit,
270267
stores: stores,
271-
favoriteProductsUseCase: mockUseCase,
272-
featureFlagService: MockFeatureFlagService(favoriteProducts: true))
268+
favoriteProductsUseCase: mockUseCase)
273269

274270
// When
275271
viewModel.markAsFavorite()
@@ -285,8 +281,7 @@ final class ProductFormViewModelTests: XCTestCase {
285281
let viewModel = createViewModel(product: product,
286282
formType: .edit,
287283
stores: stores,
288-
favoriteProductsUseCase: mockUseCase,
289-
featureFlagService: MockFeatureFlagService(favoriteProducts: true))
284+
favoriteProductsUseCase: mockUseCase)
290285

291286
// When
292287
viewModel.removeFromFavorite()
@@ -850,8 +845,7 @@ private extension ProductFormViewModelTests {
850845
stores: StoresManager = ServiceLocator.stores,
851846
analytics: Analytics = ServiceLocator.analytics,
852847
blazeEligibilityChecker: BlazeEligibilityCheckerProtocol = BlazeEligibilityChecker(),
853-
favoriteProductsUseCase: FavoriteProductsUseCase? = nil,
854-
featureFlagService: FeatureFlagService = ServiceLocator.featureFlagService) -> ProductFormViewModel {
848+
favoriteProductsUseCase: FavoriteProductsUseCase? = nil) -> ProductFormViewModel {
855849
let model = EditableProductModel(product: product)
856850
let siteID: Int64 = 123
857851
let productImageActionHandler = ProductImageActionHandler(siteID: siteID, product: model)
@@ -861,7 +855,6 @@ private extension ProductFormViewModelTests {
861855
stores: stores,
862856
analytics: analytics,
863857
blazeEligibilityChecker: blazeEligibilityChecker,
864-
favoriteProductsUseCase: favoriteProductsUseCase,
865-
featureFlagService: featureFlagService)
858+
favoriteProductsUseCase: favoriteProductsUseCase)
866859
}
867860
}

WooCommerce/WooCommerceTests/ViewRelated/Products/Filters/FilterProductListViewModelTests.swift

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ final class FilterProductListViewModelTests: XCTestCase {
2424

2525
func test_criteria_with_non_nil_filters_then_it_returns_all_active_filters() {
2626
// Given
27-
let featureFlagService = MockFeatureFlagService(favoriteProducts: true)
2827
let filters = FilterProductListViewModel.Filters(stockStatus: .inStock,
2928
productStatus: .draft,
3029
promotableProductType: PromotableProductType(productType: .grouped,
@@ -36,8 +35,7 @@ final class FilterProductListViewModelTests: XCTestCase {
3635

3736
// When
3837
let viewModel = FilterProductListViewModel(filters: filters,
39-
siteID: 0,
40-
featureFlagService: featureFlagService)
38+
siteID: 0)
4139

4240
// Then
4341
let expectedCriteria = filters
@@ -84,29 +82,6 @@ final class FilterProductListViewModelTests: XCTestCase {
8482
XCTAssertEqual(filters.analyticsDescription, "instock,draft,grouped,category,favorite_products")
8583
}
8684

87-
// MARK: Favorite product feature flag
88-
89-
func test_filterTypeViewModels_does_not_contain_favorite_filter_view_model_when_feature_flag_off() {
90-
// Given
91-
let featureFlagService = MockFeatureFlagService(favoriteProducts: false)
92-
let filters = FilterProductListViewModel.Filters(stockStatus: .inStock,
93-
productStatus: .draft,
94-
promotableProductType: PromotableProductType(productType: .grouped,
95-
isAvailable: true,
96-
promoteUrl: nil),
97-
productCategory: filterProductCategory,
98-
favoriteProduct: FavoriteProductsFilter(),
99-
numberOfActiveFilters: 5)
100-
101-
// When
102-
let viewModel = FilterProductListViewModel(filters: filters,
103-
siteID: 0,
104-
featureFlagService: featureFlagService)
105-
106-
// Then
107-
XCTAssertFalse(viewModel.filterTypeViewModels.contains(where: { $0.title == FilterProductListViewModel.ProductListFilter.Localization.favoriteProduct } ))
108-
}
109-
11085
func test_applyPastFilter_updates_the_filters_correctly() {
11186
// Given
11287
let filters = createMockFilters(stockStatus: .inStock)

0 commit comments

Comments
 (0)