diff --git a/Features/Onboarding/Package.swift b/Features/Onboarding/Package.swift index c53a4b502..dfbee8625 100644 --- a/Features/Onboarding/Package.swift +++ b/Features/Onboarding/Package.swift @@ -53,7 +53,11 @@ let package = Package( name: "OnboardingTest", dependencies: [ "Onboarding", + .product(name: "PrimitivesTestKit", package: "Primitives"), .product(name: "WalletServiceTestKit", package: "FeatureServices"), + .product(name: "KeystoreTestKit", package: "Keystore"), + .product(name: "NameServiceTestKit", package: "ChainServices"), + .product(name: "StoreTestKit", package: "Store"), ], path: "Tests" ) diff --git a/Features/Onboarding/Sources/ViewModels/CreateWalletModel.swift b/Features/Onboarding/Sources/ViewModels/CreateWalletModel.swift index 8853ebb01..ea721407c 100644 --- a/Features/Onboarding/Sources/ViewModels/CreateWalletModel.swift +++ b/Features/Onboarding/Sources/ViewModels/CreateWalletModel.swift @@ -53,6 +53,7 @@ extension CreateWalletModel { source: .create ) walletService.acceptTerms() + WalletPreferences(walletId: wallet.walletId).completeInitialSynchronization() return wallet } diff --git a/Features/Onboarding/Sources/ViewModels/ImportWalletViewModel.swift b/Features/Onboarding/Sources/ViewModels/ImportWalletViewModel.swift index 6f9c5fc39..b3d745e9f 100644 --- a/Features/Onboarding/Sources/ViewModels/ImportWalletViewModel.swift +++ b/Features/Onboarding/Sources/ViewModels/ImportWalletViewModel.swift @@ -6,7 +6,6 @@ import Primitives import WalletService import AvatarService import PrimitivesComponents -import Preferences import enum Keystore.KeystoreImportType @Observable @@ -51,7 +50,6 @@ extension ImportWalletViewModel { func importWallet(data: WalletImportData) async throws -> Wallet { let wallet = try await walletService.loadOrCreateWallet(name: data.name, type: data.keystoreType, source: .import) walletService.acceptTerms() - WalletPreferences(walletId: wallet.walletId).completeInitialSynchronization() try await walletService.setCurrent(wallet: wallet) return wallet } diff --git a/Features/Onboarding/Tests/CreateWalletModelTests.swift b/Features/Onboarding/Tests/CreateWalletModelTests.swift new file mode 100644 index 000000000..5500050f8 --- /dev/null +++ b/Features/Onboarding/Tests/CreateWalletModelTests.swift @@ -0,0 +1,32 @@ +// Copyright (c). Gem Wallet. All rights reserved. + +import Foundation +import Testing +import Preferences +import Keystore +import KeystoreTestKit +import StoreTestKit +import WalletServiceTestKit + +@testable import Onboarding + +@MainActor +struct CreateWalletModelTests { + + @Test + func createWalletSetsAddressStatus() async throws { + let model = CreateWalletModel( + walletService: .mock(keystore: KeystoreMock()), + avatarService: .init(store: .mock()), + onComplete: nil + ) + + let wallet = try await model.createWallet(words: LocalKeystore.words) + let preferences = WalletPreferences(walletId: wallet.walletId) + + #expect(preferences.completeInitialAddressStatus) + #expect(preferences.completeInitialLoadAssets) + + preferences.clear() + } +} diff --git a/Features/Onboarding/Tests/ImportWalletViewModelTests.swift b/Features/Onboarding/Tests/ImportWalletViewModelTests.swift new file mode 100644 index 000000000..82f7f3163 --- /dev/null +++ b/Features/Onboarding/Tests/ImportWalletViewModelTests.swift @@ -0,0 +1,40 @@ +// Copyright (c). Gem Wallet. All rights reserved. + +import Foundation +import Testing +import Primitives +import Preferences +import Keystore +import KeystoreTestKit +import PrimitivesTestKit +import NameServiceTestKit +import StoreTestKit +import WalletServiceTestKit + +@testable import Onboarding + +@MainActor +struct ImportWalletViewModelTests { + + @Test + func importWalletDoesNotSetAddressStatus() async throws { + let keystore = KeystoreMock() + let preferences = WalletPreferences(walletId: Wallet.mock().walletId) + preferences.clear() + + let model = ImportWalletViewModel( + walletService: .mock(keystore: keystore), + avatarService: .init(store: .mock()), + nameService: .mock(), + onComplete: nil + ) + + _ = try await model.importWallet(data: WalletImportData( + name: "Test", + keystoreType: .phrase(words: LocalKeystore.words, chains: [.tron]) + )) + + #expect(preferences.completeInitialAddressStatus == false) + #expect(preferences.completeInitialLoadAssets == false) + } +} diff --git a/Features/WalletTab/Tests/WalletSceneViewModelTests.swift b/Features/WalletTab/Tests/WalletSceneViewModelTests.swift index 84232528c..3166d0d3e 100644 --- a/Features/WalletTab/Tests/WalletSceneViewModelTests.swift +++ b/Features/WalletTab/Tests/WalletSceneViewModelTests.swift @@ -16,9 +16,12 @@ import PreferencesTestKit struct WalletSceneViewModelTests { @Test func isLoading() { + let preferences = WalletPreferences(walletId: Wallet.mock().walletId) + preferences.clear() + let model = WalletSceneViewModel.mock() #expect(model.isLoadingAssets == false) - + model.shouldStartLoadingAssets() #expect(model.isLoadingAssets) diff --git a/Packages/Preferences/Sources/WalletPreferences.swift b/Packages/Preferences/Sources/WalletPreferences.swift index 4d412dfef..df9b6ca32 100644 --- a/Packages/Preferences/Sources/WalletPreferences.swift +++ b/Packages/Preferences/Sources/WalletPreferences.swift @@ -44,10 +44,6 @@ public final class WalletPreferences: @unchecked Sendable { get { defaults.bool(forKey: Keys.completeInitialAddressStatus) } } - public var isCompleteInitialSynchronization: Bool { - completeInitialAddressStatus && completeInitialLoadAssets - } - public func completeInitialSynchronization() { completeInitialAddressStatus = true completeInitialLoadAssets = true