diff --git a/Experiments/Experiments/DefaultFeatureFlagService.swift b/Experiments/Experiments/DefaultFeatureFlagService.swift index f9a17fa1e3a..a0a0f825e97 100644 --- a/Experiments/Experiments/DefaultFeatureFlagService.swift +++ b/Experiments/Experiments/DefaultFeatureFlagService.swift @@ -86,6 +86,8 @@ public struct DefaultFeatureFlagService: FeatureFlagService { return true case .favoriteProducts: return buildConfig == .localDeveloper || buildConfig == .alpha + case .paymentsOnboardingInPointOfSale: + return buildConfig == .localDeveloper default: return true } diff --git a/Experiments/Experiments/FeatureFlag.swift b/Experiments/Experiments/FeatureFlag.swift index fc825e5d026..1615296ad88 100644 --- a/Experiments/Experiments/FeatureFlag.swift +++ b/Experiments/Experiments/FeatureFlag.swift @@ -188,4 +188,8 @@ public enum FeatureFlag: Int { /// Allows marking product as favorite /// case favoriteProducts + + /// Supports Woo Payments onboarding in POS so that merchants who have not completed onboarding can access POS. + /// + case paymentsOnboardingInPointOfSale } diff --git a/WooCommerce/Classes/POS/ViewModels/TotalsViewModel.swift b/WooCommerce/Classes/POS/ViewModels/TotalsViewModel.swift index 608d005c245..b3f1d0802a3 100644 --- a/WooCommerce/Classes/POS/ViewModels/TotalsViewModel.swift +++ b/WooCommerce/Classes/POS/ViewModels/TotalsViewModel.swift @@ -20,7 +20,6 @@ final class TotalsViewModel: ObservableObject, TotalsViewModelProtocol { case cardPaymentSuccessful } - @Published private(set) var cardPresentPaymentEvent: CardPresentPaymentEvent = .idle @Published var cardPresentPaymentAlertViewModel: PointOfSaleCardPresentPaymentAlertType? @Published private(set) var cardPresentPaymentInlineMessage: PointOfSaleCardPresentPaymentMessageType? @Published private(set) var isShowingCardReaderStatus: Bool = false @@ -88,7 +87,6 @@ final class TotalsViewModel: ObservableObject, TotalsViewModelProtocol { var orderStatePublisher: Published.Publisher { $orderState } var paymentStatePublisher: Published.Publisher { $paymentState } private var cardPresentPaymentAlertViewModelPublisher: Published.Publisher { $cardPresentPaymentAlertViewModel } - private var cardPresentPaymentEventPublisher: Published.Publisher { $cardPresentPaymentEvent } private var connectionStatusPublisher: Published.Publisher { $connectionStatus } private var formattedCartTotalPricePublisher: Published.Publisher { $formattedCartTotalPrice } private var formattedOrderTotalPricePublisher: Published.Publisher { $formattedOrderTotalPrice } @@ -313,8 +311,6 @@ private extension TotalsViewModel { } func observeCardPresentPaymentEvents() { - cardPresentPaymentService.paymentEventPublisher.assign(to: &$cardPresentPaymentEvent) - cardPresentPaymentService.paymentEventPublisher .map { [weak self] event -> PointOfSaleCardPresentPaymentAlertType? in guard let self else { return nil } diff --git a/WooCommerce/Classes/POS/ViewModels/TotalsViewModelProtocol.swift b/WooCommerce/Classes/POS/ViewModels/TotalsViewModelProtocol.swift index c4eae7b9052..5d2aaeeec92 100644 --- a/WooCommerce/Classes/POS/ViewModels/TotalsViewModelProtocol.swift +++ b/WooCommerce/Classes/POS/ViewModels/TotalsViewModelProtocol.swift @@ -4,7 +4,6 @@ import protocol Yosemite.POSItem protocol TotalsViewModelProtocol { var paymentState: TotalsViewModel.PaymentState { get } - var cardPresentPaymentEvent: CardPresentPaymentEvent { get } var connectionStatus: CardPresentPaymentReaderConnectionStatus { get } var orderStatePublisher: Published.Publisher { get } diff --git a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/CardPresentPaymentsOnboardingViewController.swift b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/CardPresentPaymentsOnboardingViewController.swift index f890be72346..02c1ba44365 100644 --- a/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/CardPresentPaymentsOnboardingViewController.swift +++ b/WooCommerce/Classes/ViewRelated/Dashboard/Settings/In-Person Payments/CardPresentPaymentsOnboardingViewController.swift @@ -32,7 +32,6 @@ final class CardPresentPaymentsOnboardingViewController: UIHostingController Bool { @@ -107,6 +110,8 @@ struct MockFeatureFlagService: FeatureFlagService { return viewEditCustomFieldsInProductsAndOrders case .favoriteProducts: return favoriteProducts + case .paymentsOnboardingInPointOfSale: + return paymentsOnboardingInPointOfSale default: return false } diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Settings/POS/POSEligibilityCheckerTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Settings/POS/POSEligibilityCheckerTests.swift index f0da0922268..ff776f294f2 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/Settings/POS/POSEligibilityCheckerTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/Settings/POS/POSEligibilityCheckerTests.swift @@ -192,6 +192,26 @@ final class POSEligibilityCheckerTests: XCTestCase { XCTAssertFalse(isEligible) } + func test_is_eligible_when_onboarding_state_is_not_completed_and_onboarding_feature_enabled_then_returns_true() throws { + // Given + let featureFlagService = MockFeatureFlagService(isPointOfSaleEnabled: true, paymentsOnboardingInPointOfSale: true) + setupCountry(country: .us) + accountWhitelistedInBackend(true) + let checker = POSEligibilityChecker(userInterfaceIdiom: .pad, + cardPresentPaymentsOnboarding: onboardingUseCase, + siteSettings: siteSettings, + currencySettings: Fixtures.usdCurrencySettings, + stores: stores, + featureFlagService: featureFlagService) + checker.isEligible.assign(to: &$isEligible) + + // When + onboardingUseCase.state = .pluginNotInstalled + + // Then + XCTAssertTrue(isEligible) + } + func test_is_eligible_when_WooCommerce_version_is_below_6_6_then_returns_false() throws { // Given let featureFlagService = MockFeatureFlagService(isPointOfSaleEnabled: true)