diff --git a/Modules/Sources/Experiments/DefaultFeatureFlagService.swift b/Modules/Sources/Experiments/DefaultFeatureFlagService.swift index 8eb74898150..0824b3f8b75 100644 --- a/Modules/Sources/Experiments/DefaultFeatureFlagService.swift +++ b/Modules/Sources/Experiments/DefaultFeatureFlagService.swift @@ -71,8 +71,6 @@ public struct DefaultFeatureFlagService: FeatureFlagService { return true case .blazeCampaignObjective: return true - case .favoriteProducts: - return true case .hideSitesInStorePicker: return true case .filterHistoryOnOrderAndProductLists: diff --git a/Modules/Sources/Experiments/FeatureFlag.swift b/Modules/Sources/Experiments/FeatureFlag.swift index 3e34ecbba6a..cbd4991ce1e 100644 --- a/Modules/Sources/Experiments/FeatureFlag.swift +++ b/Modules/Sources/Experiments/FeatureFlag.swift @@ -157,10 +157,6 @@ public enum FeatureFlag: Int { /// case blazeCampaignObjective - /// Allows marking product as favorite - /// - case favoriteProducts - /// Supports hiding sites from the store picker /// case hideSitesInStorePicker diff --git a/WooCommerce/Classes/ViewRelated/Products/Edit Product/FavoriteProducts/FavoriteProductsUseCase.swift b/WooCommerce/Classes/ViewRelated/Products/Edit Product/FavoriteProducts/FavoriteProductsUseCase.swift index 5297487ea8b..2ab68ef7841 100644 --- a/WooCommerce/Classes/ViewRelated/Products/Edit Product/FavoriteProducts/FavoriteProductsUseCase.swift +++ b/WooCommerce/Classes/ViewRelated/Products/Edit Product/FavoriteProducts/FavoriteProductsUseCase.swift @@ -68,9 +68,6 @@ struct DefaultFavoriteProductsUseCase: FavoriteProductsUseCase { @MainActor func favoriteProductIDs() async -> [Int64] { - guard featureFlagService.isFeatureFlagEnabled(.favoriteProducts) else { - return [] - } return await withCheckedContinuation { continuation in stores.dispatch(AppSettingsAction.loadFavoriteProductIDs(siteID: siteID, onCompletion: { savedFavProductIDs in continuation.resume(returning: savedFavProductIDs) diff --git a/WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormViewModel.swift b/WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormViewModel.swift index 3db0f3f852b..25af127b4d3 100644 --- a/WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormViewModel.swift +++ b/WooCommerce/Classes/ViewRelated/Products/Edit Product/ProductFormViewModel.swift @@ -230,8 +230,6 @@ final class ProductFormViewModel: ProductFormViewModelProtocol { /// private lazy var remoteActionUseCase = ProductFormRemoteActionUseCase(stores: stores) - private let featureFlagService: FeatureFlagService - init(product: EditableProductModel, formType: ProductFormType, productImageActionHandler: ProductImageActionHandler, @@ -240,8 +238,7 @@ final class ProductFormViewModel: ProductFormViewModelProtocol { productImagesUploader: ProductImageUploaderProtocol = ServiceLocator.productImageUploader, analytics: Analytics = ServiceLocator.analytics, blazeEligibilityChecker: BlazeEligibilityCheckerProtocol = BlazeEligibilityChecker(), - favoriteProductsUseCase: FavoriteProductsUseCase? = nil, - featureFlagService: FeatureFlagService = ServiceLocator.featureFlagService) { + favoriteProductsUseCase: FavoriteProductsUseCase? = nil) { self.formType = formType self.productImageActionHandler = productImageActionHandler self.originalProduct = product @@ -253,7 +250,6 @@ final class ProductFormViewModel: ProductFormViewModelProtocol { self.analytics = analytics self.blazeEligibilityChecker = blazeEligibilityChecker self.favoriteProductsUseCase = favoriteProductsUseCase ?? DefaultFavoriteProductsUseCase(siteID: product.siteID) - self.featureFlagService = featureFlagService self.cancellable = productImageActionHandler.addUpdateObserver(self) { [weak self] allStatuses in guard let self = self else { return } @@ -316,9 +312,6 @@ extension ProductFormViewModel { } func canFavoriteProduct() -> Bool { - guard featureFlagService.isFeatureFlagEnabled(.favoriteProducts) else { - return false - } return formType != .add } diff --git a/WooCommerce/Classes/ViewRelated/Products/Filters/FilterProductListViewModel.swift b/WooCommerce/Classes/ViewRelated/Products/Filters/FilterProductListViewModel.swift index b29b00a8df1..472eac5d0e0 100644 --- a/WooCommerce/Classes/ViewRelated/Products/Filters/FilterProductListViewModel.swift +++ b/WooCommerce/Classes/ViewRelated/Products/Filters/FilterProductListViewModel.swift @@ -101,22 +101,13 @@ final class FilterProductListViewModel: FilterListViewModel { self.siteID = siteID self.analytics = analytics - if featureFlagService.isFeatureFlagEnabled(.favoriteProducts) { - self.filterTypeViewModels = [ - stockStatusFilterViewModel, - productStatusFilterViewModel, - productTypeFilterViewModel, - productCategoryFilterViewModel, - productFavoriteFilterViewModel - ] - } else { - self.filterTypeViewModels = [ - stockStatusFilterViewModel, - productStatusFilterViewModel, - productTypeFilterViewModel, - productCategoryFilterViewModel, - ] - } + self.filterTypeViewModels = [ + stockStatusFilterViewModel, + productStatusFilterViewModel, + productTypeFilterViewModel, + productCategoryFilterViewModel, + productFavoriteFilterViewModel + ] } var criteria: Filters { diff --git a/WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift b/WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift index b943256797f..ae7aa34a488 100644 --- a/WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift +++ b/WooCommerce/WooCommerceTests/Mocks/MockFeatureFlagService.swift @@ -17,7 +17,6 @@ final class MockFeatureFlagService: FeatureFlagService { var blazeEvergreenCampaigns: Bool var blazeCampaignObjective: Bool var revampedShippingLabelCreation: Bool - var favoriteProducts: Bool var hideSitesInStorePicker: Bool var backgroundProductImageUpload: Bool var notificationSettings: Bool @@ -40,7 +39,6 @@ final class MockFeatureFlagService: FeatureFlagService { blazeEvergreenCampaigns: Bool = false, blazeCampaignObjective: Bool = false, revampedShippingLabelCreation: Bool = false, - favoriteProducts: Bool = false, hideSitesInStorePicker: Bool = false, backgroundProductImageUpload: Bool = false, notificationSettings: Bool = false, @@ -61,7 +59,6 @@ final class MockFeatureFlagService: FeatureFlagService { self.blazeEvergreenCampaigns = blazeEvergreenCampaigns self.blazeCampaignObjective = blazeCampaignObjective self.revampedShippingLabelCreation = revampedShippingLabelCreation - self.favoriteProducts = favoriteProducts self.hideSitesInStorePicker = hideSitesInStorePicker self.backgroundProductImageUpload = backgroundProductImageUpload self.notificationSettings = notificationSettings @@ -107,8 +104,6 @@ final class MockFeatureFlagService: FeatureFlagService { return blazeCampaignObjective case .revampedShippingLabelCreation: return revampedShippingLabelCreation - case .favoriteProducts: - return favoriteProducts case .hideSitesInStorePicker: return hideSitesInStorePicker case .backgroundProductImageUpload: diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Products/Edit Product/ProductFormViewModelTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Products/Edit Product/ProductFormViewModelTests.swift index 6624e6f90e0..2ca1dd378d6 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/Products/Edit Product/ProductFormViewModelTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/Products/Edit Product/ProductFormViewModelTests.swift @@ -232,8 +232,7 @@ final class ProductFormViewModelTests: XCTestCase { // Given let product = Product.fake() let viewModel = createViewModel(product: product, - formType: .edit, - featureFlagService: MockFeatureFlagService(favoriteProducts: true)) + formType: .edit) // When XCTAssertTrue(viewModel.canFavoriteProduct()) @@ -243,8 +242,7 @@ final class ProductFormViewModelTests: XCTestCase { // Given let product = Product.fake() let viewModel = createViewModel(product: product, - formType: .add, - featureFlagService: MockFeatureFlagService(favoriteProducts: true)) + formType: .add) // When XCTAssertFalse(viewModel.canFavoriteProduct()) @@ -254,8 +252,7 @@ final class ProductFormViewModelTests: XCTestCase { // Given let product = Product.fake() let viewModel = createViewModel(product: product, - formType: .add, - featureFlagService: MockFeatureFlagService(favoriteProducts: false)) + formType: .add) // When XCTAssertFalse(viewModel.canFavoriteProduct()) @@ -268,8 +265,7 @@ final class ProductFormViewModelTests: XCTestCase { let viewModel = createViewModel(product: product, formType: .edit, stores: stores, - favoriteProductsUseCase: mockUseCase, - featureFlagService: MockFeatureFlagService(favoriteProducts: true)) + favoriteProductsUseCase: mockUseCase) // When viewModel.markAsFavorite() @@ -285,8 +281,7 @@ final class ProductFormViewModelTests: XCTestCase { let viewModel = createViewModel(product: product, formType: .edit, stores: stores, - favoriteProductsUseCase: mockUseCase, - featureFlagService: MockFeatureFlagService(favoriteProducts: true)) + favoriteProductsUseCase: mockUseCase) // When viewModel.removeFromFavorite() @@ -850,8 +845,7 @@ private extension ProductFormViewModelTests { stores: StoresManager = ServiceLocator.stores, analytics: Analytics = ServiceLocator.analytics, blazeEligibilityChecker: BlazeEligibilityCheckerProtocol = BlazeEligibilityChecker(), - favoriteProductsUseCase: FavoriteProductsUseCase? = nil, - featureFlagService: FeatureFlagService = ServiceLocator.featureFlagService) -> ProductFormViewModel { + favoriteProductsUseCase: FavoriteProductsUseCase? = nil) -> ProductFormViewModel { let model = EditableProductModel(product: product) let siteID: Int64 = 123 let productImageActionHandler = ProductImageActionHandler(siteID: siteID, product: model) @@ -861,7 +855,6 @@ private extension ProductFormViewModelTests { stores: stores, analytics: analytics, blazeEligibilityChecker: blazeEligibilityChecker, - favoriteProductsUseCase: favoriteProductsUseCase, - featureFlagService: featureFlagService) + favoriteProductsUseCase: favoriteProductsUseCase) } } diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Products/Filters/FilterProductListViewModelTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Products/Filters/FilterProductListViewModelTests.swift index 682705e5020..33935f7b738 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/Products/Filters/FilterProductListViewModelTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/Products/Filters/FilterProductListViewModelTests.swift @@ -24,7 +24,6 @@ final class FilterProductListViewModelTests: XCTestCase { func test_criteria_with_non_nil_filters_then_it_returns_all_active_filters() { // Given - let featureFlagService = MockFeatureFlagService(favoriteProducts: true) let filters = FilterProductListViewModel.Filters(stockStatus: .inStock, productStatus: .draft, promotableProductType: PromotableProductType(productType: .grouped, @@ -36,8 +35,7 @@ final class FilterProductListViewModelTests: XCTestCase { // When let viewModel = FilterProductListViewModel(filters: filters, - siteID: 0, - featureFlagService: featureFlagService) + siteID: 0) // Then let expectedCriteria = filters @@ -84,29 +82,6 @@ final class FilterProductListViewModelTests: XCTestCase { XCTAssertEqual(filters.analyticsDescription, "instock,draft,grouped,category,favorite_products") } - // MARK: Favorite product feature flag - - func test_filterTypeViewModels_does_not_contain_favorite_filter_view_model_when_feature_flag_off() { - // Given - let featureFlagService = MockFeatureFlagService(favoriteProducts: false) - let filters = FilterProductListViewModel.Filters(stockStatus: .inStock, - productStatus: .draft, - promotableProductType: PromotableProductType(productType: .grouped, - isAvailable: true, - promoteUrl: nil), - productCategory: filterProductCategory, - favoriteProduct: FavoriteProductsFilter(), - numberOfActiveFilters: 5) - - // When - let viewModel = FilterProductListViewModel(filters: filters, - siteID: 0, - featureFlagService: featureFlagService) - - // Then - XCTAssertFalse(viewModel.filterTypeViewModels.contains(where: { $0.title == FilterProductListViewModel.ProductListFilter.Localization.favoriteProduct } )) - } - func test_applyPastFilter_updates_the_filters_correctly() { // Given let filters = createMockFilters(stockStatus: .inStock)