Skip to content

Commit 2286b0a

Browse files
Merge pull request #9880 from woocommerce/feat/9867-share-product-coordinator-tests
Unit test Share product AI eligibility check
2 parents bf670c4 + 8ecd7c0 commit 2286b0a

File tree

4 files changed

+75
-9
lines changed

4 files changed

+75
-9
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import protocol Experiments.FeatureFlagService
2+
import struct Yosemite.Site
3+
4+
struct ShareProductAIEligibilityChecker {
5+
private let site: Site?
6+
private let featureFlagService: FeatureFlagService
7+
8+
init(site: Site?, featureFlagService: FeatureFlagService = ServiceLocator.featureFlagService) {
9+
self.site = site
10+
self.featureFlagService = featureFlagService
11+
}
12+
13+
var canGenerateShareProductMessageUsingAI: Bool {
14+
site?.isWordPressComStore == true && featureFlagService.isFeatureFlagEnabled(.shareProductAI)
15+
}
16+
}

WooCommerce/Classes/ViewRelated/Products/ShareProduct/ShareProductCoordinator.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,11 @@ import protocol Experiments.FeatureFlagService
66
final class ShareProductCoordinator: Coordinator {
77
let navigationController: UINavigationController
88

9-
private let site: Site?
109
private let productURL: URL
1110
private let productName: String
1211
private let shareSheetAnchorView: UIView?
1312
private let shareSheetAnchorItem: UIBarButtonItem?
14-
private let featureFlagService: FeatureFlagService
15-
16-
private var shouldEnableShareProductUsingAI: Bool {
17-
site?.isWordPressComStore == true && featureFlagService.isFeatureFlagEnabled(.shareProductAI)
18-
}
13+
private let shareProductEligibilityChecker: ShareProductAIEligibilityChecker
1914

2015
private init(site: Site?,
2116
productURL: URL,
@@ -24,12 +19,11 @@ final class ShareProductCoordinator: Coordinator {
2419
shareSheetAnchorItem: UIBarButtonItem?,
2520
featureFlagService: FeatureFlagService,
2621
navigationController: UINavigationController) {
27-
self.site = site
2822
self.productURL = productURL
2923
self.productName = productName
3024
self.shareSheetAnchorView = shareSheetAnchorView
3125
self.shareSheetAnchorItem = shareSheetAnchorItem
32-
self.featureFlagService = featureFlagService
26+
self.shareProductEligibilityChecker = ShareProductAIEligibilityChecker(site: site, featureFlagService: featureFlagService)
3327
self.navigationController = navigationController
3428
}
3529

@@ -64,7 +58,7 @@ final class ShareProductCoordinator: Coordinator {
6458
}
6559

6660
func start() {
67-
if shouldEnableShareProductUsingAI {
61+
if shareProductEligibilityChecker.canGenerateShareProductMessageUsingAI {
6862
presentShareProductAIGeneration()
6963
} else {
7064
presentShareSheet()

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2197,6 +2197,8 @@
21972197
EEB4E2DC29B600B800371C3C /* CouponLineDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEB4E2DB29B600B800371C3C /* CouponLineDetails.swift */; };
21982198
EEB4E2DE29B61AAD00371C3C /* CouponInputTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEB4E2DD29B61AAD00371C3C /* CouponInputTransformer.swift */; };
21992199
EEBDF7DA2A2EF69B00EFEF47 /* ShareProductCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBDF7D92A2EF69B00EFEF47 /* ShareProductCoordinator.swift */; };
2200+
EEBDF7DF2A2F674100EFEF47 /* ShareProductAIEligibilityChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBDF7DE2A2F674100EFEF47 /* ShareProductAIEligibilityChecker.swift */; };
2201+
EEBDF7E22A2F685C00EFEF47 /* ShareProductAIEligibilityCheckerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBDF7E12A2F685C00EFEF47 /* ShareProductAIEligibilityCheckerTests.swift */; };
22002202
EEC2D27F292CF60E0072132E /* JetpackSetupHostingControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEC2D27E292CF60E0072132E /* JetpackSetupHostingControllerTests.swift */; };
22012203
EEC2D281292D10520072132E /* SiteCredentialLoginHostingViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEC2D280292D10520072132E /* SiteCredentialLoginHostingViewControllerTests.swift */; };
22022204
EEC5E01129A70CC300416CAC /* StoreSetupProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEC5E01029A70CC300416CAC /* StoreSetupProgressView.swift */; };
@@ -4513,6 +4515,8 @@
45134515
EEB4E2DB29B600B800371C3C /* CouponLineDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponLineDetails.swift; sourceTree = "<group>"; };
45144516
EEB4E2DD29B61AAD00371C3C /* CouponInputTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponInputTransformer.swift; sourceTree = "<group>"; };
45154517
EEBDF7D92A2EF69B00EFEF47 /* ShareProductCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareProductCoordinator.swift; sourceTree = "<group>"; };
4518+
EEBDF7DE2A2F674100EFEF47 /* ShareProductAIEligibilityChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareProductAIEligibilityChecker.swift; sourceTree = "<group>"; };
4519+
EEBDF7E12A2F685C00EFEF47 /* ShareProductAIEligibilityCheckerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareProductAIEligibilityCheckerTests.swift; sourceTree = "<group>"; };
45164520
EEC2D27E292CF60E0072132E /* JetpackSetupHostingControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackSetupHostingControllerTests.swift; sourceTree = "<group>"; };
45174521
EEC2D280292D10520072132E /* SiteCredentialLoginHostingViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteCredentialLoginHostingViewControllerTests.swift; sourceTree = "<group>"; };
45184522
EEC5E01029A70CC300416CAC /* StoreSetupProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreSetupProgressView.swift; sourceTree = "<group>"; };
@@ -5264,6 +5268,7 @@
52645268
0269177E23260090002AFC20 /* Products */ = {
52655269
isa = PBXGroup;
52665270
children = (
5271+
EEBDF7E02A2F684D00EFEF47 /* ShareProduct */,
52675272
26F94E32267AA3DD00DB6CCF /* Addons */,
52685273
02077F70253816B1005A78EF /* Actions Factory */,
52695274
024F1450250B658F0003030A /* Add Product */,
@@ -10272,6 +10277,15 @@
1027210277
isa = PBXGroup;
1027310278
children = (
1027410279
EEBDF7D92A2EF69B00EFEF47 /* ShareProductCoordinator.swift */,
10280+
EEBDF7DE2A2F674100EFEF47 /* ShareProductAIEligibilityChecker.swift */,
10281+
);
10282+
path = ShareProduct;
10283+
sourceTree = "<group>";
10284+
};
10285+
EEBDF7E02A2F684D00EFEF47 /* ShareProduct */ = {
10286+
isa = PBXGroup;
10287+
children = (
10288+
EEBDF7E12A2F685C00EFEF47 /* ShareProductAIEligibilityCheckerTests.swift */,
1027510289
);
1027610290
path = ShareProduct;
1027710291
sourceTree = "<group>";
@@ -12244,6 +12258,7 @@
1224412258
D8C2A28F231BD00500F503E9 /* ReviewsViewModel.swift in Sources */,
1224512259
026D4652295D763B0037F59A /* CountryCode+FlagEmoji.swift in Sources */,
1224612260
B9F3DAAD29BB71B100DDD545 /* CollectPaymentAppIntent.swift in Sources */,
12261+
EEBDF7DF2A2F674100EFEF47 /* ShareProductAIEligibilityChecker.swift in Sources */,
1224712262
DE23CFFA27462D8F003BE54E /* JCPJetpackInstallIntroView.swift in Sources */,
1224812263
DEC6C51E27479280006832D3 /* JetpackInstallSteps.swift in Sources */,
1224912264
021AEF9E2407F55C00029D28 /* PHAssetImageLoader.swift in Sources */,
@@ -12746,6 +12761,7 @@
1274612761
02AA586628531D0E0068B6F0 /* CloseAccountCoordinatorTests.swift in Sources */,
1274712762
E12AF69B26BA8B2000C371C1 /* CardPresentPaymentsOnboardingUseCaseTests.swift in Sources */,
1274812763
D802549B265531D4001B2CC1 /* CardPresentModalConnectingToReaderTests.swift in Sources */,
12764+
EEBDF7E22A2F685C00EFEF47 /* ShareProductAIEligibilityCheckerTests.swift in Sources */,
1274912765
4572641B27F1FDF2004E1F95 /* AddEditCouponViewModelTests.swift in Sources */,
1275012766
AEE1D4FF25D1580E006A490B /* AttributeOptionListSelectorCommandTests.swift in Sources */,
1275112767
DE4D23A829B0D11E003A4B5D /* WPComPasswordLoginViewModelTests.swift in Sources */,
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import XCTest
2+
@testable import WooCommerce
3+
4+
final class ShareProductAIEligibilityCheckerTests: XCTestCase {
5+
func test_canGenerateShareProductMessageUsingAI_is_enabled_when_site_is_wpcom() {
6+
// Given
7+
let featureFlagService = MockFeatureFlagService(isShareProductAIEnabled: true)
8+
let checker = ShareProductAIEligibilityChecker(site: .fake().copy(isWordPressComStore: true), featureFlagService: featureFlagService)
9+
10+
// Then
11+
XCTAssertTrue(checker.canGenerateShareProductMessageUsingAI)
12+
}
13+
14+
func test_canGenerateShareProductMessageUsingAI_is_disabled_when_site_is_not_wpcom() {
15+
// Given
16+
let featureFlagService = MockFeatureFlagService(isShareProductAIEnabled: true)
17+
let checker = ShareProductAIEligibilityChecker(site: .fake().copy(isWordPressComStore: false), featureFlagService: featureFlagService)
18+
19+
// Then
20+
XCTAssertFalse(checker.canGenerateShareProductMessageUsingAI)
21+
}
22+
23+
func test_canGenerateShareProductMessageUsingAI_is_disabled_when_site_is_nil() {
24+
// Given
25+
let featureFlagService = MockFeatureFlagService(isShareProductAIEnabled: true)
26+
let checker = ShareProductAIEligibilityChecker(site: nil, featureFlagService: featureFlagService)
27+
28+
// Then
29+
XCTAssertFalse(checker.canGenerateShareProductMessageUsingAI)
30+
}
31+
32+
func test_canGenerateShareProductMessageUsingAI_is_disabled_when_site_is_wpcom_and_feature_flag_is_off() {
33+
// Given
34+
let featureFlagService = MockFeatureFlagService(isShareProductAIEnabled: false)
35+
let checker = ShareProductAIEligibilityChecker(site: .fake().copy(isWordPressComStore: true), featureFlagService: featureFlagService)
36+
37+
// Then
38+
XCTAssertFalse(checker.canGenerateShareProductMessageUsingAI)
39+
}
40+
}

0 commit comments

Comments
 (0)