From 6c77e0901b8aa434df66e73505150c3b62ed3380 Mon Sep 17 00:00:00 2001 From: Michal Fousek Date: Tue, 7 Mar 2023 18:03:37 +0100 Subject: [PATCH] [#595] Visbility of fiat conversion on homeage depends on feature flag (#625) Closes #595 --- secant.xcodeproj/project.pbxproj | 4 ++++ secant/Features/Home/HomeStore.swift | 2 ++ secant/Features/Home/HomeView.swift | 5 +++++ secant/Features/Root/RootInitialization.swift | 1 + secant/Models/WalletConfig.swift | 2 ++ .../HomeTests/HomeFeatureFlagTests.swift | 21 +++++++++++++++++++ .../HomeSnapshotTests/HomeSnapshotTests.swift | 1 + .../WalletEventsSnapshotTests.swift | 4 ++++ .../WalletConfigProviderTests.swift | 1 + 9 files changed, 41 insertions(+) create mode 100644 secantTests/HomeTests/HomeFeatureFlagTests.swift diff --git a/secant.xcodeproj/project.pbxproj b/secant.xcodeproj/project.pbxproj index fabc1ca..01101ec 100644 --- a/secant.xcodeproj/project.pbxproj +++ b/secant.xcodeproj/project.pbxproj @@ -304,6 +304,7 @@ 2EDA07A027EDE18C00D6F09B /* TCATextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EDA079F27EDE18C00D6F09B /* TCATextField.swift */; }; 2EDA07A227EDE1AE00D6F09B /* TextFieldFooter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EDA07A127EDE1AE00D6F09B /* TextFieldFooter.swift */; }; 2EDA07A427EDE2A900D6F09B /* DebugFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EDA07A327EDE2A900D6F09B /* DebugFrame.swift */; }; + 341B30BB29B78D1000697081 /* HomeFeatureFlagTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341B30BA29B78D1000697081 /* HomeFeatureFlagTests.swift */; }; 34429C6E28E703CD00F2B929 /* TransactionSendingSnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34429C6D28E703CD00F2B929 /* TransactionSendingSnapshotTests.swift */; }; 3448CB3228E47666006ADEDB /* NotEnoughFreeSpaceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3448CB3128E47666006ADEDB /* NotEnoughFreeSpaceView.swift */; }; 3448CB3728E485CB006ADEDB /* NotEnoughFeeSpaceSnapshots.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3448CB3628E485CB006ADEDB /* NotEnoughFeeSpaceSnapshots.swift */; }; @@ -639,6 +640,7 @@ 2EDA079F27EDE18C00D6F09B /* TCATextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TCATextField.swift; sourceTree = ""; }; 2EDA07A127EDE1AE00D6F09B /* TextFieldFooter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldFooter.swift; sourceTree = ""; }; 2EDA07A327EDE2A900D6F09B /* DebugFrame.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugFrame.swift; sourceTree = ""; }; + 341B30BA29B78D1000697081 /* HomeFeatureFlagTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeFeatureFlagTests.swift; sourceTree = ""; }; 34429C6D28E703CD00F2B929 /* TransactionSendingSnapshotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionSendingSnapshotTests.swift; sourceTree = ""; }; 3448CB3128E47666006ADEDB /* NotEnoughFreeSpaceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotEnoughFreeSpaceView.swift; sourceTree = ""; }; 3448CB3628E485CB006ADEDB /* NotEnoughFeeSpaceSnapshots.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotEnoughFeeSpaceSnapshots.swift; sourceTree = ""; }; @@ -1413,6 +1415,7 @@ isa = PBXGroup; children = ( 9E3911382848AD500073DD9A /* HomeTests.swift */, + 341B30BA29B78D1000697081 /* HomeFeatureFlagTests.swift */, ); path = HomeTests; sourceTree = ""; @@ -2990,6 +2993,7 @@ 9E7225F12889539300DF7F17 /* SettingsSnapshotTests.swift in Sources */, 3469F18229ACD70500A07146 /* OnboardingFlowFeatureFlagTests.swift in Sources */, 0DFE93DF272C6D4B000FCCA5 /* RecoveryPhraseBackupTests.swift in Sources */, + 341B30BB29B78D1000697081 /* HomeFeatureFlagTests.swift in Sources */, 9EDDEAA22829610D00B4100C /* CurrencySelectionTests.swift in Sources */, 9E6713F12897F81B00A6796F /* MultiLineTextFieldTests.swift in Sources */, 9E01F8282833CDA0000EFC57 /* ScanTests.swift in Sources */, diff --git a/secant/Features/Home/HomeStore.swift b/secant/Features/Home/HomeStore.swift index fc1eed2..5e248d5 100644 --- a/secant/Features/Home/HomeStore.swift +++ b/secant/Features/Home/HomeStore.swift @@ -31,6 +31,7 @@ struct HomeReducer: ReducerProtocol { var settingsState: SettingsReducer.State var shieldedBalance: Balance var synchronizerStatusSnapshot: SyncStatusSnapshot + var walletConfig: WalletConfig var walletEventsState: WalletEventsFlowReducer.State // TODO: [#311] - Get the ZEC price from the SDK, https://github.com/zcash/secant-ios-wallet/issues/311 var zecPrice = Decimal(140.0) @@ -238,6 +239,7 @@ extension HomeReducer.State { settingsState: .placeholder, shieldedBalance: Balance.zero, synchronizerStatusSnapshot: .default, + walletConfig: .default, walletEventsState: .emptyPlaceHolder ) } diff --git a/secant/Features/Home/HomeView.swift b/secant/Features/Home/HomeView.swift index 40d5187..b013ba0 100644 --- a/secant/Features/Home/HomeView.swift +++ b/secant/Features/Home/HomeView.swift @@ -106,6 +106,11 @@ extension HomeView { viewStore.send(.debugMenuStartup) } } + + if viewStore.walletConfig.isEnabled(.showFiatConversion) { + Text("$\(viewStore.totalCurrencyBalance.decimalString())") + .font(.system(size: 20)) + } Text("\(viewStore.synchronizerStatusSnapshot.message)") } diff --git a/secant/Features/Root/RootInitialization.swift b/secant/Features/Root/RootInitialization.swift index b33273d..1589f3c 100644 --- a/secant/Features/Root/RootInitialization.swift +++ b/secant/Features/Root/RootInitialization.swift @@ -312,6 +312,7 @@ extension RootReducer { case .updateStateAfterConfigUpdate(let walletConfig): state.walletConfig = walletConfig state.onboardingState.walletConfig = walletConfig + state.homeState.walletConfig = walletConfig return .none case .dismissAlert: diff --git a/secant/Models/WalletConfig.swift b/secant/Models/WalletConfig.swift index 4c35941..daccb22 100644 --- a/secant/Models/WalletConfig.swift +++ b/secant/Models/WalletConfig.swift @@ -11,12 +11,14 @@ enum FeatureFlag: String, CaseIterable, Codable { case testFlag2 case onboardingFlow case testBackupPhraseFlow + case showFiatConversion var enabledByDefault: Bool { switch self { case .testFlag1, .testFlag2: return false case .onboardingFlow: return false case .testBackupPhraseFlow: return false + case .showFiatConversion: return false } } } diff --git a/secantTests/HomeTests/HomeFeatureFlagTests.swift b/secantTests/HomeTests/HomeFeatureFlagTests.swift new file mode 100644 index 0000000..69c5e7d --- /dev/null +++ b/secantTests/HomeTests/HomeFeatureFlagTests.swift @@ -0,0 +1,21 @@ +// +// OnboardingFlowFeatureFlagTests.swift +// secantTests +// +// Created by Lukáš Korba on 23.02.2023. +// + +import XCTest +@testable import secant_testnet + +class HomeFeatureFlagTests: XCTestCase { + override func setUp() { + super.setUp() + + UserDefaultsWalletConfigStorage().clearAll() + } + + func testShowFiatConversionOffByDefault() throws { + XCTAssertFalse(WalletConfig.default.isEnabled(.showFiatConversion)) + } +} diff --git a/secantTests/SnapshotTests/HomeSnapshotTests/HomeSnapshotTests.swift b/secantTests/SnapshotTests/HomeSnapshotTests/HomeSnapshotTests.swift index 6532720..457c207 100644 --- a/secantTests/SnapshotTests/HomeSnapshotTests/HomeSnapshotTests.swift +++ b/secantTests/SnapshotTests/HomeSnapshotTests/HomeSnapshotTests.swift @@ -44,6 +44,7 @@ class HomeSnapshotTests: XCTestCase { settingsState: .placeholder, shieldedBalance: balance.redacted, synchronizerStatusSnapshot: .default, + walletConfig: .default, walletEventsState: .init(walletEvents: IdentifiedArrayOf(uniqueElements: walletEvents)) ), reducer: HomeReducer() diff --git a/secantTests/SnapshotTests/WalletEventsSnapshotTests/WalletEventsSnapshotTests.swift b/secantTests/SnapshotTests/WalletEventsSnapshotTests/WalletEventsSnapshotTests.swift index 2f634d9..9e2dbd0 100644 --- a/secantTests/SnapshotTests/WalletEventsSnapshotTests/WalletEventsSnapshotTests.swift +++ b/secantTests/SnapshotTests/WalletEventsSnapshotTests/WalletEventsSnapshotTests.swift @@ -59,6 +59,7 @@ class WalletEventsSnapshotTests: XCTestCase { settingsState: .placeholder, shieldedBalance: balance.redacted, synchronizerStatusSnapshot: .default, + walletConfig: .default, walletEventsState: .init(walletEvents: IdentifiedArrayOf(uniqueElements: [walletEvent])) ), reducer: HomeReducer() @@ -111,6 +112,7 @@ class WalletEventsSnapshotTests: XCTestCase { settingsState: .placeholder, shieldedBalance: balance.redacted, synchronizerStatusSnapshot: .default, + walletConfig: .default, walletEventsState: .init(walletEvents: IdentifiedArrayOf(uniqueElements: [walletEvent])) ), reducer: HomeReducer() @@ -163,6 +165,7 @@ class WalletEventsSnapshotTests: XCTestCase { settingsState: .placeholder, shieldedBalance: balance.redacted, synchronizerStatusSnapshot: .default, + walletConfig: .default, walletEventsState: .init(walletEvents: IdentifiedArrayOf(uniqueElements: [walletEvent])) ), reducer: HomeReducer() @@ -221,6 +224,7 @@ class WalletEventsSnapshotTests: XCTestCase { settingsState: .placeholder, shieldedBalance: balance.redacted, synchronizerStatusSnapshot: .default, + walletConfig: .default, walletEventsState: .init(walletEvents: IdentifiedArrayOf(uniqueElements: [walletEvent])) ), reducer: HomeReducer() diff --git a/secantTests/WalletConfigProviderTests/WalletConfigProviderTests.swift b/secantTests/WalletConfigProviderTests/WalletConfigProviderTests.swift index 8a36af1..8b05029 100644 --- a/secantTests/WalletConfigProviderTests/WalletConfigProviderTests.swift +++ b/secantTests/WalletConfigProviderTests/WalletConfigProviderTests.swift @@ -133,6 +133,7 @@ class WalletConfigProviderTests: XCTestCase { store.receive(.updateStateAfterConfigUpdate(flags)) { state in state.walletConfig = flags state.onboardingState.walletConfig = flags + state.homeState.walletConfig = flags } } }