Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ final class AddProductCoordinator: Coordinator {

private var addProductWithAIEligibilityChecker: ProductCreationAIEligibilityCheckerProtocol
private var addProductWithAIBottomSheetPresenter: BottomSheetPresenter?
private let siteCIABEligibilityChecker: CIABEligibilityCheckerProtocol

private let wooSubscriptionProductsEligibilityChecker: WooSubscriptionProductsEligibilityCheckerProtocol

Expand All @@ -73,6 +74,7 @@ final class AddProductCoordinator: Coordinator {
sourceNavigationController: UINavigationController,
storage: StorageManagerType = ServiceLocator.storageManager,
addProductWithAIEligibilityChecker: ProductCreationAIEligibilityCheckerProtocol = ProductCreationAIEligibilityChecker(),
siteCIABEligibilityChecker: CIABEligibilityCheckerProtocol = CIABEligibilityChecker(),
productImageUploader: ProductImageUploaderProtocol = ServiceLocator.productImageUploader,
analytics: Analytics = ServiceLocator.analytics,
isFirstProduct: Bool,
Expand All @@ -96,6 +98,7 @@ final class AddProductCoordinator: Coordinator {
self.storage = storage
self.addProductWithAIEligibilityChecker = addProductWithAIEligibilityChecker
self.wooSubscriptionProductsEligibilityChecker = WooSubscriptionProductsEligibilityChecker(siteID: siteID, storage: storage)
self.siteCIABEligibilityChecker = siteCIABEligibilityChecker
self.analytics = analytics
self.isFirstProduct = isFirstProduct
self.navigateToProductForm = navigateToProductForm
Expand Down Expand Up @@ -152,7 +155,8 @@ private extension AddProductCoordinator {
let viewProperties = BottomSheetListSelectorViewProperties(subtitle: subtitle)
let command = ProductTypeBottomSheetListSelectorCommand(
source: .creationForm,
subscriptionProductsEligibilityChecker: wooSubscriptionProductsEligibilityChecker
subscriptionProductsEligibilityChecker: wooSubscriptionProductsEligibilityChecker,
siteCIABEligibilityChecker: siteCIABEligibilityChecker
) { [weak self] selectedBottomSheetProductType in
guard let self else { return }
self.analytics.track(event: .ProductCreation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ final class ProductTypeBottomSheetListSelectorCommand: BottomSheetListSelectorCo
.simple(isVirtual: false),
.simple(isVirtual: true),
isEligibleForSubscriptionProducts ? .subscription : nil,
.variable,
siteCIABEligibilityChecker.isFeatureSupportedForCurrentSite(.variableProducts) ? .variable : nil,
isEligibleForSubscriptionProducts ? .variableSubscription : nil,
.grouped,
siteCIABEligibilityChecker.isFeatureSupportedForCurrentSite(.groupedProducts) ? .grouped : nil,
.affiliate
].compactMap { $0 }

Expand All @@ -35,13 +35,16 @@ final class ProductTypeBottomSheetListSelectorCommand: BottomSheetListSelectorCo
private let source: Source
private let onSelection: (BottomSheetProductType) -> Void
private let isEligibleForSubscriptionProducts: Bool
private let siteCIABEligibilityChecker: CIABEligibilityCheckerProtocol

init(source: Source,
subscriptionProductsEligibilityChecker: WooSubscriptionProductsEligibilityCheckerProtocol,
siteCIABEligibilityChecker: CIABEligibilityCheckerProtocol = CIABEligibilityChecker(),
onSelection: @escaping (BottomSheetProductType) -> Void) {
self.source = source
self.onSelection = onSelection
self.isEligibleForSubscriptionProducts = subscriptionProductsEligibilityChecker.isSiteEligible()
self.siteCIABEligibilityChecker = siteCIABEligibilityChecker
if case let .editForm(selected) = source {
self.selected = selected
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ final class ProductFormViewController<ViewModel: ProductFormViewModelProtocol>:
private let aiEligibilityChecker: ProductFormAIEligibilityChecker
private var descriptionAICoordinator: ProductDescriptionAICoordinator?
private let subscriptionProductsEligibilityChecker: WooSubscriptionProductsEligibilityCheckerProtocol
private let siteCIABEligibilityChecker: CIABEligibilityCheckerProtocol = CIABEligibilityChecker()

private lazy var tooltipUseCase = ProductDescriptionAITooltipUseCase(isDescriptionAIEnabled: aiEligibilityChecker.isFeatureEnabled(.description))
private var didShowTooltip = false {
Expand Down Expand Up @@ -1630,7 +1631,8 @@ private extension ProductFormViewController {
let productType = BottomSheetProductType(productType: viewModel.productModel.productType, isVirtual: viewModel.productModel.virtual)
let command = ProductTypeBottomSheetListSelectorCommand(
source: .editForm(selected: productType),
subscriptionProductsEligibilityChecker: subscriptionProductsEligibilityChecker
subscriptionProductsEligibilityChecker: subscriptionProductsEligibilityChecker,
siteCIABEligibilityChecker: siteCIABEligibilityChecker
) { [weak self] (selectedProductType) in
self?.dismiss(animated: true, completion: nil)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ final class MockCIABEligibilityChecker: CIABEligibilityCheckerProtocol {
}

func isFeatureSupportedForCurrentSite(_ feature: CIABAffectedFeature) -> Bool {
return !mockedCIABDisabledFeatures.contains(feature)
return !mockedCIABDisabledFeatures.contains(feature) || !isCurrentSiteCIAB
}

func isFeatureSupported(_ feature: CIABAffectedFeature, for site: Site) -> Bool {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,72 @@ final class ProductTypeBottomSheetListSelectorCommandTests: XCTestCase {
]
XCTAssertEqual(selectedActions, expectedActions)
}

func test_creation_form_data_does_not_contain_grouped_and_variable_types_if_site_is_ciab() {
// Given
let subscriptionEligibilityChecker = MockWooSubscriptionProductsEligibilityChecker(isEligible: true)
let siteCIABEligibilityChecker = MockCIABEligibilityChecker(mockedIsCurrentSiteCIAB: true)

// When
let command = ProductTypeBottomSheetListSelectorCommand(
source: .creationForm,
subscriptionProductsEligibilityChecker: subscriptionEligibilityChecker,
siteCIABEligibilityChecker: siteCIABEligibilityChecker
) { _ in }

// Then
XCTAssertFalse(command.data.contains(.grouped), "'command.data' should not contain grouped product type")
XCTAssertFalse(command.data.contains(.variable), "'command.data' should not contain variable product type")
}

func test_creation_form_data_contains_grouped_and_variable_types_if_site_is_non_ciab_and_other_requirements_met() {
// Given
let subscriptionEligibilityChecker = MockWooSubscriptionProductsEligibilityChecker(isEligible: true)
let siteCIABEligibilityChecker = MockCIABEligibilityChecker(mockedIsCurrentSiteCIAB: false)

// When
let command = ProductTypeBottomSheetListSelectorCommand(
source: .creationForm,
subscriptionProductsEligibilityChecker: subscriptionEligibilityChecker,
siteCIABEligibilityChecker: siteCIABEligibilityChecker
) { _ in }

// Then
XCTAssertTrue(command.data.contains(.grouped), "'command.data' should contain grouped product type")
XCTAssertTrue(command.data.contains(.variable), "'command.data' should contain variable product type")
}

func test_edit_form_data_does_not_contain_grouped_and_variable_types_if_site_is_ciab() {
// Given
let subscriptionEligibilityChecker = MockWooSubscriptionProductsEligibilityChecker(isEligible: true)
let siteCIABEligibilityChecker = MockCIABEligibilityChecker(mockedIsCurrentSiteCIAB: true)

// When
let command = ProductTypeBottomSheetListSelectorCommand(
source: .editForm(selected: .simple(isVirtual: false)),
subscriptionProductsEligibilityChecker: subscriptionEligibilityChecker,
siteCIABEligibilityChecker: siteCIABEligibilityChecker
) { _ in }

// Then
XCTAssertFalse(command.data.contains(.grouped), "'command.data' should not contain grouped product type")
XCTAssertFalse(command.data.contains(.variable), "'command.data' should not contain variable product type")
}

func test_edit_form_data_contains_grouped_and_variable_types_if_site_is_non_ciab_and_other_requirements_met() {
// Given
let subscriptionEligibilityChecker = MockWooSubscriptionProductsEligibilityChecker(isEligible: true)
let siteCIABEligibilityChecker = MockCIABEligibilityChecker(mockedIsCurrentSiteCIAB: false)

// When
let command = ProductTypeBottomSheetListSelectorCommand(
source: .editForm(selected: .simple(isVirtual: false)),
subscriptionProductsEligibilityChecker: subscriptionEligibilityChecker,
siteCIABEligibilityChecker: siteCIABEligibilityChecker
) { _ in }

// Then
XCTAssertTrue(command.data.contains(.grouped), "'command.data' should contain grouped product type")
XCTAssertTrue(command.data.contains(.variable), "'command.data' should contain variable product type")
}
}
Loading