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.memo = try container.decodeIfPresent(Data.self, forKey: .memo)
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 {
@ -168,7 +170,7 @@ struct PendingTransaction: PendingTransactionEntity, Decodable, Encodable {
try container.encode(self.value.amount, forKey: .value)
try container.encodeIfPresent(self.memo, forKey: .memo)
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 {

View File

@ -8,7 +8,7 @@
import Foundation
import SQLite
struct Transaction: TransactionEntity, Decodable {
struct Transaction: TransactionEntity {
enum CodingKeys: String, CodingKey {
case id = "id_tx"
case transactionId = "txid"
@ -30,6 +30,35 @@ struct Transaction: TransactionEntity, Decodable {
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 {
var toAddress: String?
var expiryHeight: BlockHeight?
@ -261,8 +290,8 @@ extension TransactionSQLDAO {
LEFT JOIN blocks
ON transactions.block = blocks.height
WHERE (\(fromTransaction.blockTimeInSeconds), \(fromTransaction.transactionIndex)) > (blocktimeinseconds, transactionIndex) AND
(sent_notes.to_address IS NULL AND received_notes.is_change != 1)
OR sent_notes.to_address IS NOT NULL
((sent_notes.to_address IS NULL AND received_notes.is_change != 1)
OR sent_notes.to_address IS NOT NULL)
ORDER BY ( minedheight IS NOT NULL ),
minedheight DESC,
blocktimeinseconds DESC,

View File

@ -15,6 +15,7 @@ class TransactionRepositoryTests: XCTestCase {
override func setUp() {
super.setUp()
transactionRepository = try! TestDbBuilder.transactionRepository()
}
@ -46,14 +47,14 @@ class TransactionRepositoryTests: XCTestCase {
}
XCTAssertEqual(transaction.id, 10)
XCTAssertEqual(transaction.minedHeight, 652812)
XCTAssertEqual(transaction.minedHeight, 663942)
XCTAssertEqual(transaction.transactionIndex, 5)
}
func testFindByTxId() {
var transaction: TransactionEntity?
let id = Data(fromHexEncodedString: "0BAFC5B83F5B39A5270144ECD98DBC65115055927EDDA8FF20F081FFF13E4780")!
let id = Data(fromHexEncodedString: "01af48bcc4e9667849a073b8b5c539a0fc19de71aac775377929dc6567a36eff")!
XCTAssertNoThrow(
try { transaction = try self.transactionRepository.findBy(rawId: id) }()
@ -64,9 +65,9 @@ class TransactionRepositoryTests: XCTestCase {
return
}
XCTAssertEqual(transaction.id, 10)
XCTAssertEqual(transaction.minedHeight, 652812)
XCTAssertEqual(transaction.transactionIndex, 5)
XCTAssertEqual(transaction.id, 8)
XCTAssertEqual(transaction.minedHeight, 663922)
XCTAssertEqual(transaction.transactionIndex, 1)
}
func testFindAllSentTransactions() {
@ -77,7 +78,7 @@ class TransactionRepositoryTests: XCTestCase {
return
}
XCTAssertEqual(txs.count, 0)
XCTAssertEqual(txs.count, 13)
}
func testFindAllReceivedTransactions() {
@ -88,7 +89,7 @@ class TransactionRepositoryTests: XCTestCase {
return
}
XCTAssertEqual(txs.count, 27)
XCTAssertEqual(txs.count, 7)
}
func testFindAllTransactions() {
@ -99,7 +100,7 @@ class TransactionRepositoryTests: XCTestCase {
return
}
XCTAssertEqual(txs.count, 27)
XCTAssertEqual(txs.count, 20)
}
func testFindAllPerformance() {
@ -134,8 +135,8 @@ class TransactionRepositoryTests: XCTestCase {
}
func testFindAllFromSlice() throws {
let limit = 1
let start = 0
let limit = 4
let start = 7
guard
let transactions = try self.transactionRepository.findAll(offset: 0, limit: Int.max),
let allFromNil = try self.transactionRepository.findAll(from: transactions[start], limit: limit)