ZcashLightClientKit/ZcashLightClientKitTests/TransactionRepositoryTests....

143 lines
4.6 KiB
Swift
Raw Normal View History

//
// TransactionRepositoryTests.swift
// ZcashLightClientKit-Unit-Tests
//
// Created by Francisco Gindre on 11/16/19.
//
import XCTest
@testable import ZcashLightClientKit
class TransactionRepositoryTests: XCTestCase {
var transactionRepository: TransactionRepository!
override func setUp() {
transactionRepository = TestDbBuilder.transactionRepository()
}
override func tearDown() {
transactionRepository = nil
}
func testCount() {
var count: Int?
XCTAssertNoThrow(try { count = try self.transactionRepository.countAll()}())
XCTAssertNotNil(count)
XCTAssertEqual(count, 27)
}
func testCountUnmined() {
var count: Int?
XCTAssertNoThrow(try { count = try self.transactionRepository.countUnmined()}())
XCTAssertNotNil(count)
XCTAssertEqual(count, 0)
}
func testFindById() {
var tx: TransactionEntity?
XCTAssertNoThrow(try { tx = try self.transactionRepository.findBy(id: 10)}())
guard let transaction = tx else {
XCTFail("transaction is nil")
return
}
XCTAssertEqual(transaction.id, 10)
XCTAssertEqual(transaction.minedHeight, 652812)
XCTAssertEqual(transaction.transactionIndex, 5)
}
func testFindByTxId() {
var tx: TransactionEntity?
let id = "0BAFC5B83F5B39A5270144ECD98DBC65115055927EDDA8FF20F081FFF13E4780".hexDecodedData()
XCTAssertNoThrow(try { tx = try self.transactionRepository.findBy(rawId: id)}())
guard let transaction = tx else {
XCTFail("transaction is nil")
return
}
XCTAssertEqual(transaction.id, 10)
XCTAssertEqual(transaction.minedHeight, 652812)
XCTAssertEqual(transaction.transactionIndex, 5)
}
func testFindAllSentTransactions() {
var transactions: [ConfirmedTransactionEntity]?
XCTAssertNoThrow(try { transactions = try self.transactionRepository.findAllSentTransactions(limit: Int.max) }())
guard let txs = transactions else {
XCTFail("find all sent transactions returned no transactions")
return
}
XCTAssertEqual(txs.count, 0)
}
func testFindAllReceivedTransactions() {
var transactions: [ConfirmedTransactionEntity]?
XCTAssertNoThrow(try { transactions = try self.transactionRepository.findAllReceivedTransactions(limit: Int.max) }())
guard let txs = transactions else {
XCTFail("find all received transactions returned no transactions")
return
}
XCTAssertEqual(txs.count, 27)
}
func testFindAllTransactions() {
var transactions: [ConfirmedTransactionEntity]?
XCTAssertNoThrow(try { transactions = try self.transactionRepository.findAll(limit: Int.max) }())
guard let txs = transactions else {
XCTFail("find all transactions returned no transactions")
return
}
XCTAssertEqual(txs.count, 27)
}
func testFindAllPerformance() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
do {
_ = try self.transactionRepository.findAll(limit: Int.max)
} catch {
XCTFail("find all failed")
}
}
}
}
extension String {
/// A data representation of the hexadecimal bytes in this string.
func hexDecodedData() -> Data {
// Get the UTF8 characters of this string
let chars = Array(utf8)
// Keep the bytes in an UInt8 array and later convert it to Data
var bytes = [UInt8]()
bytes.reserveCapacity(count / 2)
// It is a lot faster to use a lookup map instead of strtoul
let map: [UInt8] = [
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 01234567
0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 89:;<=>?
0x00, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, // @ABCDEFG
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // HIJKLMNO
]
// Grab two characters at a time, map them and turn it into a byte
for i in stride(from: 0, to: count, by: 2) {
let index1 = Int(chars[i] & 0x1F ^ 0x10)
let index2 = Int(chars[i + 1] & 0x1F ^ 0x10)
bytes.append(map[index1] << 4 | map[index2])
}
return Data(bytes)
}
}