2022-04-28 03:22:31 -07:00
|
|
|
//
|
2022-06-23 02:05:34 -07:00
|
|
|
// WalletEventsTests.swift
|
2022-04-28 03:22:31 -07:00
|
|
|
// secantTests
|
|
|
|
//
|
|
|
|
// Created by Lukáš Korba on 27.04.2022.
|
|
|
|
//
|
|
|
|
|
|
|
|
import XCTest
|
|
|
|
@testable import secant_testnet
|
|
|
|
import ComposableArchitecture
|
|
|
|
|
2022-06-23 02:05:34 -07:00
|
|
|
class WalletEventsTests: XCTestCase {
|
2022-04-28 03:22:31 -07:00
|
|
|
static let testScheduler = DispatchQueue.test
|
|
|
|
|
2022-06-23 02:05:34 -07:00
|
|
|
let testEnvironment = WalletEventsFlowEnvironment(
|
2022-06-30 04:59:03 -07:00
|
|
|
pasteboard: .test,
|
2022-04-28 03:22:31 -07:00
|
|
|
scheduler: testScheduler.eraseToAnyScheduler(),
|
2022-06-28 00:38:08 -07:00
|
|
|
SDKSynchronizer: TestWrappedSDKSynchronizer(),
|
2022-06-30 04:59:03 -07:00
|
|
|
zcashSDKEnvironment: .testnet
|
2022-04-28 03:22:31 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
func testSynchronizerSubscription() throws {
|
|
|
|
let store = TestStore(
|
2022-06-23 02:05:34 -07:00
|
|
|
initialState: WalletEventsFlowState(
|
2022-04-28 03:22:31 -07:00
|
|
|
route: .latest,
|
|
|
|
isScrollable: true,
|
2022-06-23 02:05:34 -07:00
|
|
|
walletEvents: []
|
2022-04-28 03:22:31 -07:00
|
|
|
),
|
2022-06-23 02:05:34 -07:00
|
|
|
reducer: WalletEventsFlowReducer.default,
|
2022-04-28 03:22:31 -07:00
|
|
|
environment: testEnvironment
|
|
|
|
)
|
|
|
|
|
2022-07-05 04:16:42 -07:00
|
|
|
store.send(.onAppear) { state in
|
|
|
|
state.requiredTransactionConfirmations = 10
|
|
|
|
}
|
2022-04-28 03:22:31 -07:00
|
|
|
|
|
|
|
store.receive(.synchronizerStateChanged(.unknown))
|
|
|
|
|
|
|
|
// ending the subscription
|
|
|
|
store.send(.onDisappear)
|
|
|
|
}
|
|
|
|
|
|
|
|
func testSynchronizerStateChanged2Synced() throws {
|
|
|
|
let mocked: [TransactionStateMockHelper] = [
|
2022-05-31 10:14:56 -07:00
|
|
|
TransactionStateMockHelper(date: 1651039202, amount: Zatoshi(amount: 1), status: .paid(success: false), uuid: "aa11"),
|
|
|
|
TransactionStateMockHelper(date: 1651039101, amount: Zatoshi(amount: 2), uuid: "bb22"),
|
|
|
|
TransactionStateMockHelper(date: 1651039000, amount: Zatoshi(amount: 3), status: .paid(success: true), uuid: "cc33"),
|
|
|
|
TransactionStateMockHelper(date: 1651039505, amount: Zatoshi(amount: 4), uuid: "dd44"),
|
|
|
|
TransactionStateMockHelper(date: 1651039404, amount: Zatoshi(amount: 5), uuid: "ee55"),
|
|
|
|
TransactionStateMockHelper(
|
|
|
|
date: 1651039606,
|
|
|
|
amount: Zatoshi(amount: 6),
|
|
|
|
status: .paid(success: false),
|
|
|
|
uuid: "ff66"
|
|
|
|
),
|
2022-06-30 04:59:03 -07:00
|
|
|
TransactionStateMockHelper(date: 1651039303, amount: Zatoshi(amount: 7), uuid: "gg77"),
|
|
|
|
TransactionStateMockHelper(date: 1651039707, amount: Zatoshi(amount: 8), status: .paid(success: true), uuid: "hh88"),
|
|
|
|
TransactionStateMockHelper(date: 1651039808, amount: Zatoshi(amount: 9), uuid: "ii99")
|
2022-04-28 03:22:31 -07:00
|
|
|
]
|
|
|
|
|
2022-06-23 02:05:34 -07:00
|
|
|
let walletEvents: [WalletEvent] = mocked.map {
|
|
|
|
let transaction = TransactionState.placeholder(
|
2022-05-11 08:26:39 -07:00
|
|
|
amount: $0.amount,
|
2022-06-28 00:38:08 -07:00
|
|
|
fee: Zatoshi(amount: 10),
|
2022-04-28 03:22:31 -07:00
|
|
|
shielded: $0.shielded,
|
2022-06-30 04:59:03 -07:00
|
|
|
status: $0.amount.amount > 5 ? .pending : $0.status,
|
2022-06-23 02:05:34 -07:00
|
|
|
timestamp: $0.date,
|
2022-04-28 03:22:31 -07:00
|
|
|
uuid: $0.uuid
|
|
|
|
)
|
2022-06-23 02:05:34 -07:00
|
|
|
return WalletEvent(
|
|
|
|
id: transaction.id,
|
2022-06-30 04:59:03 -07:00
|
|
|
state: transaction.status == .pending ? .pending(transaction) : .send(transaction),
|
2022-06-23 02:05:34 -07:00
|
|
|
timestamp: transaction.timestamp
|
|
|
|
)
|
2022-04-28 03:22:31 -07:00
|
|
|
}
|
|
|
|
|
2022-06-28 00:38:08 -07:00
|
|
|
let identifiedWalletEvents = IdentifiedArrayOf(uniqueElements: walletEvents)
|
2022-04-28 03:22:31 -07:00
|
|
|
|
|
|
|
let store = TestStore(
|
2022-06-23 02:05:34 -07:00
|
|
|
initialState: WalletEventsFlowState(
|
2022-04-28 03:22:31 -07:00
|
|
|
route: .latest,
|
|
|
|
isScrollable: true,
|
2022-06-28 00:38:08 -07:00
|
|
|
walletEvents: identifiedWalletEvents
|
2022-04-28 03:22:31 -07:00
|
|
|
),
|
2022-06-23 02:05:34 -07:00
|
|
|
reducer: WalletEventsFlowReducer.default,
|
2022-04-28 03:22:31 -07:00
|
|
|
environment: testEnvironment
|
|
|
|
)
|
|
|
|
|
|
|
|
store.send(.synchronizerStateChanged(.synced))
|
|
|
|
|
|
|
|
Self.testScheduler.advance(by: 0.01)
|
|
|
|
|
2022-06-23 02:05:34 -07:00
|
|
|
store.receive(.updateWalletEvents(walletEvents)) { state in
|
2022-06-28 00:38:08 -07:00
|
|
|
let receivedWalletEvents = IdentifiedArrayOf(
|
2022-04-28 03:22:31 -07:00
|
|
|
uniqueElements:
|
2022-06-23 02:05:34 -07:00
|
|
|
walletEvents
|
2022-04-28 03:22:31 -07:00
|
|
|
.sorted(by: { lhs, rhs in
|
2022-06-23 02:05:34 -07:00
|
|
|
lhs.timestamp > rhs.timestamp
|
2022-04-28 03:22:31 -07:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
2022-06-28 00:38:08 -07:00
|
|
|
state.walletEvents = receivedWalletEvents
|
2022-04-28 03:22:31 -07:00
|
|
|
}
|
|
|
|
}
|
2022-06-28 00:38:08 -07:00
|
|
|
|
|
|
|
func testCopyToPasteboard() throws {
|
|
|
|
let pasteboard = WrappedPasteboard.test
|
|
|
|
|
|
|
|
let testEnvironment = WalletEventsFlowEnvironment(
|
2022-06-30 04:59:03 -07:00
|
|
|
pasteboard: pasteboard,
|
2022-06-28 00:38:08 -07:00
|
|
|
scheduler: DispatchQueue.test.eraseToAnyScheduler(),
|
|
|
|
SDKSynchronizer: TestWrappedSDKSynchronizer(),
|
2022-06-30 04:59:03 -07:00
|
|
|
zcashSDKEnvironment: .testnet
|
2022-06-28 00:38:08 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
let store = TestStore(
|
|
|
|
initialState: WalletEventsFlowState(
|
|
|
|
route: .latest,
|
|
|
|
isScrollable: true,
|
|
|
|
walletEvents: []
|
|
|
|
),
|
|
|
|
reducer: WalletEventsFlowReducer.default,
|
|
|
|
environment: testEnvironment
|
|
|
|
)
|
|
|
|
|
|
|
|
let testText = "test text"
|
|
|
|
store.send(.copyToPastboard(testText))
|
|
|
|
|
|
|
|
XCTAssertEqual(pasteboard.getString(), testText, "WalletEvetns: `testCopyToPasteboard` is expected to match the input `\(testText)`")
|
|
|
|
}
|
2022-04-28 03:22:31 -07:00
|
|
|
}
|