Fix: Transaction repository tests pass
This commit is contained in:
parent
1979e410b5
commit
2fb25dcd35
|
@ -137,7 +137,9 @@ struct PendingTransaction: PendingTransactionEntity, Decodable, Encodable {
|
||||||
self.value = Zatoshi(zatoshiValue)
|
self.value = Zatoshi(zatoshiValue)
|
||||||
self.memo = try container.decodeIfPresent(Data.self, forKey: .memo)
|
self.memo = try container.decodeIfPresent(Data.self, forKey: .memo)
|
||||||
self.rawTransactionId = try container.decodeIfPresent(Data.self, forKey: .rawTransactionId)
|
self.rawTransactionId = try container.decodeIfPresent(Data.self, forKey: .rawTransactionId)
|
||||||
self.fee = try container.decodeIfPresent(Zatoshi.self, forKey: .fee)
|
if let feeValue = try container.decodeIfPresent(Int64.self, forKey: .fee) {
|
||||||
|
self.fee = Zatoshi(feeValue)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func encode(to encoder: Encoder) throws {
|
func encode(to encoder: Encoder) throws {
|
||||||
|
@ -168,7 +170,7 @@ struct PendingTransaction: PendingTransactionEntity, Decodable, Encodable {
|
||||||
try container.encode(self.value.amount, forKey: .value)
|
try container.encode(self.value.amount, forKey: .value)
|
||||||
try container.encodeIfPresent(self.memo, forKey: .memo)
|
try container.encodeIfPresent(self.memo, forKey: .memo)
|
||||||
try container.encodeIfPresent(self.rawTransactionId, forKey: .rawTransactionId)
|
try container.encodeIfPresent(self.rawTransactionId, forKey: .rawTransactionId)
|
||||||
try container.encodeIfPresent(self.fee, forKey: .fee)
|
try container.encodeIfPresent(self.fee?.amount, forKey: .fee)
|
||||||
}
|
}
|
||||||
|
|
||||||
func isSameTransactionId<T>(other: T) -> Bool where T: RawIdentifiable {
|
func isSameTransactionId<T>(other: T) -> Bool where T: RawIdentifiable {
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
import SQLite
|
import SQLite
|
||||||
|
|
||||||
struct Transaction: TransactionEntity, Decodable {
|
struct Transaction: TransactionEntity {
|
||||||
enum CodingKeys: String, CodingKey {
|
enum CodingKeys: String, CodingKey {
|
||||||
case id = "id_tx"
|
case id = "id_tx"
|
||||||
case transactionId = "txid"
|
case transactionId = "txid"
|
||||||
|
@ -30,6 +30,35 @@ struct Transaction: TransactionEntity, Decodable {
|
||||||
var fee: Zatoshi?
|
var fee: Zatoshi?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension Transaction: Codable {
|
||||||
|
init(from decoder: Decoder) throws {
|
||||||
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
self.id = try container.decodeIfPresent(Int.self, forKey: .id)
|
||||||
|
self.transactionId = try container.decode(Data.self, forKey: .transactionId)
|
||||||
|
self.created = try container.decodeIfPresent(String.self, forKey: .created)
|
||||||
|
self.transactionIndex = try container.decodeIfPresent(Int.self, forKey: .transactionIndex)
|
||||||
|
self.expiryHeight = try container.decodeIfPresent(BlockHeight.self, forKey: .expiryHeight)
|
||||||
|
self.minedHeight = try container.decodeIfPresent(BlockHeight.self, forKey: .minedHeight)
|
||||||
|
self.raw = try container.decodeIfPresent(Data.self, forKey: .raw)
|
||||||
|
|
||||||
|
if let fee = try container.decodeIfPresent(Int64.self, forKey: .fee) {
|
||||||
|
self.fee = Zatoshi(fee)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func encode(to encoder: Encoder) throws {
|
||||||
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||||
|
try container.encodeIfPresent(self.id, forKey: .id)
|
||||||
|
try container.encode(self.transactionId, forKey: .transactionId)
|
||||||
|
try container.encodeIfPresent(self.created, forKey: .created)
|
||||||
|
try container.encodeIfPresent(self.transactionIndex, forKey: .transactionIndex)
|
||||||
|
try container.encodeIfPresent(self.expiryHeight, forKey: .expiryHeight)
|
||||||
|
try container.encodeIfPresent(self.minedHeight, forKey: .minedHeight)
|
||||||
|
try container.encodeIfPresent(self.raw, forKey: .raw)
|
||||||
|
try container.encodeIfPresent(self.fee?.amount, forKey: .fee)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct ConfirmedTransaction: ConfirmedTransactionEntity {
|
struct ConfirmedTransaction: ConfirmedTransactionEntity {
|
||||||
var toAddress: String?
|
var toAddress: String?
|
||||||
var expiryHeight: BlockHeight?
|
var expiryHeight: BlockHeight?
|
||||||
|
@ -261,8 +290,8 @@ extension TransactionSQLDAO {
|
||||||
LEFT JOIN blocks
|
LEFT JOIN blocks
|
||||||
ON transactions.block = blocks.height
|
ON transactions.block = blocks.height
|
||||||
WHERE (\(fromTransaction.blockTimeInSeconds), \(fromTransaction.transactionIndex)) > (blocktimeinseconds, transactionIndex) AND
|
WHERE (\(fromTransaction.blockTimeInSeconds), \(fromTransaction.transactionIndex)) > (blocktimeinseconds, transactionIndex) AND
|
||||||
(sent_notes.to_address IS NULL AND received_notes.is_change != 1)
|
((sent_notes.to_address IS NULL AND received_notes.is_change != 1)
|
||||||
OR sent_notes.to_address IS NOT NULL
|
OR sent_notes.to_address IS NOT NULL)
|
||||||
ORDER BY ( minedheight IS NOT NULL ),
|
ORDER BY ( minedheight IS NOT NULL ),
|
||||||
minedheight DESC,
|
minedheight DESC,
|
||||||
blocktimeinseconds DESC,
|
blocktimeinseconds DESC,
|
||||||
|
|
|
@ -15,6 +15,7 @@ class TransactionRepositoryTests: XCTestCase {
|
||||||
|
|
||||||
override func setUp() {
|
override func setUp() {
|
||||||
super.setUp()
|
super.setUp()
|
||||||
|
|
||||||
transactionRepository = try! TestDbBuilder.transactionRepository()
|
transactionRepository = try! TestDbBuilder.transactionRepository()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,14 +47,14 @@ class TransactionRepositoryTests: XCTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
XCTAssertEqual(transaction.id, 10)
|
XCTAssertEqual(transaction.id, 10)
|
||||||
XCTAssertEqual(transaction.minedHeight, 652812)
|
XCTAssertEqual(transaction.minedHeight, 663942)
|
||||||
XCTAssertEqual(transaction.transactionIndex, 5)
|
XCTAssertEqual(transaction.transactionIndex, 5)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testFindByTxId() {
|
func testFindByTxId() {
|
||||||
var transaction: TransactionEntity?
|
var transaction: TransactionEntity?
|
||||||
|
|
||||||
let id = Data(fromHexEncodedString: "0BAFC5B83F5B39A5270144ECD98DBC65115055927EDDA8FF20F081FFF13E4780")!
|
let id = Data(fromHexEncodedString: "01af48bcc4e9667849a073b8b5c539a0fc19de71aac775377929dc6567a36eff")!
|
||||||
|
|
||||||
XCTAssertNoThrow(
|
XCTAssertNoThrow(
|
||||||
try { transaction = try self.transactionRepository.findBy(rawId: id) }()
|
try { transaction = try self.transactionRepository.findBy(rawId: id) }()
|
||||||
|
@ -64,9 +65,9 @@ class TransactionRepositoryTests: XCTestCase {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
XCTAssertEqual(transaction.id, 10)
|
XCTAssertEqual(transaction.id, 8)
|
||||||
XCTAssertEqual(transaction.minedHeight, 652812)
|
XCTAssertEqual(transaction.minedHeight, 663922)
|
||||||
XCTAssertEqual(transaction.transactionIndex, 5)
|
XCTAssertEqual(transaction.transactionIndex, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testFindAllSentTransactions() {
|
func testFindAllSentTransactions() {
|
||||||
|
@ -77,7 +78,7 @@ class TransactionRepositoryTests: XCTestCase {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
XCTAssertEqual(txs.count, 0)
|
XCTAssertEqual(txs.count, 13)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testFindAllReceivedTransactions() {
|
func testFindAllReceivedTransactions() {
|
||||||
|
@ -88,7 +89,7 @@ class TransactionRepositoryTests: XCTestCase {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
XCTAssertEqual(txs.count, 27)
|
XCTAssertEqual(txs.count, 7)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testFindAllTransactions() {
|
func testFindAllTransactions() {
|
||||||
|
@ -99,7 +100,7 @@ class TransactionRepositoryTests: XCTestCase {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
XCTAssertEqual(txs.count, 27)
|
XCTAssertEqual(txs.count, 20)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testFindAllPerformance() {
|
func testFindAllPerformance() {
|
||||||
|
@ -134,8 +135,8 @@ class TransactionRepositoryTests: XCTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testFindAllFromSlice() throws {
|
func testFindAllFromSlice() throws {
|
||||||
let limit = 1
|
let limit = 4
|
||||||
let start = 0
|
let start = 7
|
||||||
guard
|
guard
|
||||||
let transactions = try self.transactionRepository.findAll(offset: 0, limit: Int.max),
|
let transactions = try self.transactionRepository.findAll(offset: 0, limit: Int.max),
|
||||||
let allFromNil = try self.transactionRepository.findAll(from: transactions[start], limit: limit)
|
let allFromNil = try self.transactionRepository.findAll(from: transactions[start], limit: limit)
|
||||||
|
|
Loading…
Reference in New Issue