Fix: Transaction repository tests pass

This commit is contained in:
Francisco Gindre 2022-10-21 18:19:08 -03:00
parent 1979e410b5
commit 2fb25dcd35
3 changed files with 48 additions and 16 deletions

View File

@ -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 {

View File

@ -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,

View File

@ -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)