Skip to content

Commit

Permalink
Merge branch 'master' into dependabot/cargo/rust/opencv-0.88.7
Browse files Browse the repository at this point in the history
  • Loading branch information
prybalko authored Jan 16, 2024
2 parents c531cf8 + 88a3ccc commit 2651674
Show file tree
Hide file tree
Showing 6 changed files with 592 additions and 5 deletions.
34 changes: 34 additions & 0 deletions ios/PolkadotVault.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,11 @@
6D80EB522B4EB0B8009C544B /* MSufficientCryptoReady+Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D80EB512B4EB0B8009C544B /* MSufficientCryptoReady+Generate.swift */; };
6D80EB542B4EB0C8009C544B /* MAddressCard+Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D80EB532B4EB0C8009C544B /* MAddressCard+Generate.swift */; };
6D80EB492B4CF582009C544B /* BananaSplitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D80EB482B4CF582009C544B /* BananaSplitService.swift */; };
6D80EB4B2B4E7034009C544B /* NetworkSettingDetailsActionModalViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D80EB4A2B4E7034009C544B /* NetworkSettingDetailsActionModalViewModelTests.swift */; };
6D80EB502B4EAD3E009C544B /* VerifierCertificateViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D80EB4F2B4EAD3E009C544B /* VerifierCertificateViewModelTests.swift */; };
6D80EB522B4EB0B8009C544B /* MSufficientCryptoReady+Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D80EB512B4EB0B8009C544B /* MSufficientCryptoReady+Generate.swift */; };
6D80EB542B4EB0C8009C544B /* MAddressCard+Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D80EB532B4EB0C8009C544B /* MAddressCard+Generate.swift */; };
6D80EB572B4EB117009C544B /* SignSpecsListViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D80EB562B4EB117009C544B /* SignSpecsListViewModelTests.swift */; };
6D84442428D3424F0072FBAC /* HiddenScrollContainerModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D84442328D3424F0072FBAC /* HiddenScrollContainerModifier.swift */; };
6D850BDE292F7B4D00BA9017 /* EnterPasswordModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D850BDD292F7B4D00BA9017 /* EnterPasswordModal.swift */; };
6D850BE2292F85F200BA9017 /* SecuredTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D850BE1292F85F200BA9017 /* SecuredTextField.swift */; };
Expand Down Expand Up @@ -231,6 +236,7 @@
6DB2E7C82B4BBEB0002387DE /* NetworkSelectionSettingsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB2E7C72B4BBEB0002387DE /* NetworkSelectionSettingsViewModelTests.swift */; };
6DB2E7CA2B4BBF6E002387DE /* MmNetwork+Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB2E7C92B4BBF6E002387DE /* MmNetwork+Generate.swift */; };
6DB2E7CC2B4BBF78002387DE /* MNetworkDetails+Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB2E7CB2B4BBF78002387DE /* MNetworkDetails+Generate.swift */; };
6DB2E7CE2B4BC7F6002387DE /* NetworkSettingDetailsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB2E7CD2B4BC7F6002387DE /* NetworkSettingDetailsViewModelTests.swift */; };
6DB39AA42A4579E0004B8FAA /* AddDerivedKeysView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB39AA32A4579E0004B8FAA /* AddDerivedKeysView.swift */; };
6DB39AA92A45C909004B8FAA /* TransparentHelpBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB39AA82A45C909004B8FAA /* TransparentHelpBox.swift */; };
6DB99039295E95E9001101DC /* NetworkCapsuleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB99038295E95E9001101DC /* NetworkCapsuleView.swift */; };
Expand Down Expand Up @@ -561,6 +567,11 @@
6D80EB512B4EB0B8009C544B /* MSufficientCryptoReady+Generate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MSufficientCryptoReady+Generate.swift"; sourceTree = "<group>"; };
6D80EB532B4EB0C8009C544B /* MAddressCard+Generate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MAddressCard+Generate.swift"; sourceTree = "<group>"; };
6D80EB482B4CF582009C544B /* BananaSplitService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BananaSplitService.swift; sourceTree = "<group>"; };
6D80EB4A2B4E7034009C544B /* NetworkSettingDetailsActionModalViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSettingDetailsActionModalViewModelTests.swift; sourceTree = "<group>"; };
6D80EB4F2B4EAD3E009C544B /* VerifierCertificateViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerifierCertificateViewModelTests.swift; sourceTree = "<group>"; };
6D80EB512B4EB0B8009C544B /* MSufficientCryptoReady+Generate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MSufficientCryptoReady+Generate.swift"; sourceTree = "<group>"; };
6D80EB532B4EB0C8009C544B /* MAddressCard+Generate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MAddressCard+Generate.swift"; sourceTree = "<group>"; };
6D80EB562B4EB117009C544B /* SignSpecsListViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignSpecsListViewModelTests.swift; sourceTree = "<group>"; };
6D84442328D3424F0072FBAC /* HiddenScrollContainerModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HiddenScrollContainerModifier.swift; sourceTree = "<group>"; };
6D850BDD292F7B4D00BA9017 /* EnterPasswordModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnterPasswordModal.swift; sourceTree = "<group>"; };
6D850BE1292F85F200BA9017 /* SecuredTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecuredTextField.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -618,6 +629,7 @@
6DB2E7C72B4BBEB0002387DE /* NetworkSelectionSettingsViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSelectionSettingsViewModelTests.swift; sourceTree = "<group>"; };
6DB2E7C92B4BBF6E002387DE /* MmNetwork+Generate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MmNetwork+Generate.swift"; sourceTree = "<group>"; };
6DB2E7CB2B4BBF78002387DE /* MNetworkDetails+Generate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MNetworkDetails+Generate.swift"; sourceTree = "<group>"; };
6DB2E7CD2B4BC7F6002387DE /* NetworkSettingDetailsViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSettingDetailsViewModelTests.swift; sourceTree = "<group>"; };
6DB39AA32A4579E0004B8FAA /* AddDerivedKeysView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddDerivedKeysView.swift; sourceTree = "<group>"; };
6DB39AA82A45C909004B8FAA /* TransparentHelpBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransparentHelpBox.swift; sourceTree = "<group>"; };
6DB99038295E95E9001101DC /* NetworkCapsuleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkCapsuleView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1530,6 +1542,22 @@
path = QRCode;
sourceTree = "<group>";
};
6D80EB4E2B4EAD34009C544B /* VerifierCertificate */ = {
isa = PBXGroup;
children = (
6D80EB4F2B4EAD3E009C544B /* VerifierCertificateViewModelTests.swift */,
);
path = VerifierCertificate;
sourceTree = "<group>";
};
6D80EB552B4EB10D009C544B /* SignSpecs */ = {
isa = PBXGroup;
children = (
6D80EB562B4EB117009C544B /* SignSpecsListViewModelTests.swift */,
);
path = SignSpecs;
sourceTree = "<group>";
};
6D84442228D342430072FBAC /* Modifiers */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -1721,6 +1749,8 @@
6DB2E7C22B4BBC12002387DE /* Subview */ = {
isa = PBXGroup;
children = (
6D80EB552B4EB10D009C544B /* SignSpecs */,
6D80EB4E2B4EAD34009C544B /* VerifierCertificate */,
6DB2E7C62B4BBEA0002387DE /* NetworkSelectionSettings */,
6DB2E7C32B4BBC19002387DE /* Backup */,
);
Expand All @@ -1739,6 +1769,7 @@
isa = PBXGroup;
children = (
6DB2E7C72B4BBEB0002387DE /* NetworkSelectionSettingsViewModelTests.swift */,
6DB2E7CD2B4BC7F6002387DE /* NetworkSettingDetailsViewModelTests.swift */,
6D80EB4A2B4E7034009C544B /* NetworkSettingDetailsActionModalViewModelTests.swift */,
);
path = NetworkSelectionSettings;
Expand Down Expand Up @@ -2685,9 +2716,11 @@
6DE48E922B1F0B96003094D5 /* AutoMockable+T.generated.swift in Sources */,
6DE48E892B1F0B96003094D5 /* AutoMockable+M.generated.swift in Sources */,
6DE48E7F2B1F0B96003094D5 /* AutoMockable+Z.generated.swift in Sources */,
6D80EB572B4EB117009C544B /* SignSpecsListViewModelTests.swift in Sources */,
6DAFCAF82B0A360600DDD165 /* CameraPermissionHandlerTests.swift in Sources */,
6DE48E952B1F0B96003094D5 /* AutoMockable+Q.generated.swift in Sources */,
6DE48E802B1F0B96003094D5 /* AutoMockable+P.generated.swift in Sources */,
6D80EB502B4EAD3E009C544B /* VerifierCertificateViewModelTests.swift in Sources */,
6D80EB522B4EB0B8009C544B /* MSufficientCryptoReady+Generate.swift in Sources */,
6DE48E8C2B1F0B96003094D5 /* AutoMockable+R.generated.swift in Sources */,
6D5801E5289937BA006C41D8 /* ConnectivityMonitoringAssemblerTests.swift in Sources */,
Expand All @@ -2702,6 +2735,7 @@
6DE48E972B1F0B96003094D5 /* AutoMockable+L.generated.swift in Sources */,
6DE48E852B1F0B96003094D5 /* AutoMockable+U.generated.swift in Sources */,
6DAFCAFA2B0AE5C000DDD165 /* KeychainAccessAdapterTests.swift in Sources */,
6DB2E7CE2B4BC7F6002387DE /* NetworkSettingDetailsViewModelTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ extension SignSpecsListView {
final class ViewModel: ObservableObject {
private let networkKey: String
private let seedsMediator: SeedsMediating
private let service: ManageNetworkDetailsService
private let service: ManageNetworkDetailsServicing
let type: SpecSignType
@Published var detailsContent: MSufficientCryptoReady!
@Published var content: MSignSufficientCrypto?
Expand All @@ -137,7 +137,7 @@ extension SignSpecsListView {
networkKey: String,
type: SpecSignType,
seedsMediator: SeedsMediating = ServiceLocator.seedsMediator,
service: ManageNetworkDetailsService = ManageNetworkDetailsService()
service: ManageNetworkDetailsServicing = ManageNetworkDetailsService()
) {
self.networkKey = networkKey
self.type = type
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ extension VerifierCertificateView {
@Published var isPresentingError: Bool = false
@Published var presentableError: ErrorBottomModalViewModel = .alertError(message: "")
private let onboardingMediator: OnboardingMediating
private let service: GeneralVerifierService
private let service: GeneralVerifierServicing
var dismissViewRequest: AnyPublisher<Void, Never> {
dismissRequest.eraseToAnyPublisher()
}
Expand All @@ -105,7 +105,7 @@ extension VerifierCertificateView {

init(
onboardingMediator: OnboardingMediating = ServiceLocator.onboardingMediator,
service: GeneralVerifierService = GeneralVerifierService()
service: GeneralVerifierServicing = GeneralVerifierService()
) {
self.onboardingMediator = onboardingMediator
self.service = service
Expand All @@ -122,7 +122,7 @@ extension VerifierCertificateView {
dismissRequest.send()
}

func loadData() {
private func loadData() {
service.getGeneralVerifier { result in
switch result {
case let .success(content):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
//
// NetworkSettingDetailsViewModelTests.swift
// PolkadotVaultTests
//
// Created by Krzysztof Rodak on 12/01/2024.
//

import Combine
import Foundation
@testable import PolkadotVault
import XCTest

final class NetworkSettingsDetailsViewModelTests: XCTestCase {
private var viewModel: NetworkSettingsDetails.ViewModel!
private var manageNetworkDetailsServiceMock: ManageNetworkDetailsServicingMock!
private var cancelBag: CancelBag!
private var onCompleteCalled = false
private var onCompleteReceivedResult: NetworkSettingsDetails.OnCompletionAction!
private var networkDetails: MNetworkDetails!

override func setUp() {
super.setUp()
cancelBag = CancelBag()
manageNetworkDetailsServiceMock = ManageNetworkDetailsServicingMock()
networkDetails = .generate()
viewModel = NetworkSettingsDetails.ViewModel(
networkKey: "testKey",
networkDetails: networkDetails,
networkDetailsService: manageNetworkDetailsServiceMock,
onCompletion: { onCompleteResult in
self.onCompleteCalled = true
self.onCompleteReceivedResult = onCompleteResult
}
)
}

override func tearDown() {
viewModel = nil
manageNetworkDetailsServiceMock = nil
cancelBag = nil
super.tearDown()
}

func testOnAppearUpdatesView() {
// Given
let networkDetails = MNetworkDetails.generate()

// When
viewModel.onAppear()
manageNetworkDetailsServiceMock.getNetworkDetailsReceivedCompletion.first?(.success(networkDetails))

// Then
XCTAssertEqual(viewModel.networkDetails, networkDetails)
}

func testOnAppearWhenFailurePresentsError() {
// Given
let error = ServiceError(message: "Error")
let updatedNetworkDetails = MNetworkDetails.generate(name: "New name")
let expectedPresentableError: ErrorBottomModalViewModel = .alertError(message: error.localizedDescription)

// When
viewModel.onAppear()
manageNetworkDetailsServiceMock.getNetworkDetailsReceivedCompletion.first?(.failure(error))

// Then
XCTAssertNotEqual(viewModel.networkDetails, updatedNetworkDetails)
XCTAssertTrue(viewModel.isPresentingError)
XCTAssertEqual(viewModel.presentableError, expectedPresentableError)
}

func testRemoveMetadataSuccess() {
// Given
let metadataRecord = MMetadataRecord.generate()
viewModel.didTapDelete(metadataRecord)

// When
viewModel.removeMetadata()
manageNetworkDetailsServiceMock.deleteNetworkMetadataReceivedCompletion.first?(.success(()))

// Then
XCTAssertFalse(viewModel.isPresentingRemoveMetadataConfirmation)
XCTAssertTrue(viewModel.isSnackbarPresented)
}

func testRemoveMetadataFailure() {
// Given
let error = ServiceError(message: "Error")
viewModel.didTapDelete(.generate())
let expectedPresentableError: ErrorBottomModalViewModel = .alertError(message: error.localizedDescription)

// When
viewModel.removeMetadata()
manageNetworkDetailsServiceMock.deleteNetworkMetadataReceivedCompletion.first?(.failure(error))

// Then
XCTAssertFalse(viewModel.isPresentingRemoveMetadataConfirmation)
XCTAssertTrue(viewModel.isPresentingError)
XCTAssertEqual(viewModel.presentableError, expectedPresentableError)
}

func testRemoveNetworkSuccess() {
// When
viewModel.removeNetwork()
manageNetworkDetailsServiceMock.deleteNetworkReceivedCompletion.first?(.success(()))

// Then
XCTAssertTrue(onCompleteCalled)
XCTAssertEqual(onCompleteReceivedResult, .networkDeleted(networkDetails.title))
}

func testRemoveNetworkFailure() {
// Given
let error = ServiceError(message: "Error")
let expectedPresentableError: ErrorBottomModalViewModel = .alertError(message: error.localizedDescription)

// When
viewModel.removeNetwork()
manageNetworkDetailsServiceMock.deleteNetworkReceivedCompletion.first?(.failure(error))

// Then
XCTAssertTrue(viewModel.isPresentingError)
XCTAssertEqual(viewModel.presentableError, expectedPresentableError)
}

func testOnTapDeleteTriggersConfirmation() {
// Given
let metadata = MMetadataRecord.generate()

// When
viewModel.didTapDelete(metadata)

// Then
XCTAssertTrue(viewModel.isPresentingRemoveMetadataConfirmation)
}

func testCancelMetadataRemovalResetsState() {
// When
viewModel.cancelMetadataRemoval()

// Then
XCTAssertFalse(viewModel.isPresentingRemoveMetadataConfirmation)
}

func testOnAddTapOpensQRScanner() {
// When
viewModel.onAddTap()

// Then
XCTAssertTrue(viewModel.isShowingQRScanner)
}

func testOnQRScannerDismissUpdatesView() {
// When
viewModel.onQRScannerDismiss()

// Then
XCTAssertEqual(manageNetworkDetailsServiceMock.getNetworkDetailsCallsCount, 1)
}

func testOnMoreMenuTapOpensActionSheet() {
// When
viewModel.onMoreMenuTap()

// Then
XCTAssertTrue(viewModel.isShowingActionSheet)
}

func testOnMoreActionSheetDismissalWithSignSpecs() {
// Given
viewModel.shouldSignSpecs = true

// When
viewModel.onMoreActionSheetDismissal()

// Then
XCTAssertTrue(viewModel.isPresentingSignSpecList)
XCTAssertEqual(viewModel.specSignType, .network)
}

func testOnMoreActionSheetDismissalWithRemoveNetworkConfirmation() {
// Given
viewModel.shouldPresentRemoveNetworkConfirmation = true

// When
viewModel.onMoreActionSheetDismissal()

// Then
XCTAssertTrue(viewModel.isPresentingRemoveNetworkConfirmation)
XCTAssertFalse(viewModel.shouldPresentRemoveNetworkConfirmation)
}

func testCancelNetworkRemovalResetsState() {
// Given
viewModel.isPresentingRemoveNetworkConfirmation = true

// When
viewModel.cancelNetworkRemoval()

// Then
XCTAssertFalse(viewModel.isPresentingRemoveNetworkConfirmation)
}

func testDidTapSignOpensSignSpecList() {
// Given
let metadata = MMetadataRecord.generate()

// When
viewModel.didTapSign(metadata)

// Then
XCTAssertTrue(viewModel.isPresentingSignSpecList)
XCTAssertEqual(viewModel.specSignType, .metadata(metadataSpecsVersion: metadata.specsVersion))
}

func testListenToNavigationUpdatesReflectsView() {
// Given
viewModel.isPresentingSignSpecList = true

// When
viewModel.isPresentingSignSpecList = false

// Then
XCTAssertEqual(manageNetworkDetailsServiceMock.getNetworkDetailsCallsCount, 1)
}
}
Loading

0 comments on commit 2651674

Please sign in to comment.