diff --git a/Kickstarter-iOS/Features/RemoteConfigFeatureFlagTools/Controller/RemoteConfigFeatureFlagToolsViewControllerTests.swift b/Kickstarter-iOS/Features/RemoteConfigFeatureFlagTools/Controller/RemoteConfigFeatureFlagToolsViewControllerTests.swift index 8ba9135a2b..97b357fa39 100644 --- a/Kickstarter-iOS/Features/RemoteConfigFeatureFlagTools/Controller/RemoteConfigFeatureFlagToolsViewControllerTests.swift +++ b/Kickstarter-iOS/Features/RemoteConfigFeatureFlagTools/Controller/RemoteConfigFeatureFlagToolsViewControllerTests.swift @@ -25,6 +25,7 @@ final class RemoteConfigFeatureFlagToolsViewControllerTests: TestCase { RemoteConfigFeature.consentManagementDialogEnabled.rawValue: false, RemoteConfigFeature.facebookLoginInterstitialEnabled .rawValue: false, + RemoteConfigFeature.reportThisProjectEnabled.rawValue: false, RemoteConfigFeature.creatorDashboardEnabled .rawValue: false ] diff --git a/Kickstarter-iOS/Features/RemoteConfigFeatureFlagTools/Controller/__Snapshots__/RemoteConfigFeatureFlagToolsViewControllerTests/testRemoteConfigFeatureFlagToolsViewController.1.png b/Kickstarter-iOS/Features/RemoteConfigFeatureFlagTools/Controller/__Snapshots__/RemoteConfigFeatureFlagToolsViewControllerTests/testRemoteConfigFeatureFlagToolsViewController.1.png index f6aa3b4333..dd3a8c22bd 100644 Binary files a/Kickstarter-iOS/Features/RemoteConfigFeatureFlagTools/Controller/__Snapshots__/RemoteConfigFeatureFlagToolsViewControllerTests/testRemoteConfigFeatureFlagToolsViewController.1.png and b/Kickstarter-iOS/Features/RemoteConfigFeatureFlagTools/Controller/__Snapshots__/RemoteConfigFeatureFlagToolsViewControllerTests/testRemoteConfigFeatureFlagToolsViewController.1.png differ diff --git a/Library/RemoteConfig/RemoteConfigFeature+Helpers.swift b/Library/RemoteConfig/RemoteConfigFeature+Helpers.swift index 62289a729a..4b8719d522 100644 --- a/Library/RemoteConfig/RemoteConfigFeature+Helpers.swift +++ b/Library/RemoteConfig/RemoteConfigFeature+Helpers.swift @@ -21,6 +21,13 @@ public func featureFacebookLoginInterstitialEnabled() -> Bool { .isFeatureEnabled(featureKey: RemoteConfigFeature.facebookLoginInterstitialEnabled) ?? false) } +public func featureReportThisProjectEnabled() -> Bool { + return AppEnvironment.current.userDefaults + .remoteConfigFeatureFlags[RemoteConfigFeature.reportThisProjectEnabled.rawValue] ?? + (AppEnvironment.current.remoteConfigClient? + .isFeatureEnabled(featureKey: RemoteConfigFeature.reportThisProjectEnabled) ?? false) +} + public func featureUseOfAIProjectTabEnabled() -> Bool { return AppEnvironment.current.userDefaults .remoteConfigFeatureFlags[RemoteConfigFeature.useOfAIProjectTab.rawValue] ?? diff --git a/Library/RemoteConfig/RemoteConfigFeature+HelpersTests.swift b/Library/RemoteConfig/RemoteConfigFeature+HelpersTests.swift index 85282db0a2..6520960ff1 100644 --- a/Library/RemoteConfig/RemoteConfigFeature+HelpersTests.swift +++ b/Library/RemoteConfig/RemoteConfigFeature+HelpersTests.swift @@ -57,6 +57,24 @@ final class RemoteConfigFeatureHelpersTests: TestCase { } } + func testReportThisProject_RemoteConfig_FeatureFlag_True() { + let mockRemoteConfigClient = MockRemoteConfigClient() + |> \.features .~ [RemoteConfigFeature.reportThisProjectEnabled.rawValue: true] + + withEnvironment(remoteConfigClient: mockRemoteConfigClient) { + XCTAssertTrue(featureReportThisProjectEnabled()) + } + } + + func testReportThisProject_RemoteConfig_FeatureFlag_False() { + let mockRemoteConfigClient = MockRemoteConfigClient() + |> \.features .~ [RemoteConfigFeature.reportThisProjectEnabled.rawValue: false] + + withEnvironment(remoteConfigClient: mockRemoteConfigClient) { + XCTAssertFalse(featureReportThisProjectEnabled()) + } + } + func testUseOfAIProjectTab_RemoteConfig_FeatureFlag_False() { let mockRemoteConfigClient = MockRemoteConfigClient() |> \.features .~ [RemoteConfigFeature.useOfAIProjectTab.rawValue: false] diff --git a/Library/RemoteConfig/RemoteConfigFeature.swift b/Library/RemoteConfig/RemoteConfigFeature.swift index 41f3f697f0..8d8466e037 100644 --- a/Library/RemoteConfig/RemoteConfigFeature.swift +++ b/Library/RemoteConfig/RemoteConfigFeature.swift @@ -4,6 +4,7 @@ public enum RemoteConfigFeature: String, CaseIterable { case consentManagementDialogEnabled = "consent_management_dialog" case creatorDashboardEnabled = "creator_dashboard" case facebookLoginInterstitialEnabled = "facebook_interstitial" + case reportThisProjectEnabled = "report_this_project" case useOfAIProjectTab = "use_of_ai_project_tab" } @@ -13,6 +14,7 @@ extension RemoteConfigFeature: CustomStringConvertible { case .consentManagementDialogEnabled: return "Consent Management Dialog" case .creatorDashboardEnabled: return "Creator Dashboard" case .facebookLoginInterstitialEnabled: return "Facebook Login Interstitial" + case .reportThisProjectEnabled: return "Report This Project" case .useOfAIProjectTab: return "Use of AI Project Tab" } } diff --git a/Library/ViewModels/RemoteConfigFeatureFlagToolsViewModel.swift b/Library/ViewModels/RemoteConfigFeatureFlagToolsViewModel.swift index df508edf4c..1413d96a93 100644 --- a/Library/ViewModels/RemoteConfigFeatureFlagToolsViewModel.swift +++ b/Library/ViewModels/RemoteConfigFeatureFlagToolsViewModel.swift @@ -91,6 +91,8 @@ private func isFeatureEnabled(_ feature: RemoteConfigFeature) -> Bool { return featureFacebookLoginInterstitialEnabled() case .creatorDashboardEnabled: return featureCreatorDashboardEnabled() + case .reportThisProjectEnabled: + return featureReportThisProjectEnabled() case .useOfAIProjectTab: return featureUseOfAIProjectTabEnabled() } @@ -109,6 +111,9 @@ private func getValueFromUserDefaults(for feature: RemoteConfigFeature) -> Bool? case .creatorDashboardEnabled: return AppEnvironment.current.userDefaults .remoteConfigFeatureFlags[RemoteConfigFeature.creatorDashboardEnabled.rawValue] + case .reportThisProjectEnabled: + return AppEnvironment.current.userDefaults + .remoteConfigFeatureFlags[RemoteConfigFeature.reportThisProjectEnabled.rawValue] case .useOfAIProjectTab: return AppEnvironment.current.userDefaults .remoteConfigFeatureFlags[RemoteConfigFeature.useOfAIProjectTab.rawValue] @@ -128,6 +133,9 @@ private func setValueInUserDefaults(for feature: RemoteConfigFeature, and value: case .creatorDashboardEnabled: return AppEnvironment.current.userDefaults .remoteConfigFeatureFlags[RemoteConfigFeature.creatorDashboardEnabled.rawValue] = value + case .reportThisProjectEnabled: + return AppEnvironment.current.userDefaults + .remoteConfigFeatureFlags[RemoteConfigFeature.reportThisProjectEnabled.rawValue] = value case .useOfAIProjectTab: return AppEnvironment.current.userDefaults .remoteConfigFeatureFlags[RemoteConfigFeature.useOfAIProjectTab.rawValue] = value diff --git a/Library/ViewModels/RemoteConfigFeatureFlagToolsViewModelTests.swift b/Library/ViewModels/RemoteConfigFeatureFlagToolsViewModelTests.swift index a162bf747e..3bedaade69 100644 --- a/Library/ViewModels/RemoteConfigFeatureFlagToolsViewModelTests.swift +++ b/Library/ViewModels/RemoteConfigFeatureFlagToolsViewModelTests.swift @@ -25,6 +25,7 @@ final class RemoteConfigFlagToolsViewModelTests: TestCase { RemoteConfigFeature.consentManagementDialogEnabled.rawValue: true, RemoteConfigFeature.facebookLoginInterstitialEnabled.rawValue: true, RemoteConfigFeature.creatorDashboardEnabled.rawValue: true, + RemoteConfigFeature.reportThisProjectEnabled.rawValue: true, RemoteConfigFeature.useOfAIProjectTab.rawValue: true ] @@ -47,6 +48,7 @@ final class RemoteConfigFlagToolsViewModelTests: TestCase { RemoteConfigFeature.consentManagementDialogEnabled.rawValue: true, RemoteConfigFeature.facebookLoginInterstitialEnabled.rawValue: true, RemoteConfigFeature.creatorDashboardEnabled.rawValue: false, + RemoteConfigFeature.reportThisProjectEnabled.rawValue: false, RemoteConfigFeature.useOfAIProjectTab.rawValue: false ]