From 17c57ba81b2ba57babf0eae00ac2fd1d4912321c Mon Sep 17 00:00:00 2001 From: David Katz <15Dkatz@shcp.edu> Date: Wed, 28 Sep 2022 12:32:53 -0700 Subject: [PATCH] Grab Valid Transactions --- wallet/transaction-pool.js | 8 +++++++ wallet/transaction-pool.test.js | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/wallet/transaction-pool.js b/wallet/transaction-pool.js index 7ee3def..4e546fb 100644 --- a/wallet/transaction-pool.js +++ b/wallet/transaction-pool.js @@ -1,3 +1,5 @@ +const Transaction = require('./transaction'); + class TransactionPool { constructor() { this.transactionMap = {}; @@ -16,6 +18,12 @@ class TransactionPool { return transactions.find(transaction => transaction.input.address === inputAddress); } + + validTransactions() { + return Object.values(this.transactionMap).filter( + transaction => Transaction.validTransaction(transaction) + ); + } } module.exports = TransactionPool; diff --git a/wallet/transaction-pool.test.js b/wallet/transaction-pool.test.js index b0c83b1..e8a9ce0 100644 --- a/wallet/transaction-pool.test.js +++ b/wallet/transaction-pool.test.js @@ -33,4 +33,41 @@ describe('TransactionPool', () => { ).toBe(transaction); }); }); + + describe('validTransactions()', () => { + let validTransactions, errorMock; + + beforeEach(() => { + validTransactions = []; + errorMock = jest.fn(); + global.console.error = errorMock; + + for (let i=0; i<10; i++) { + transaction = new Transaction({ + senderWallet, + recipient: 'any-recipient', + amount: 30 + }); + + if (i%3===0) { + transaction.input.amount = 999999; + } else if (i%3===1) { + transaction.input.signature = new Wallet().sign('foo'); + } else { + validTransactions.push(transaction); + } + + transactionPool.setTransaction(transaction); + } + }); + + it('returns valid transactions', () => { + expect(transactionPool.validTransactions()).toEqual(validTransactions); + }); + + it('logs errors for the invalid transactions', () => { + transactionPool.validTransactions(); + expect(errorMock).toHaveBeenCalled(); + }); + }); });