diff --git a/wallet/transaction-pool.js b/wallet/transaction-pool.js index 4e546fb..73a3c48 100644 --- a/wallet/transaction-pool.js +++ b/wallet/transaction-pool.js @@ -5,6 +5,10 @@ class TransactionPool { this.transactionMap = {}; } + clear() { + this.transactionMap = {}; + } + setTransaction(transaction) { this.transactionMap[transaction.id] = transaction; } @@ -24,6 +28,18 @@ class TransactionPool { transaction => Transaction.validTransaction(transaction) ); } + + clearBlockchainTransactions({ chain }) { + for (let i=1; i { let transactionPool, transaction, senderWallet; @@ -70,4 +71,37 @@ describe('TransactionPool', () => { expect(errorMock).toHaveBeenCalled(); }); }); + + describe('clear()', () => { + it('clears the transactions', () => { + transactionPool.clear(); + + expect(transactionPool.transactionMap).toEqual({}); + }); + }); + + describe('clearBlockchainTransactions()', () => { + it('clears the pool of any existing blockchain transactions', () => { + const blockchain = new Blockchain(); + const expectedTransactionMap = {}; + + for (let i=0; i<6; i++) { + const transaction = new Wallet().createTransaction({ + recipient: 'foo', amount: 20 + }); + + transactionPool.setTransaction(transaction); + + if (i%2===0) { + blockchain.addBlock({ data: [transaction] }); + } else { + expectedTransactionMap[transaction.id] = transaction; + } + } + + transactionPool.clearBlockchainTransactions({ chain: blockchain.chain }); + + expect(transactionPool.transactionMap).toEqual(expectedTransactionMap); + }); + }); });