From 51133c8051458b9d9089aa0374be6fb20999b40d Mon Sep 17 00:00:00 2001
From: junderw <junderwood@bitcoinbank.co.jp>
Date: Fri, 5 Jul 2019 12:51:13 +0900
Subject: [PATCH] Add type instance check tests

---
 src/psbt.js    | 10 ++++++++--
 test/psbt.js   | 27 ++++++++++++++++++++++++++-
 ts_src/psbt.ts | 10 ++++++++--
 3 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/src/psbt.js b/src/psbt.js
index 272c716..ba42917 100644
--- a/src/psbt.js
+++ b/src/psbt.js
@@ -143,7 +143,10 @@ class Psbt extends bip174_1.Psbt {
       });
       return self.__TX.toBuffer();
     };
-    return super.addInput(inputData, inputAdder);
+    super.addInput(inputData, inputAdder);
+    this.__FEE_RATE = undefined;
+    this.__EXTRACTED_TX = undefined;
+    return this;
   }
   addOutput(outputData) {
     checkInputsForPartialSig(this.inputs, 'addOutput');
@@ -170,7 +173,10 @@ class Psbt extends bip174_1.Psbt {
       });
       return self.__TX.toBuffer();
     };
-    return super.addOutput(outputData, true, outputAdder);
+    super.addOutput(outputData, true, outputAdder);
+    this.__FEE_RATE = undefined;
+    this.__EXTRACTED_TX = undefined;
+    return this;
   }
   addNonWitnessUtxoToInput(inputIndex, nonWitnessUtxo) {
     super.addNonWitnessUtxoToInput(inputIndex, nonWitnessUtxo);
diff --git a/test/psbt.js b/test/psbt.js
index 67f3611..d65872c 100644
--- a/test/psbt.js
+++ b/test/psbt.js
@@ -158,7 +158,7 @@ describe(`Psbt`, () => {
             ECPair.fromWIF(f.shouldSign.WIF),
           )
         })
-    
+
         const psbtThatShouldThrow = Psbt.fromBase64(f.shouldThrow.psbt)
         assert.throws(() => {
           psbtThatShouldThrow.signInput(
@@ -224,4 +224,29 @@ describe(`Psbt`, () => {
       }, {message: 'Input index too high'})
     })
   })
+
+  describe('Method return types', () => {
+    it('fromTransaction returns Psbt type (not base class)', () => {
+      const psbt = Psbt.fromTransaction(Buffer.from([2,0,0,0,0,0,0,0,0,0]));
+      assert.strictEqual(psbt instanceof Psbt, true);
+      assert.ok(psbt.__TX);
+    })
+    it('fromBuffer returns Psbt type (not base class)', () => {
+      const psbt = Psbt.fromBuffer(Buffer.from(
+        '70736274ff01000a01000000000000000000000000', 'hex' //cHNidP8BAAoBAAAAAAAAAAAAAAAA
+      ));
+      assert.strictEqual(psbt instanceof Psbt, true);
+      assert.ok(psbt.__TX);
+    })
+    it('fromBase64 returns Psbt type (not base class)', () => {
+      const psbt = Psbt.fromBase64('cHNidP8BAAoBAAAAAAAAAAAAAAAA');
+      assert.strictEqual(psbt instanceof Psbt, true);
+      assert.ok(psbt.__TX);
+    })
+    it('fromHex returns Psbt type (not base class)', () => {
+      const psbt = Psbt.fromHex('70736274ff01000a01000000000000000000000000');
+      assert.strictEqual(psbt instanceof Psbt, true);
+      assert.ok(psbt.__TX);
+    })
+  })
 })
diff --git a/ts_src/psbt.ts b/ts_src/psbt.ts
index bd6aeb4..73ffe33 100644
--- a/ts_src/psbt.ts
+++ b/ts_src/psbt.ts
@@ -180,7 +180,10 @@ export class Psbt extends PsbtBase {
       });
       return self.__TX.toBuffer();
     };
-    return super.addInput(inputData, inputAdder);
+    super.addInput(inputData, inputAdder);
+    this.__FEE_RATE = undefined;
+    this.__EXTRACTED_TX = undefined;
+    return this;
   }
 
   addOutput(outputData: TransactionOutput): this {
@@ -211,7 +214,10 @@ export class Psbt extends PsbtBase {
       });
       return self.__TX.toBuffer();
     };
-    return super.addOutput(outputData, true, outputAdder);
+    super.addOutput(outputData, true, outputAdder);
+    this.__FEE_RATE = undefined;
+    this.__EXTRACTED_TX = undefined;
+    return this;
   }
 
   addNonWitnessUtxoToInput(