From bde728b6929857becfdbfd3a088dfc831714a90c Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Wed, 18 Dec 2019 11:56:34 +0000 Subject: [PATCH 1/4] Fixed #390 Spread operator does not assign super class methods --- .../transaction/AccountAddressRestrictionTransaction.ts | 4 ++-- .../transaction/AccountMosaicRestrictionTransaction.ts | 4 ++-- src/model/transaction/LockFundsTransaction.ts | 4 ++-- .../transaction/MosaicAddressRestrictionTransaction.ts | 4 ++-- .../transaction/MosaicGlobalRestrictionTransaction.ts | 4 ++-- src/model/transaction/MosaicMetadataTransaction.ts | 4 ++-- src/model/transaction/MosaicSupplyChangeTransaction.ts | 4 ++-- src/model/transaction/SecretLockTransaction.ts | 4 ++-- src/model/transaction/SecretProofTransaction.ts | 4 ++-- src/model/transaction/Transaction.ts | 2 +- src/model/transaction/TransferTransaction.ts | 7 ++++--- test/model/transaction/AccountLinkTransaction.spec.ts | 3 +++ test/model/transaction/AccountMetadataTransaction.spec.ts | 3 +++ test/model/transaction/AggregateTransaction.spec.ts | 6 ++++++ test/model/transaction/LockFundsTransaction.spec.ts | 6 ++++++ .../MosaicAddressRestrictionTransaction.spec.ts | 6 ++++++ test/model/transaction/MosaicAliasTransaction.spec.ts | 3 +++ test/model/transaction/MosaicDefinitionTransaction.spec.ts | 3 +++ .../transaction/MosaicGlobalRestrictionTransaction.spec.ts | 6 ++++++ test/model/transaction/MosaicMetadataTransaction.spec.ts | 6 ++++++ .../transaction/MosaicSupplyChangeTransaction.spec.ts | 5 +++++ .../MultisigAccountModificationTransaction.spec.ts | 3 +++ .../model/transaction/NamespaceMetadataTransaction.spec.ts | 3 +++ .../transaction/NamespaceRegistrationTransaction.spec.ts | 3 +++ test/model/transaction/SecretLockTransaction.spec.ts | 5 +++++ test/model/transaction/SecretProofTransaction.spec.ts | 5 +++++ test/model/transaction/TransferTransaction.spec.ts | 6 ++++++ 27 files changed, 95 insertions(+), 22 deletions(-) diff --git a/src/model/transaction/AccountAddressRestrictionTransaction.ts b/src/model/transaction/AccountAddressRestrictionTransaction.ts index 66f2b2fafd..5aff4bee0e 100644 --- a/src/model/transaction/AccountAddressRestrictionTransaction.ts +++ b/src/model/transaction/AccountAddressRestrictionTransaction.ts @@ -199,13 +199,13 @@ export class AccountAddressRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): AccountAddressRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { restrictionAdditions: this.restrictionAdditions.map((addition) => statement.resolveAddress(addition, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), restrictionDeletions: this.restrictionDeletions.map((deletion) => statement.resolveAddress(deletion, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), - }; + }); } } diff --git a/src/model/transaction/AccountMosaicRestrictionTransaction.ts b/src/model/transaction/AccountMosaicRestrictionTransaction.ts index c739b574b8..b6428e83c7 100644 --- a/src/model/transaction/AccountMosaicRestrictionTransaction.ts +++ b/src/model/transaction/AccountMosaicRestrictionTransaction.ts @@ -199,13 +199,13 @@ export class AccountMosaicRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): AccountMosaicRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { restrictionAdditions: this.restrictionAdditions.map((addition) => statement.resolveMosaicId(addition, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), restrictionDeletions: this.restrictionDeletions.map((deletion) => statement.resolveMosaicId(deletion, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), - }; + }); } } diff --git a/src/model/transaction/LockFundsTransaction.ts b/src/model/transaction/LockFundsTransaction.ts index 3bab2f98aa..c4154e9fda 100644 --- a/src/model/transaction/LockFundsTransaction.ts +++ b/src/model/transaction/LockFundsTransaction.ts @@ -212,8 +212,8 @@ export class LockFundsTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): LockFundsTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { mosaic: statement.resolveMosaic(this.mosaic, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/MosaicAddressRestrictionTransaction.ts b/src/model/transaction/MosaicAddressRestrictionTransaction.ts index 7323856186..44b9ce1682 100644 --- a/src/model/transaction/MosaicAddressRestrictionTransaction.ts +++ b/src/model/transaction/MosaicAddressRestrictionTransaction.ts @@ -243,10 +243,10 @@ export class MosaicAddressRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicAddressRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), targetAddress: statement.resolveAddress(this.targetAddress, - transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/MosaicGlobalRestrictionTransaction.ts b/src/model/transaction/MosaicGlobalRestrictionTransaction.ts index 35ff2de88e..a172d6da29 100644 --- a/src/model/transaction/MosaicGlobalRestrictionTransaction.ts +++ b/src/model/transaction/MosaicGlobalRestrictionTransaction.ts @@ -253,10 +253,10 @@ export class MosaicGlobalRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicGlobalRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), referenceMosaicId: statement.resolveMosaicId(this.referenceMosaicId, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/MosaicMetadataTransaction.ts b/src/model/transaction/MosaicMetadataTransaction.ts index ce5b5135cf..b161f8766d 100644 --- a/src/model/transaction/MosaicMetadataTransaction.ts +++ b/src/model/transaction/MosaicMetadataTransaction.ts @@ -219,8 +219,8 @@ export class MosaicMetadataTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicMetadataTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { targetMosaicId: statement.resolveMosaicId(this.targetMosaicId, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/MosaicSupplyChangeTransaction.ts b/src/model/transaction/MosaicSupplyChangeTransaction.ts index 3e6b2685cb..69eae71d37 100644 --- a/src/model/transaction/MosaicSupplyChangeTransaction.ts +++ b/src/model/transaction/MosaicSupplyChangeTransaction.ts @@ -193,8 +193,8 @@ export class MosaicSupplyChangeTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicSupplyChangeTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/SecretLockTransaction.ts b/src/model/transaction/SecretLockTransaction.ts index 3606ede7e7..6dc523b95e 100644 --- a/src/model/transaction/SecretLockTransaction.ts +++ b/src/model/transaction/SecretLockTransaction.ts @@ -240,10 +240,10 @@ export class SecretLockTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): SecretLockTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), mosaic: statement.resolveMosaic(this.mosaic, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/SecretProofTransaction.ts b/src/model/transaction/SecretProofTransaction.ts index 2c3a9de798..9ecca5ae92 100644 --- a/src/model/transaction/SecretProofTransaction.ts +++ b/src/model/transaction/SecretProofTransaction.ts @@ -223,8 +223,8 @@ export class SecretProofTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): SecretProofTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { recipientAddress: statement.resolveAddress(this.recipientAddress, - transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/Transaction.ts b/src/model/transaction/Transaction.ts index f42edc8415..8e7010c4d1 100644 --- a/src/model/transaction/Transaction.ts +++ b/src/model/transaction/Transaction.ts @@ -200,7 +200,7 @@ export abstract class Transaction { * @returns {TransferTransaction} */ public setMaxFee(feeMultiplier: number): Transaction { - return {...Object.getPrototypeOf(this), maxFee: UInt64.fromUint(this.size * feeMultiplier)}; + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {maxFee: UInt64.fromUint(this.size * feeMultiplier)}); } /** diff --git a/src/model/transaction/TransferTransaction.ts b/src/model/transaction/TransferTransaction.ts index d858927b9e..923a5b4b04 100644 --- a/src/model/transaction/TransferTransaction.ts +++ b/src/model/transaction/TransferTransaction.ts @@ -282,9 +282,10 @@ export class TransferTransaction extends Transaction { */ public resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): TransferTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), recipientAddress: statement.resolveAddress(this.recipientAddress, - transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, + {recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex), mosaics: this.mosaics.map((mosaic) => statement.resolveMosaic(mosaic, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex))}; + transactionInfo.index, aggregateTransactionIndex))}); } } diff --git a/test/model/transaction/AccountLinkTransaction.spec.ts b/test/model/transaction/AccountLinkTransaction.spec.ts index aed6cb72c6..f197c25f37 100644 --- a/test/model/transaction/AccountLinkTransaction.spec.ts +++ b/test/model/transaction/AccountLinkTransaction.spec.ts @@ -116,5 +116,8 @@ describe('AccountLinkTransaction', () => { ).setMaxFee(2); ​ expect(accountLinkTransaction.maxFee.compact()).to.be.equal(322); + + const signedTransaction = accountLinkTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/AccountMetadataTransaction.spec.ts b/test/model/transaction/AccountMetadataTransaction.spec.ts index ecf15db7be..0ceecdffff 100644 --- a/test/model/transaction/AccountMetadataTransaction.spec.ts +++ b/test/model/transaction/AccountMetadataTransaction.spec.ts @@ -103,6 +103,9 @@ describe('AccountMetadataTransaction', () => { expect(Convert.hexToUint8(accountMetadataTransaction.serialize()).length).to.be.equal(accountMetadataTransaction.size); expect(accountMetadataTransaction.size).to.be.equal(182); + + const signedTransaction = accountMetadataTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); }); diff --git a/test/model/transaction/AggregateTransaction.spec.ts b/test/model/transaction/AggregateTransaction.spec.ts index 5ae0e31825..d7eb524dec 100644 --- a/test/model/transaction/AggregateTransaction.spec.ts +++ b/test/model/transaction/AggregateTransaction.spec.ts @@ -582,6 +582,9 @@ describe('AggregateTransaction', () => { ).setMaxFee(2); ​ expect(aggregateTransaction.maxFee.compact()).to.be.equal(560); + + const signedTransaction = aggregateTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -614,5 +617,8 @@ describe('AggregateTransaction', () => { expect(innerTransaction.mosaics[0].id instanceof MosaicId).to.be.true; expect((innerTransaction.recipientAddress as Address).equals(account.address)).to.be.true; expect((innerTransaction.mosaics[0].id as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = aggregateTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/LockFundsTransaction.spec.ts b/test/model/transaction/LockFundsTransaction.spec.ts index ddcf970822..b5016e198d 100644 --- a/test/model/transaction/LockFundsTransaction.spec.ts +++ b/test/model/transaction/LockFundsTransaction.spec.ts @@ -181,6 +181,9 @@ describe('LockFundsTransaction', () => { ).setMaxFee(2); ​ expect(lockFundsTransaction.maxFee.compact()).to.be.equal(368); + + const signedTransactionTest = lockFundsTransaction.signWith(account, generationHash); + expect(signedTransactionTest.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -205,5 +208,8 @@ describe('LockFundsTransaction', () => { ​ expect(transaction.mosaic.id instanceof MosaicId).to.be.true; expect((transaction.mosaic.id as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransactionTest = transaction.signWith(account, generationHash); + expect(signedTransactionTest.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicAddressRestrictionTransaction.spec.ts b/test/model/transaction/MosaicAddressRestrictionTransaction.spec.ts index 3783e40f9e..53bbbe7a96 100644 --- a/test/model/transaction/MosaicAddressRestrictionTransaction.spec.ts +++ b/test/model/transaction/MosaicAddressRestrictionTransaction.spec.ts @@ -164,6 +164,9 @@ describe('MosaicAddressRestrictionTransaction', () => { ).setMaxFee(2); ​ expect(transaction.maxFee.compact()).to.be.equal(370); + + const signedTransaction = transaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -185,5 +188,8 @@ describe('MosaicAddressRestrictionTransaction', () => { expect(transaction.mosaicId instanceof MosaicId).to.be.true; expect((transaction.targetAddress as Address).equals(account.address)).to.be.true; expect((transaction.mosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = transaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicAliasTransaction.spec.ts b/test/model/transaction/MosaicAliasTransaction.spec.ts index a9c9f698a3..3e9f775b44 100644 --- a/test/model/transaction/MosaicAliasTransaction.spec.ts +++ b/test/model/transaction/MosaicAliasTransaction.spec.ts @@ -118,5 +118,8 @@ describe('MosaicAliasTransaction', () => { ).setMaxFee(2); ​ expect(mosaicAliasTransaction.maxFee.compact()).to.be.equal(290); + + const signedTransaction = mosaicAliasTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicDefinitionTransaction.spec.ts b/test/model/transaction/MosaicDefinitionTransaction.spec.ts index 0de595a09a..9be5cb72b5 100644 --- a/test/model/transaction/MosaicDefinitionTransaction.spec.ts +++ b/test/model/transaction/MosaicDefinitionTransaction.spec.ts @@ -172,5 +172,8 @@ describe('MosaicDefinitionTransaction', () => { ).setMaxFee(2); ​ expect(mosaicDefinitionTransaction.maxFee.compact()).to.be.equal(300); + + const signedTransaction = mosaicDefinitionTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicGlobalRestrictionTransaction.spec.ts b/test/model/transaction/MosaicGlobalRestrictionTransaction.spec.ts index a4b387dcd5..846f631733 100644 --- a/test/model/transaction/MosaicGlobalRestrictionTransaction.spec.ts +++ b/test/model/transaction/MosaicGlobalRestrictionTransaction.spec.ts @@ -162,6 +162,9 @@ describe('MosaicGlobalRestrictionTransaction', () => { ).setMaxFee(2); ​ expect(mosaicGlobalRestrictionTransaction.maxFee.compact()).to.be.equal(340); + + const signedTransaction = mosaicGlobalRestrictionTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -185,5 +188,8 @@ describe('MosaicGlobalRestrictionTransaction', () => { expect((mosaicGlobalRestrictionTransaction.mosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; expect(mosaicGlobalRestrictionTransaction.referenceMosaicId instanceof MosaicId).to.be.true; expect((mosaicGlobalRestrictionTransaction.referenceMosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = mosaicGlobalRestrictionTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicMetadataTransaction.spec.ts b/test/model/transaction/MosaicMetadataTransaction.spec.ts index bea46583b2..c55ad3efed 100644 --- a/test/model/transaction/MosaicMetadataTransaction.spec.ts +++ b/test/model/transaction/MosaicMetadataTransaction.spec.ts @@ -161,6 +161,9 @@ describe('MosaicMetadataTransaction', () => { ).setMaxFee(2); ​ expect(mosaicMetadataTransaction.maxFee.compact()).to.be.equal(380); + + const signedTransaction = mosaicMetadataTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -180,5 +183,8 @@ describe('MosaicMetadataTransaction', () => { ​ expect(mosaicMetadataTransaction.targetMosaicId instanceof MosaicId).to.be.true; expect((mosaicMetadataTransaction.targetMosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = mosaicMetadataTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicSupplyChangeTransaction.spec.ts b/test/model/transaction/MosaicSupplyChangeTransaction.spec.ts index 805a1f592c..77f2fdaa90 100644 --- a/test/model/transaction/MosaicSupplyChangeTransaction.spec.ts +++ b/test/model/transaction/MosaicSupplyChangeTransaction.spec.ts @@ -127,6 +127,8 @@ describe('MosaicSupplyChangeTransaction', () => { ).setMaxFee(2); ​ expect(mosaicSupplyChangeTransaction.maxFee.compact()).to.be.equal(290); + const signedTransaction = mosaicSupplyChangeTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -144,5 +146,8 @@ describe('MosaicSupplyChangeTransaction', () => { ​ expect(mosaicSupplyChangeTransaction.mosaicId instanceof MosaicId).to.be.true; expect((mosaicSupplyChangeTransaction.mosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = mosaicSupplyChangeTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MultisigAccountModificationTransaction.spec.ts b/test/model/transaction/MultisigAccountModificationTransaction.spec.ts index 1b1f4e3707..ff5a2ae193 100644 --- a/test/model/transaction/MultisigAccountModificationTransaction.spec.ts +++ b/test/model/transaction/MultisigAccountModificationTransaction.spec.ts @@ -134,5 +134,8 @@ describe('MultisigAccountModificationTransaction', () => { ).setMaxFee(2); ​ expect(modifyMultisigAccountTransaction.maxFee.compact()).to.be.equal(336); + + const signedTransaction = modifyMultisigAccountTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/NamespaceMetadataTransaction.spec.ts b/test/model/transaction/NamespaceMetadataTransaction.spec.ts index cd881f49b3..27688408c5 100644 --- a/test/model/transaction/NamespaceMetadataTransaction.spec.ts +++ b/test/model/transaction/NamespaceMetadataTransaction.spec.ts @@ -124,5 +124,8 @@ describe('NamespaceMetadataTransaction', () => { ).setMaxFee(2); ​ expect(namespaceMetadataTransaction.maxFee.compact()).to.be.equal(380); + + const signedTransaction = namespaceMetadataTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/NamespaceRegistrationTransaction.spec.ts b/test/model/transaction/NamespaceRegistrationTransaction.spec.ts index c24ebfe45b..921a3bd457 100644 --- a/test/model/transaction/NamespaceRegistrationTransaction.spec.ts +++ b/test/model/transaction/NamespaceRegistrationTransaction.spec.ts @@ -131,5 +131,8 @@ describe('NamespaceRegistrationTransaction', () => { ).setMaxFee(2); ​ expect(registerNamespaceTransaction.maxFee.compact()).to.be.equal(330); + + const signedTransaction = registerNamespaceTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/SecretLockTransaction.spec.ts b/test/model/transaction/SecretLockTransaction.spec.ts index 9cb2c2c33c..612b1ef7b8 100644 --- a/test/model/transaction/SecretLockTransaction.spec.ts +++ b/test/model/transaction/SecretLockTransaction.spec.ts @@ -300,6 +300,8 @@ describe('SecretLockTransaction', () => { ).setMaxFee(2); ​ expect(secretLockTransaction.maxFee.compact()).to.be.equal(420); + const signedTransaction = secretLockTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -322,5 +324,8 @@ describe('SecretLockTransaction', () => { expect(secretLockTransaction.mosaic.id instanceof MosaicId).to.be.true; expect((secretLockTransaction.recipientAddress as Address).equals(account.address)).to.be.true; expect((secretLockTransaction.mosaic.id as MosaicId).equals(mosaicId)).to.be.true; + + const signedTransaction = secretLockTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/SecretProofTransaction.spec.ts b/test/model/transaction/SecretProofTransaction.spec.ts index 7092f966e7..f6c2eece9e 100644 --- a/test/model/transaction/SecretProofTransaction.spec.ts +++ b/test/model/transaction/SecretProofTransaction.spec.ts @@ -257,6 +257,8 @@ describe('SecretProofTransaction', () => { ).setMaxFee(2); ​ expect(secretProofTransaction.maxFee.compact()).to.be.equal(440); + const signedTransaction = secretProofTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -276,5 +278,8 @@ describe('SecretProofTransaction', () => { ​ expect(transferTransaction.recipientAddress instanceof Address).to.be.true; expect((transferTransaction.recipientAddress as Address).equals(account.address)).to.be.true; + + const signedTransaction = transferTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/TransferTransaction.spec.ts b/test/model/transaction/TransferTransaction.spec.ts index 6626d55eaf..83e3d09d9b 100644 --- a/test/model/transaction/TransferTransaction.spec.ts +++ b/test/model/transaction/TransferTransaction.spec.ts @@ -407,6 +407,9 @@ describe('TransferTransaction', () => { ).setMaxFee(2); ​ expect(transferTransaction.maxFee.compact()).to.be.equal(378); + + const signedTransaction = transferTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -426,5 +429,8 @@ describe('TransferTransaction', () => { expect(transferTransaction.mosaics[0].id instanceof MosaicId).to.be.true; expect((transferTransaction.recipientAddress as Address).equals(account.address)).to.be.true; expect((transferTransaction.mosaics[0].id as MosaicId).equals(mosaicId)).to.be.true; + + const signedTransaction = transferTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); From 6d8c4213c116a5116a94303aa28b227b79d0caaa Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Sun, 22 Dec 2019 15:17:27 +0000 Subject: [PATCH 2/4] Moved object assgin to a static method in MappingDto --- src/core/utils/DtoMapping.ts | 11 ++++ .../AccountAddressRestrictionTransaction.ts | 17 +++--- .../AccountMosaicRestrictionTransaction.ts | 3 +- src/model/transaction/AggregateTransaction.ts | 9 +-- src/model/transaction/LockFundsTransaction.ts | 3 +- .../MosaicAddressRestrictionTransaction.ts | 3 +- .../MosaicGlobalRestrictionTransaction.ts | 3 +- .../transaction/MosaicMetadataTransaction.ts | 3 +- .../MosaicSupplyChangeTransaction.ts | 3 +- .../transaction/SecretLockTransaction.ts | 3 +- .../transaction/SecretProofTransaction.ts | 3 +- src/model/transaction/Transaction.ts | 7 ++- src/model/transaction/TransferTransaction.ts | 10 ++-- test/infrastructure/RepositoryFactory.spec.ts | 55 +++++++++---------- 14 files changed, 77 insertions(+), 56 deletions(-) diff --git a/src/core/utils/DtoMapping.ts b/src/core/utils/DtoMapping.ts index 576cd49d63..6c62abc026 100644 --- a/src/core/utils/DtoMapping.ts +++ b/src/core/utils/DtoMapping.ts @@ -54,4 +54,15 @@ export class DtoMapping { } }))); } + + /** + * Creates a copy of the first object adding the attributes of the second object. + * @param object the object to be cloned + * @param attributes the extra attributes to be added to the object. + * @returns a copy of the first object with the new attributes added. + */ + public static assign(object: T, attributes: any): T { + return Object.assign({__proto__: Object.getPrototypeOf(object)}, object, attributes); + } + } diff --git a/src/model/transaction/AccountAddressRestrictionTransaction.ts b/src/model/transaction/AccountAddressRestrictionTransaction.ts index 5aff4bee0e..d730adc931 100644 --- a/src/model/transaction/AccountAddressRestrictionTransaction.ts +++ b/src/model/transaction/AccountAddressRestrictionTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AccountAddressRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountAddressRestrictionTransactionBuilder'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; @@ -199,13 +200,13 @@ export class AccountAddressRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): AccountAddressRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { - restrictionAdditions: - this.restrictionAdditions.map((addition) => statement.resolveAddress(addition, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)), - restrictionDeletions: - this.restrictionDeletions.map((deletion) => statement.resolveAddress(deletion, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)), - }); + return DtoMapping.assign(this, { + restrictionAdditions: + this.restrictionAdditions.map((addition) => statement.resolveAddress(addition, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex)), + restrictionDeletions: + this.restrictionDeletions.map((deletion) => statement.resolveAddress(deletion, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex)), + }); } } diff --git a/src/model/transaction/AccountMosaicRestrictionTransaction.ts b/src/model/transaction/AccountMosaicRestrictionTransaction.ts index b6428e83c7..4037d9e687 100644 --- a/src/model/transaction/AccountMosaicRestrictionTransaction.ts +++ b/src/model/transaction/AccountMosaicRestrictionTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AccountMosaicRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountMosaicRestrictionTransactionBuilder'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; @@ -199,7 +200,7 @@ export class AccountMosaicRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): AccountMosaicRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { restrictionAdditions: this.restrictionAdditions.map((addition) => statement.resolveMosaicId(addition, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), diff --git a/src/model/transaction/AggregateTransaction.ts b/src/model/transaction/AggregateTransaction.ts index a92792e4b5..cfefb0a4e9 100644 --- a/src/model/transaction/AggregateTransaction.ts +++ b/src/model/transaction/AggregateTransaction.ts @@ -16,6 +16,7 @@ import {KeyPair, MerkleHashBuilder, SHA3Hasher, SignSchema} from '../../core/crypto'; import {Convert} from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import {AggregateBondedTransactionBuilder} from '../../infrastructure/catbuffer/AggregateBondedTransactionBuilder'; import {AggregateCompleteTransactionBuilder} from '../../infrastructure/catbuffer/AggregateCompleteTransactionBuilder'; import {AmountDto} from '../../infrastructure/catbuffer/AmountDto'; @@ -193,7 +194,7 @@ export class AggregateTransaction extends Transaction { */ public addTransactions(transactions: InnerTransaction[]): AggregateTransaction { const innerTransactions = this.innerTransactions.concat(transactions); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {innerTransactions}); + return DtoMapping.assign(this, {innerTransactions}); } /** @@ -204,7 +205,7 @@ export class AggregateTransaction extends Transaction { */ public addCosignatures(cosigs: AggregateTransactionCosignature[]): AggregateTransaction { const cosignatures = this.cosignatures.concat(cosigs); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {cosignatures}); + return DtoMapping.assign(this, {cosignatures}); } /** @@ -407,8 +408,8 @@ export class AggregateTransaction extends Transaction { */ resolveAliases(statement: Statement): AggregateTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, - {innerTransactions: this.innerTransactions.map((tx) => tx.resolveAliases(statement, transactionInfo.index)) + return DtoMapping.assign(this, + {innerTransactions: this.innerTransactions.map((tx) => tx.resolveAliases(statement, transactionInfo.index)) .sort((a, b) => a.transactionInfo!.index - b.transactionInfo!.index)}); } } diff --git a/src/model/transaction/LockFundsTransaction.ts b/src/model/transaction/LockFundsTransaction.ts index 300c871d11..9b6fc2bb35 100644 --- a/src/model/transaction/LockFundsTransaction.ts +++ b/src/model/transaction/LockFundsTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { BlockDurationDto } from '../../infrastructure/catbuffer/BlockDurationDto'; import { EmbeddedHashLockTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedHashLockTransactionBuilder'; @@ -211,7 +212,7 @@ export class LockFundsTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): LockFundsTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { mosaic: statement.resolveMosaic(this.mosaic, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } diff --git a/src/model/transaction/MosaicAddressRestrictionTransaction.ts b/src/model/transaction/MosaicAddressRestrictionTransaction.ts index 44b9ce1682..fa16011421 100644 --- a/src/model/transaction/MosaicAddressRestrictionTransaction.ts +++ b/src/model/transaction/MosaicAddressRestrictionTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { @@ -243,7 +244,7 @@ export class MosaicAddressRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicAddressRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), targetAddress: statement.resolveAddress(this.targetAddress, diff --git a/src/model/transaction/MosaicGlobalRestrictionTransaction.ts b/src/model/transaction/MosaicGlobalRestrictionTransaction.ts index a172d6da29..e1d654f2d1 100644 --- a/src/model/transaction/MosaicGlobalRestrictionTransaction.ts +++ b/src/model/transaction/MosaicGlobalRestrictionTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { @@ -253,7 +254,7 @@ export class MosaicGlobalRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicGlobalRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), referenceMosaicId: statement.resolveMosaicId(this.referenceMosaicId, transactionInfo.height.toString(), diff --git a/src/model/transaction/MosaicMetadataTransaction.ts b/src/model/transaction/MosaicMetadataTransaction.ts index b161f8766d..345db15e51 100644 --- a/src/model/transaction/MosaicMetadataTransaction.ts +++ b/src/model/transaction/MosaicMetadataTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { EmbeddedMosaicMetadataTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedMosaicMetadataTransactionBuilder'; @@ -219,7 +220,7 @@ export class MosaicMetadataTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicMetadataTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { targetMosaicId: statement.resolveMosaicId(this.targetMosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } diff --git a/src/model/transaction/MosaicSupplyChangeTransaction.ts b/src/model/transaction/MosaicSupplyChangeTransaction.ts index 69eae71d37..6ef580240f 100644 --- a/src/model/transaction/MosaicSupplyChangeTransaction.ts +++ b/src/model/transaction/MosaicSupplyChangeTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { EmbeddedMosaicSupplyChangeTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedMosaicSupplyChangeTransactionBuilder'; @@ -193,7 +194,7 @@ export class MosaicSupplyChangeTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicSupplyChangeTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } diff --git a/src/model/transaction/SecretLockTransaction.ts b/src/model/transaction/SecretLockTransaction.ts index 6dc523b95e..3b10e31c5c 100644 --- a/src/model/transaction/SecretLockTransaction.ts +++ b/src/model/transaction/SecretLockTransaction.ts @@ -14,6 +14,7 @@ * limitations under the License. */ import { Convert, Convert as convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { BlockDurationDto } from '../../infrastructure/catbuffer/BlockDurationDto'; @@ -240,7 +241,7 @@ export class SecretLockTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): SecretLockTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), mosaic: statement.resolveMosaic(this.mosaic, transactionInfo.height.toString(), diff --git a/src/model/transaction/SecretProofTransaction.ts b/src/model/transaction/SecretProofTransaction.ts index b0fd539718..8e1855c841 100644 --- a/src/model/transaction/SecretProofTransaction.ts +++ b/src/model/transaction/SecretProofTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert, Convert as convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { EmbeddedSecretProofTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedSecretProofTransactionBuilder'; @@ -217,7 +218,7 @@ export class SecretProofTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): SecretProofTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } diff --git a/src/model/transaction/Transaction.ts b/src/model/transaction/Transaction.ts index 8e7010c4d1..3ffa2a2891 100644 --- a/src/model/transaction/Transaction.ts +++ b/src/model/transaction/Transaction.ts @@ -16,6 +16,7 @@ import { KeyPair, SHA3Hasher, SignSchema } from '../../core/crypto'; import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { SerializeTransactionToJSON } from '../../infrastructure/transaction/SerializeTransactionToJSON'; import { Account } from '../account/Account'; import { PublicAccount } from '../account/PublicAccount'; @@ -200,7 +201,7 @@ export abstract class Transaction { * @returns {TransferTransaction} */ public setMaxFee(feeMultiplier: number): Transaction { - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {maxFee: UInt64.fromUint(this.size * feeMultiplier)}); + return DtoMapping.assign(this, {maxFee: UInt64.fromUint(this.size * feeMultiplier)}); } /** @@ -277,7 +278,7 @@ export abstract class Transaction { if (this.type === TransactionType.AGGREGATE_BONDED || this.type === TransactionType.AGGREGATE_COMPLETE) { throw new Error('Inner transaction cannot be an aggregated transaction.'); } - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {signer}); + return DtoMapping.assign(this, {signer}); } /** @@ -345,7 +346,7 @@ export abstract class Transaction { */ public reapplyGiven(deadline: Deadline = Deadline.create()): Transaction { if (this.isUnannounced()) { - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {deadline}); + return DtoMapping.assign(this, {deadline}); } throw new Error('an Announced transaction can\'t be modified'); } diff --git a/src/model/transaction/TransferTransaction.ts b/src/model/transaction/TransferTransaction.ts index 923a5b4b04..7f213f989d 100644 --- a/src/model/transaction/TransferTransaction.ts +++ b/src/model/transaction/TransferTransaction.ts @@ -44,6 +44,7 @@ import {Transaction} from './Transaction'; import {TransactionInfo} from './TransactionInfo'; import {TransactionType} from './TransactionType'; import {TransactionVersion} from './TransactionVersion'; +import { DtoMapping } from '../../core/utils/DtoMapping'; /** * Transfer transactions contain data about transfers of mosaics and message to another account. @@ -282,10 +283,9 @@ export class TransferTransaction extends Transaction { */ public resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): TransferTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, - {recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex), - mosaics: this.mosaics.map((mosaic) => statement.resolveMosaic(mosaic, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex))}); + return DtoMapping.assign(this, {recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex), + mosaics: this.mosaics.map((mosaic) => statement.resolveMosaic(mosaic, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex))}); } } diff --git a/test/infrastructure/RepositoryFactory.spec.ts b/test/infrastructure/RepositoryFactory.spec.ts index 6199559a27..3ee35f30b4 100644 --- a/test/infrastructure/RepositoryFactory.spec.ts +++ b/test/infrastructure/RepositoryFactory.spec.ts @@ -13,19 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { expect } from "chai"; -import { RepositoryFactoryHttp } from "../../src/infrastructure/RepositoryFactoryHttp"; -import { BlockRepository } from "../../src/infrastructure/BlockRepository"; -import { instance, mock, when } from "ts-mockito"; -import { BlockInfo } from "../../src/model/blockchain/BlockInfo"; +import { expect } from 'chai'; import { of as observableOf } from 'rxjs'; -import { map } from "rxjs/operators"; -import { NetworkRepository } from "../../src/infrastructure/NetworkRepository"; -import { NetworkType } from "../../src/model/blockchain/NetworkType"; +import { map } from 'rxjs/operators'; +import { instance, mock, when } from 'ts-mockito'; +import { BlockRepository } from '../../src/infrastructure/BlockRepository'; +import { NetworkRepository } from '../../src/infrastructure/NetworkRepository'; +import { RepositoryFactoryHttp } from '../../src/infrastructure/RepositoryFactoryHttp'; +import { BlockInfo } from '../../src/model/blockchain/BlockInfo'; +import { NetworkType } from '../../src/model/blockchain/NetworkType'; describe('RepositoryFactory', () => { it('Should create repositories', () => { - const repositoryFactory = new RepositoryFactoryHttp("http://localhost:3000"); + const repositoryFactory = new RepositoryFactoryHttp('http://localhost:3000'); expect(repositoryFactory.createBlockRepository()).to.be.not.null; expect(repositoryFactory.createNetworkRepository()).to.be.not.null; @@ -50,7 +50,7 @@ describe('RepositoryFactory', () => { const repositoryMock: BlockRepository = mock(); - const observableOfBlockInfo = observableOf({generationHash: 'aaaa'} as BlockInfo).pipe(map(v => { + const observableOfBlockInfo = observableOf({generationHash: 'aaaa'} as BlockInfo).pipe(map((v) => { counter++; return v; })); @@ -63,10 +63,10 @@ describe('RepositoryFactory', () => { createBlockRepository(): BlockRepository { return instance(repositoryMock); } - })("http://localhost:3000"); + })('http://localhost:3000'); expect(counter).to.be.equals(0); - repositoryFactory.getGenerationHash().subscribe(gh => { + repositoryFactory.getGenerationHash().subscribe((gh) => { expect(counter).to.be.equals(1); expect(gh).to.be.equals('aaaa'); repositoryFactory.getGenerationHash().subscribe(gh => { @@ -76,9 +76,9 @@ describe('RepositoryFactory', () => { expect(counter).to.be.equals(1); expect(gh).to.be.equals('aaaa'); done(); - }) - }) - }) + }); + }); + }); }); @@ -88,8 +88,8 @@ describe('RepositoryFactory', () => { const repositoryMock: NetworkRepository = mock(); - let expectedNetworkType = NetworkType.MIJIN_TEST; - const observableOfBlockInfo = observableOf(expectedNetworkType).pipe(map(v => { + const expectedNetworkType = NetworkType.MIJIN_TEST; + const observableOfBlockInfo = observableOf(expectedNetworkType).pipe(map((v) => { counter++; return v; })); @@ -98,22 +98,21 @@ describe('RepositoryFactory', () => { expect(observableOfBlockInfo).to.be.equals(observableOfBlockInfo); const repositoryFactory = new (class RepositoryFactoryHttpForTest extends RepositoryFactoryHttp { - createNetworkRepository(): NetworkRepository { return instance(repositoryMock); } - })("http://localhost:3000"); + })('http://localhost:3000'); expect(counter).to.be.equals(0); - repositoryFactory.getNetworkType().subscribe(networkType => { + repositoryFactory.getNetworkType().subscribe((networkType) => { expect(counter).to.be.equals(1); expect(networkType).to.be.equals(expectedNetworkType); repositoryFactory.getNetworkType().subscribe(networkType => { expect(counter).to.be.equals(1); expect(networkType).to.be.equals(expectedNetworkType); done(); - }) - }) + }); + }); }); @@ -123,8 +122,8 @@ describe('RepositoryFactory', () => { const repositoryMock: NetworkRepository = mock(); - let expectedNetworkType = NetworkType.MIJIN_TEST; - const observableOfBlockInfo = observableOf(expectedNetworkType).pipe(map(v => { + const expectedNetworkType = NetworkType.MIJIN_TEST; + const observableOfBlockInfo = observableOf(expectedNetworkType).pipe(map((v) => { counter++; return v; })); @@ -137,18 +136,18 @@ describe('RepositoryFactory', () => { createNetworkRepository(): NetworkRepository { return instance(repositoryMock); } - })("http://localhost:3000", expectedNetworkType); + })('http://localhost:3000', expectedNetworkType); expect(counter).to.be.equals(0); - repositoryFactory.getNetworkType().subscribe(networkType => { + repositoryFactory.getNetworkType().subscribe((networkType) => { expect(counter).to.be.equals(0); expect(networkType).to.be.equals(expectedNetworkType); repositoryFactory.getNetworkType().subscribe(networkType => { expect(counter).to.be.equals(0); expect(networkType).to.be.equals(expectedNetworkType); done(); - }) - }) + }); + }); }); From 4c656b22469035b68f94b1253b11f8fa77e9d767 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Wed, 18 Dec 2019 11:56:34 +0000 Subject: [PATCH 3/4] Fixed #390 Spread operator does not assign super class methods --- .../transaction/AccountAddressRestrictionTransaction.ts | 4 ++-- .../transaction/AccountMosaicRestrictionTransaction.ts | 4 ++-- src/model/transaction/LockFundsTransaction.ts | 4 ++-- .../transaction/MosaicAddressRestrictionTransaction.ts | 4 ++-- .../transaction/MosaicGlobalRestrictionTransaction.ts | 4 ++-- src/model/transaction/MosaicMetadataTransaction.ts | 4 ++-- src/model/transaction/MosaicSupplyChangeTransaction.ts | 4 ++-- src/model/transaction/SecretLockTransaction.ts | 4 ++-- src/model/transaction/SecretProofTransaction.ts | 4 ++-- src/model/transaction/Transaction.ts | 2 +- src/model/transaction/TransferTransaction.ts | 7 ++++--- test/model/transaction/AccountLinkTransaction.spec.ts | 3 +++ test/model/transaction/AccountMetadataTransaction.spec.ts | 3 +++ test/model/transaction/AggregateTransaction.spec.ts | 6 ++++++ test/model/transaction/LockFundsTransaction.spec.ts | 6 ++++++ .../MosaicAddressRestrictionTransaction.spec.ts | 6 ++++++ test/model/transaction/MosaicAliasTransaction.spec.ts | 3 +++ test/model/transaction/MosaicDefinitionTransaction.spec.ts | 3 +++ .../transaction/MosaicGlobalRestrictionTransaction.spec.ts | 6 ++++++ test/model/transaction/MosaicMetadataTransaction.spec.ts | 6 ++++++ .../transaction/MosaicSupplyChangeTransaction.spec.ts | 5 +++++ .../MultisigAccountModificationTransaction.spec.ts | 3 +++ .../model/transaction/NamespaceMetadataTransaction.spec.ts | 3 +++ .../transaction/NamespaceRegistrationTransaction.spec.ts | 3 +++ test/model/transaction/SecretLockTransaction.spec.ts | 5 +++++ test/model/transaction/SecretProofTransaction.spec.ts | 5 +++++ test/model/transaction/TransferTransaction.spec.ts | 6 ++++++ 27 files changed, 95 insertions(+), 22 deletions(-) diff --git a/src/model/transaction/AccountAddressRestrictionTransaction.ts b/src/model/transaction/AccountAddressRestrictionTransaction.ts index 66f2b2fafd..5aff4bee0e 100644 --- a/src/model/transaction/AccountAddressRestrictionTransaction.ts +++ b/src/model/transaction/AccountAddressRestrictionTransaction.ts @@ -199,13 +199,13 @@ export class AccountAddressRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): AccountAddressRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { restrictionAdditions: this.restrictionAdditions.map((addition) => statement.resolveAddress(addition, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), restrictionDeletions: this.restrictionDeletions.map((deletion) => statement.resolveAddress(deletion, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), - }; + }); } } diff --git a/src/model/transaction/AccountMosaicRestrictionTransaction.ts b/src/model/transaction/AccountMosaicRestrictionTransaction.ts index c739b574b8..b6428e83c7 100644 --- a/src/model/transaction/AccountMosaicRestrictionTransaction.ts +++ b/src/model/transaction/AccountMosaicRestrictionTransaction.ts @@ -199,13 +199,13 @@ export class AccountMosaicRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): AccountMosaicRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { restrictionAdditions: this.restrictionAdditions.map((addition) => statement.resolveMosaicId(addition, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), restrictionDeletions: this.restrictionDeletions.map((deletion) => statement.resolveMosaicId(deletion, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), - }; + }); } } diff --git a/src/model/transaction/LockFundsTransaction.ts b/src/model/transaction/LockFundsTransaction.ts index 4d31fa9d3b..300c871d11 100644 --- a/src/model/transaction/LockFundsTransaction.ts +++ b/src/model/transaction/LockFundsTransaction.ts @@ -211,8 +211,8 @@ export class LockFundsTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): LockFundsTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { mosaic: statement.resolveMosaic(this.mosaic, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/MosaicAddressRestrictionTransaction.ts b/src/model/transaction/MosaicAddressRestrictionTransaction.ts index 7323856186..44b9ce1682 100644 --- a/src/model/transaction/MosaicAddressRestrictionTransaction.ts +++ b/src/model/transaction/MosaicAddressRestrictionTransaction.ts @@ -243,10 +243,10 @@ export class MosaicAddressRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicAddressRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), targetAddress: statement.resolveAddress(this.targetAddress, - transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/MosaicGlobalRestrictionTransaction.ts b/src/model/transaction/MosaicGlobalRestrictionTransaction.ts index 35ff2de88e..a172d6da29 100644 --- a/src/model/transaction/MosaicGlobalRestrictionTransaction.ts +++ b/src/model/transaction/MosaicGlobalRestrictionTransaction.ts @@ -253,10 +253,10 @@ export class MosaicGlobalRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicGlobalRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), referenceMosaicId: statement.resolveMosaicId(this.referenceMosaicId, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/MosaicMetadataTransaction.ts b/src/model/transaction/MosaicMetadataTransaction.ts index ce5b5135cf..b161f8766d 100644 --- a/src/model/transaction/MosaicMetadataTransaction.ts +++ b/src/model/transaction/MosaicMetadataTransaction.ts @@ -219,8 +219,8 @@ export class MosaicMetadataTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicMetadataTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { targetMosaicId: statement.resolveMosaicId(this.targetMosaicId, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/MosaicSupplyChangeTransaction.ts b/src/model/transaction/MosaicSupplyChangeTransaction.ts index 3e6b2685cb..69eae71d37 100644 --- a/src/model/transaction/MosaicSupplyChangeTransaction.ts +++ b/src/model/transaction/MosaicSupplyChangeTransaction.ts @@ -193,8 +193,8 @@ export class MosaicSupplyChangeTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicSupplyChangeTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/SecretLockTransaction.ts b/src/model/transaction/SecretLockTransaction.ts index 3606ede7e7..6dc523b95e 100644 --- a/src/model/transaction/SecretLockTransaction.ts +++ b/src/model/transaction/SecretLockTransaction.ts @@ -240,10 +240,10 @@ export class SecretLockTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): SecretLockTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), mosaic: statement.resolveMosaic(this.mosaic, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/SecretProofTransaction.ts b/src/model/transaction/SecretProofTransaction.ts index db890c7ca4..b0fd539718 100644 --- a/src/model/transaction/SecretProofTransaction.ts +++ b/src/model/transaction/SecretProofTransaction.ts @@ -217,8 +217,8 @@ export class SecretProofTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): SecretProofTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { recipientAddress: statement.resolveAddress(this.recipientAddress, - transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}; + transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } } diff --git a/src/model/transaction/Transaction.ts b/src/model/transaction/Transaction.ts index f42edc8415..8e7010c4d1 100644 --- a/src/model/transaction/Transaction.ts +++ b/src/model/transaction/Transaction.ts @@ -200,7 +200,7 @@ export abstract class Transaction { * @returns {TransferTransaction} */ public setMaxFee(feeMultiplier: number): Transaction { - return {...Object.getPrototypeOf(this), maxFee: UInt64.fromUint(this.size * feeMultiplier)}; + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {maxFee: UInt64.fromUint(this.size * feeMultiplier)}); } /** diff --git a/src/model/transaction/TransferTransaction.ts b/src/model/transaction/TransferTransaction.ts index d858927b9e..923a5b4b04 100644 --- a/src/model/transaction/TransferTransaction.ts +++ b/src/model/transaction/TransferTransaction.ts @@ -282,9 +282,10 @@ export class TransferTransaction extends Transaction { */ public resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): TransferTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return {...Object.getPrototypeOf(this), recipientAddress: statement.resolveAddress(this.recipientAddress, - transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), + return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, + {recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex), mosaics: this.mosaics.map((mosaic) => statement.resolveMosaic(mosaic, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex))}; + transactionInfo.index, aggregateTransactionIndex))}); } } diff --git a/test/model/transaction/AccountLinkTransaction.spec.ts b/test/model/transaction/AccountLinkTransaction.spec.ts index aed6cb72c6..f197c25f37 100644 --- a/test/model/transaction/AccountLinkTransaction.spec.ts +++ b/test/model/transaction/AccountLinkTransaction.spec.ts @@ -116,5 +116,8 @@ describe('AccountLinkTransaction', () => { ).setMaxFee(2); ​ expect(accountLinkTransaction.maxFee.compact()).to.be.equal(322); + + const signedTransaction = accountLinkTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/AccountMetadataTransaction.spec.ts b/test/model/transaction/AccountMetadataTransaction.spec.ts index ecf15db7be..0ceecdffff 100644 --- a/test/model/transaction/AccountMetadataTransaction.spec.ts +++ b/test/model/transaction/AccountMetadataTransaction.spec.ts @@ -103,6 +103,9 @@ describe('AccountMetadataTransaction', () => { expect(Convert.hexToUint8(accountMetadataTransaction.serialize()).length).to.be.equal(accountMetadataTransaction.size); expect(accountMetadataTransaction.size).to.be.equal(182); + + const signedTransaction = accountMetadataTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); }); diff --git a/test/model/transaction/AggregateTransaction.spec.ts b/test/model/transaction/AggregateTransaction.spec.ts index 5ae0e31825..d7eb524dec 100644 --- a/test/model/transaction/AggregateTransaction.spec.ts +++ b/test/model/transaction/AggregateTransaction.spec.ts @@ -582,6 +582,9 @@ describe('AggregateTransaction', () => { ).setMaxFee(2); ​ expect(aggregateTransaction.maxFee.compact()).to.be.equal(560); + + const signedTransaction = aggregateTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -614,5 +617,8 @@ describe('AggregateTransaction', () => { expect(innerTransaction.mosaics[0].id instanceof MosaicId).to.be.true; expect((innerTransaction.recipientAddress as Address).equals(account.address)).to.be.true; expect((innerTransaction.mosaics[0].id as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = aggregateTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/LockFundsTransaction.spec.ts b/test/model/transaction/LockFundsTransaction.spec.ts index ddcf970822..b5016e198d 100644 --- a/test/model/transaction/LockFundsTransaction.spec.ts +++ b/test/model/transaction/LockFundsTransaction.spec.ts @@ -181,6 +181,9 @@ describe('LockFundsTransaction', () => { ).setMaxFee(2); ​ expect(lockFundsTransaction.maxFee.compact()).to.be.equal(368); + + const signedTransactionTest = lockFundsTransaction.signWith(account, generationHash); + expect(signedTransactionTest.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -205,5 +208,8 @@ describe('LockFundsTransaction', () => { ​ expect(transaction.mosaic.id instanceof MosaicId).to.be.true; expect((transaction.mosaic.id as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransactionTest = transaction.signWith(account, generationHash); + expect(signedTransactionTest.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicAddressRestrictionTransaction.spec.ts b/test/model/transaction/MosaicAddressRestrictionTransaction.spec.ts index 3783e40f9e..53bbbe7a96 100644 --- a/test/model/transaction/MosaicAddressRestrictionTransaction.spec.ts +++ b/test/model/transaction/MosaicAddressRestrictionTransaction.spec.ts @@ -164,6 +164,9 @@ describe('MosaicAddressRestrictionTransaction', () => { ).setMaxFee(2); ​ expect(transaction.maxFee.compact()).to.be.equal(370); + + const signedTransaction = transaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -185,5 +188,8 @@ describe('MosaicAddressRestrictionTransaction', () => { expect(transaction.mosaicId instanceof MosaicId).to.be.true; expect((transaction.targetAddress as Address).equals(account.address)).to.be.true; expect((transaction.mosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = transaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicAliasTransaction.spec.ts b/test/model/transaction/MosaicAliasTransaction.spec.ts index a9c9f698a3..3e9f775b44 100644 --- a/test/model/transaction/MosaicAliasTransaction.spec.ts +++ b/test/model/transaction/MosaicAliasTransaction.spec.ts @@ -118,5 +118,8 @@ describe('MosaicAliasTransaction', () => { ).setMaxFee(2); ​ expect(mosaicAliasTransaction.maxFee.compact()).to.be.equal(290); + + const signedTransaction = mosaicAliasTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicDefinitionTransaction.spec.ts b/test/model/transaction/MosaicDefinitionTransaction.spec.ts index 0de595a09a..9be5cb72b5 100644 --- a/test/model/transaction/MosaicDefinitionTransaction.spec.ts +++ b/test/model/transaction/MosaicDefinitionTransaction.spec.ts @@ -172,5 +172,8 @@ describe('MosaicDefinitionTransaction', () => { ).setMaxFee(2); ​ expect(mosaicDefinitionTransaction.maxFee.compact()).to.be.equal(300); + + const signedTransaction = mosaicDefinitionTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicGlobalRestrictionTransaction.spec.ts b/test/model/transaction/MosaicGlobalRestrictionTransaction.spec.ts index a4b387dcd5..846f631733 100644 --- a/test/model/transaction/MosaicGlobalRestrictionTransaction.spec.ts +++ b/test/model/transaction/MosaicGlobalRestrictionTransaction.spec.ts @@ -162,6 +162,9 @@ describe('MosaicGlobalRestrictionTransaction', () => { ).setMaxFee(2); ​ expect(mosaicGlobalRestrictionTransaction.maxFee.compact()).to.be.equal(340); + + const signedTransaction = mosaicGlobalRestrictionTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -185,5 +188,8 @@ describe('MosaicGlobalRestrictionTransaction', () => { expect((mosaicGlobalRestrictionTransaction.mosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; expect(mosaicGlobalRestrictionTransaction.referenceMosaicId instanceof MosaicId).to.be.true; expect((mosaicGlobalRestrictionTransaction.referenceMosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = mosaicGlobalRestrictionTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicMetadataTransaction.spec.ts b/test/model/transaction/MosaicMetadataTransaction.spec.ts index bea46583b2..c55ad3efed 100644 --- a/test/model/transaction/MosaicMetadataTransaction.spec.ts +++ b/test/model/transaction/MosaicMetadataTransaction.spec.ts @@ -161,6 +161,9 @@ describe('MosaicMetadataTransaction', () => { ).setMaxFee(2); ​ expect(mosaicMetadataTransaction.maxFee.compact()).to.be.equal(380); + + const signedTransaction = mosaicMetadataTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -180,5 +183,8 @@ describe('MosaicMetadataTransaction', () => { ​ expect(mosaicMetadataTransaction.targetMosaicId instanceof MosaicId).to.be.true; expect((mosaicMetadataTransaction.targetMosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = mosaicMetadataTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MosaicSupplyChangeTransaction.spec.ts b/test/model/transaction/MosaicSupplyChangeTransaction.spec.ts index 805a1f592c..77f2fdaa90 100644 --- a/test/model/transaction/MosaicSupplyChangeTransaction.spec.ts +++ b/test/model/transaction/MosaicSupplyChangeTransaction.spec.ts @@ -127,6 +127,8 @@ describe('MosaicSupplyChangeTransaction', () => { ).setMaxFee(2); ​ expect(mosaicSupplyChangeTransaction.maxFee.compact()).to.be.equal(290); + const signedTransaction = mosaicSupplyChangeTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -144,5 +146,8 @@ describe('MosaicSupplyChangeTransaction', () => { ​ expect(mosaicSupplyChangeTransaction.mosaicId instanceof MosaicId).to.be.true; expect((mosaicSupplyChangeTransaction.mosaicId as MosaicId).equals(resolvedMosaicId)).to.be.true; + + const signedTransaction = mosaicSupplyChangeTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/MultisigAccountModificationTransaction.spec.ts b/test/model/transaction/MultisigAccountModificationTransaction.spec.ts index 1b1f4e3707..ff5a2ae193 100644 --- a/test/model/transaction/MultisigAccountModificationTransaction.spec.ts +++ b/test/model/transaction/MultisigAccountModificationTransaction.spec.ts @@ -134,5 +134,8 @@ describe('MultisigAccountModificationTransaction', () => { ).setMaxFee(2); ​ expect(modifyMultisigAccountTransaction.maxFee.compact()).to.be.equal(336); + + const signedTransaction = modifyMultisigAccountTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/NamespaceMetadataTransaction.spec.ts b/test/model/transaction/NamespaceMetadataTransaction.spec.ts index cd881f49b3..27688408c5 100644 --- a/test/model/transaction/NamespaceMetadataTransaction.spec.ts +++ b/test/model/transaction/NamespaceMetadataTransaction.spec.ts @@ -124,5 +124,8 @@ describe('NamespaceMetadataTransaction', () => { ).setMaxFee(2); ​ expect(namespaceMetadataTransaction.maxFee.compact()).to.be.equal(380); + + const signedTransaction = namespaceMetadataTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/NamespaceRegistrationTransaction.spec.ts b/test/model/transaction/NamespaceRegistrationTransaction.spec.ts index c24ebfe45b..921a3bd457 100644 --- a/test/model/transaction/NamespaceRegistrationTransaction.spec.ts +++ b/test/model/transaction/NamespaceRegistrationTransaction.spec.ts @@ -131,5 +131,8 @@ describe('NamespaceRegistrationTransaction', () => { ).setMaxFee(2); ​ expect(registerNamespaceTransaction.maxFee.compact()).to.be.equal(330); + + const signedTransaction = registerNamespaceTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/SecretLockTransaction.spec.ts b/test/model/transaction/SecretLockTransaction.spec.ts index 9cb2c2c33c..612b1ef7b8 100644 --- a/test/model/transaction/SecretLockTransaction.spec.ts +++ b/test/model/transaction/SecretLockTransaction.spec.ts @@ -300,6 +300,8 @@ describe('SecretLockTransaction', () => { ).setMaxFee(2); ​ expect(secretLockTransaction.maxFee.compact()).to.be.equal(420); + const signedTransaction = secretLockTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -322,5 +324,8 @@ describe('SecretLockTransaction', () => { expect(secretLockTransaction.mosaic.id instanceof MosaicId).to.be.true; expect((secretLockTransaction.recipientAddress as Address).equals(account.address)).to.be.true; expect((secretLockTransaction.mosaic.id as MosaicId).equals(mosaicId)).to.be.true; + + const signedTransaction = secretLockTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/SecretProofTransaction.spec.ts b/test/model/transaction/SecretProofTransaction.spec.ts index 7092f966e7..f6c2eece9e 100644 --- a/test/model/transaction/SecretProofTransaction.spec.ts +++ b/test/model/transaction/SecretProofTransaction.spec.ts @@ -257,6 +257,8 @@ describe('SecretProofTransaction', () => { ).setMaxFee(2); ​ expect(secretProofTransaction.maxFee.compact()).to.be.equal(440); + const signedTransaction = secretProofTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -276,5 +278,8 @@ describe('SecretProofTransaction', () => { ​ expect(transferTransaction.recipientAddress instanceof Address).to.be.true; expect((transferTransaction.recipientAddress as Address).equals(account.address)).to.be.true; + + const signedTransaction = transferTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); diff --git a/test/model/transaction/TransferTransaction.spec.ts b/test/model/transaction/TransferTransaction.spec.ts index 6626d55eaf..83e3d09d9b 100644 --- a/test/model/transaction/TransferTransaction.spec.ts +++ b/test/model/transaction/TransferTransaction.spec.ts @@ -407,6 +407,9 @@ describe('TransferTransaction', () => { ).setMaxFee(2); ​ expect(transferTransaction.maxFee.compact()).to.be.equal(378); + + const signedTransaction = transferTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); it('Test resolveAlias can resolve', () => { @@ -426,5 +429,8 @@ describe('TransferTransaction', () => { expect(transferTransaction.mosaics[0].id instanceof MosaicId).to.be.true; expect((transferTransaction.recipientAddress as Address).equals(account.address)).to.be.true; expect((transferTransaction.mosaics[0].id as MosaicId).equals(mosaicId)).to.be.true; + + const signedTransaction = transferTransaction.signWith(account, generationHash); + expect(signedTransaction.hash).not.to.be.undefined; }); }); From a21ba912d3a871d4712540082bb4b1c134eba29a Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Sun, 22 Dec 2019 15:17:27 +0000 Subject: [PATCH 4/4] Moved object assgin to a static method in MappingDto --- src/core/utils/DtoMapping.ts | 11 ++++ .../AccountAddressRestrictionTransaction.ts | 17 +++--- .../AccountMosaicRestrictionTransaction.ts | 3 +- src/model/transaction/AggregateTransaction.ts | 9 +-- src/model/transaction/LockFundsTransaction.ts | 3 +- .../MosaicAddressRestrictionTransaction.ts | 3 +- .../MosaicGlobalRestrictionTransaction.ts | 3 +- .../transaction/MosaicMetadataTransaction.ts | 3 +- .../MosaicSupplyChangeTransaction.ts | 3 +- .../transaction/SecretLockTransaction.ts | 3 +- .../transaction/SecretProofTransaction.ts | 3 +- src/model/transaction/Transaction.ts | 7 ++- src/model/transaction/TransferTransaction.ts | 10 ++-- test/infrastructure/RepositoryFactory.spec.ts | 55 +++++++++---------- 14 files changed, 77 insertions(+), 56 deletions(-) diff --git a/src/core/utils/DtoMapping.ts b/src/core/utils/DtoMapping.ts index 576cd49d63..6c62abc026 100644 --- a/src/core/utils/DtoMapping.ts +++ b/src/core/utils/DtoMapping.ts @@ -54,4 +54,15 @@ export class DtoMapping { } }))); } + + /** + * Creates a copy of the first object adding the attributes of the second object. + * @param object the object to be cloned + * @param attributes the extra attributes to be added to the object. + * @returns a copy of the first object with the new attributes added. + */ + public static assign(object: T, attributes: any): T { + return Object.assign({__proto__: Object.getPrototypeOf(object)}, object, attributes); + } + } diff --git a/src/model/transaction/AccountAddressRestrictionTransaction.ts b/src/model/transaction/AccountAddressRestrictionTransaction.ts index 5aff4bee0e..d730adc931 100644 --- a/src/model/transaction/AccountAddressRestrictionTransaction.ts +++ b/src/model/transaction/AccountAddressRestrictionTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AccountAddressRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountAddressRestrictionTransactionBuilder'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; @@ -199,13 +200,13 @@ export class AccountAddressRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): AccountAddressRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { - restrictionAdditions: - this.restrictionAdditions.map((addition) => statement.resolveAddress(addition, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)), - restrictionDeletions: - this.restrictionDeletions.map((deletion) => statement.resolveAddress(deletion, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex)), - }); + return DtoMapping.assign(this, { + restrictionAdditions: + this.restrictionAdditions.map((addition) => statement.resolveAddress(addition, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex)), + restrictionDeletions: + this.restrictionDeletions.map((deletion) => statement.resolveAddress(deletion, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex)), + }); } } diff --git a/src/model/transaction/AccountMosaicRestrictionTransaction.ts b/src/model/transaction/AccountMosaicRestrictionTransaction.ts index b6428e83c7..4037d9e687 100644 --- a/src/model/transaction/AccountMosaicRestrictionTransaction.ts +++ b/src/model/transaction/AccountMosaicRestrictionTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AccountMosaicRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountMosaicRestrictionTransactionBuilder'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; @@ -199,7 +200,7 @@ export class AccountMosaicRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): AccountMosaicRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { restrictionAdditions: this.restrictionAdditions.map((addition) => statement.resolveMosaicId(addition, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)), diff --git a/src/model/transaction/AggregateTransaction.ts b/src/model/transaction/AggregateTransaction.ts index a92792e4b5..cfefb0a4e9 100644 --- a/src/model/transaction/AggregateTransaction.ts +++ b/src/model/transaction/AggregateTransaction.ts @@ -16,6 +16,7 @@ import {KeyPair, MerkleHashBuilder, SHA3Hasher, SignSchema} from '../../core/crypto'; import {Convert} from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import {AggregateBondedTransactionBuilder} from '../../infrastructure/catbuffer/AggregateBondedTransactionBuilder'; import {AggregateCompleteTransactionBuilder} from '../../infrastructure/catbuffer/AggregateCompleteTransactionBuilder'; import {AmountDto} from '../../infrastructure/catbuffer/AmountDto'; @@ -193,7 +194,7 @@ export class AggregateTransaction extends Transaction { */ public addTransactions(transactions: InnerTransaction[]): AggregateTransaction { const innerTransactions = this.innerTransactions.concat(transactions); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {innerTransactions}); + return DtoMapping.assign(this, {innerTransactions}); } /** @@ -204,7 +205,7 @@ export class AggregateTransaction extends Transaction { */ public addCosignatures(cosigs: AggregateTransactionCosignature[]): AggregateTransaction { const cosignatures = this.cosignatures.concat(cosigs); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {cosignatures}); + return DtoMapping.assign(this, {cosignatures}); } /** @@ -407,8 +408,8 @@ export class AggregateTransaction extends Transaction { */ resolveAliases(statement: Statement): AggregateTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, - {innerTransactions: this.innerTransactions.map((tx) => tx.resolveAliases(statement, transactionInfo.index)) + return DtoMapping.assign(this, + {innerTransactions: this.innerTransactions.map((tx) => tx.resolveAliases(statement, transactionInfo.index)) .sort((a, b) => a.transactionInfo!.index - b.transactionInfo!.index)}); } } diff --git a/src/model/transaction/LockFundsTransaction.ts b/src/model/transaction/LockFundsTransaction.ts index 300c871d11..9b6fc2bb35 100644 --- a/src/model/transaction/LockFundsTransaction.ts +++ b/src/model/transaction/LockFundsTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { BlockDurationDto } from '../../infrastructure/catbuffer/BlockDurationDto'; import { EmbeddedHashLockTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedHashLockTransactionBuilder'; @@ -211,7 +212,7 @@ export class LockFundsTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): LockFundsTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { mosaic: statement.resolveMosaic(this.mosaic, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } diff --git a/src/model/transaction/MosaicAddressRestrictionTransaction.ts b/src/model/transaction/MosaicAddressRestrictionTransaction.ts index 44b9ce1682..fa16011421 100644 --- a/src/model/transaction/MosaicAddressRestrictionTransaction.ts +++ b/src/model/transaction/MosaicAddressRestrictionTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { @@ -243,7 +244,7 @@ export class MosaicAddressRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicAddressRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), targetAddress: statement.resolveAddress(this.targetAddress, diff --git a/src/model/transaction/MosaicGlobalRestrictionTransaction.ts b/src/model/transaction/MosaicGlobalRestrictionTransaction.ts index a172d6da29..e1d654f2d1 100644 --- a/src/model/transaction/MosaicGlobalRestrictionTransaction.ts +++ b/src/model/transaction/MosaicGlobalRestrictionTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { @@ -253,7 +254,7 @@ export class MosaicGlobalRestrictionTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicGlobalRestrictionTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), referenceMosaicId: statement.resolveMosaicId(this.referenceMosaicId, transactionInfo.height.toString(), diff --git a/src/model/transaction/MosaicMetadataTransaction.ts b/src/model/transaction/MosaicMetadataTransaction.ts index b161f8766d..345db15e51 100644 --- a/src/model/transaction/MosaicMetadataTransaction.ts +++ b/src/model/transaction/MosaicMetadataTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { EmbeddedMosaicMetadataTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedMosaicMetadataTransactionBuilder'; @@ -219,7 +220,7 @@ export class MosaicMetadataTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicMetadataTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { targetMosaicId: statement.resolveMosaicId(this.targetMosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } diff --git a/src/model/transaction/MosaicSupplyChangeTransaction.ts b/src/model/transaction/MosaicSupplyChangeTransaction.ts index 69eae71d37..6ef580240f 100644 --- a/src/model/transaction/MosaicSupplyChangeTransaction.ts +++ b/src/model/transaction/MosaicSupplyChangeTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { EmbeddedMosaicSupplyChangeTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedMosaicSupplyChangeTransactionBuilder'; @@ -193,7 +194,7 @@ export class MosaicSupplyChangeTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): MosaicSupplyChangeTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { mosaicId: statement.resolveMosaicId(this.mosaicId, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } diff --git a/src/model/transaction/SecretLockTransaction.ts b/src/model/transaction/SecretLockTransaction.ts index 6dc523b95e..3b10e31c5c 100644 --- a/src/model/transaction/SecretLockTransaction.ts +++ b/src/model/transaction/SecretLockTransaction.ts @@ -14,6 +14,7 @@ * limitations under the License. */ import { Convert, Convert as convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { BlockDurationDto } from '../../infrastructure/catbuffer/BlockDurationDto'; @@ -240,7 +241,7 @@ export class SecretLockTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): SecretLockTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex), mosaic: statement.resolveMosaic(this.mosaic, transactionInfo.height.toString(), diff --git a/src/model/transaction/SecretProofTransaction.ts b/src/model/transaction/SecretProofTransaction.ts index b0fd539718..8e1855c841 100644 --- a/src/model/transaction/SecretProofTransaction.ts +++ b/src/model/transaction/SecretProofTransaction.ts @@ -15,6 +15,7 @@ */ import { Convert, Convert as convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping'; import { AmountDto } from '../../infrastructure/catbuffer/AmountDto'; import { EmbeddedSecretProofTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedSecretProofTransactionBuilder'; @@ -217,7 +218,7 @@ export class SecretProofTransaction extends Transaction { */ resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): SecretProofTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, { + return DtoMapping.assign(this, { recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), transactionInfo.index, aggregateTransactionIndex)}); } diff --git a/src/model/transaction/Transaction.ts b/src/model/transaction/Transaction.ts index 8e7010c4d1..3ffa2a2891 100644 --- a/src/model/transaction/Transaction.ts +++ b/src/model/transaction/Transaction.ts @@ -16,6 +16,7 @@ import { KeyPair, SHA3Hasher, SignSchema } from '../../core/crypto'; import { Convert } from '../../core/format'; +import { DtoMapping } from '../../core/utils/DtoMapping'; import { SerializeTransactionToJSON } from '../../infrastructure/transaction/SerializeTransactionToJSON'; import { Account } from '../account/Account'; import { PublicAccount } from '../account/PublicAccount'; @@ -200,7 +201,7 @@ export abstract class Transaction { * @returns {TransferTransaction} */ public setMaxFee(feeMultiplier: number): Transaction { - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {maxFee: UInt64.fromUint(this.size * feeMultiplier)}); + return DtoMapping.assign(this, {maxFee: UInt64.fromUint(this.size * feeMultiplier)}); } /** @@ -277,7 +278,7 @@ export abstract class Transaction { if (this.type === TransactionType.AGGREGATE_BONDED || this.type === TransactionType.AGGREGATE_COMPLETE) { throw new Error('Inner transaction cannot be an aggregated transaction.'); } - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {signer}); + return DtoMapping.assign(this, {signer}); } /** @@ -345,7 +346,7 @@ export abstract class Transaction { */ public reapplyGiven(deadline: Deadline = Deadline.create()): Transaction { if (this.isUnannounced()) { - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, {deadline}); + return DtoMapping.assign(this, {deadline}); } throw new Error('an Announced transaction can\'t be modified'); } diff --git a/src/model/transaction/TransferTransaction.ts b/src/model/transaction/TransferTransaction.ts index 923a5b4b04..7f213f989d 100644 --- a/src/model/transaction/TransferTransaction.ts +++ b/src/model/transaction/TransferTransaction.ts @@ -44,6 +44,7 @@ import {Transaction} from './Transaction'; import {TransactionInfo} from './TransactionInfo'; import {TransactionType} from './TransactionType'; import {TransactionVersion} from './TransactionVersion'; +import { DtoMapping } from '../../core/utils/DtoMapping'; /** * Transfer transactions contain data about transfers of mosaics and message to another account. @@ -282,10 +283,9 @@ export class TransferTransaction extends Transaction { */ public resolveAliases(statement: Statement, aggregateTransactionIndex: number = 0): TransferTransaction { const transactionInfo = this.checkTransactionHeightAndIndex(); - return Object.assign({__proto__: Object.getPrototypeOf(this)}, this, - {recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex), - mosaics: this.mosaics.map((mosaic) => statement.resolveMosaic(mosaic, transactionInfo.height.toString(), - transactionInfo.index, aggregateTransactionIndex))}); + return DtoMapping.assign(this, {recipientAddress: statement.resolveAddress(this.recipientAddress, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex), + mosaics: this.mosaics.map((mosaic) => statement.resolveMosaic(mosaic, transactionInfo.height.toString(), + transactionInfo.index, aggregateTransactionIndex))}); } } diff --git a/test/infrastructure/RepositoryFactory.spec.ts b/test/infrastructure/RepositoryFactory.spec.ts index 6199559a27..3ee35f30b4 100644 --- a/test/infrastructure/RepositoryFactory.spec.ts +++ b/test/infrastructure/RepositoryFactory.spec.ts @@ -13,19 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { expect } from "chai"; -import { RepositoryFactoryHttp } from "../../src/infrastructure/RepositoryFactoryHttp"; -import { BlockRepository } from "../../src/infrastructure/BlockRepository"; -import { instance, mock, when } from "ts-mockito"; -import { BlockInfo } from "../../src/model/blockchain/BlockInfo"; +import { expect } from 'chai'; import { of as observableOf } from 'rxjs'; -import { map } from "rxjs/operators"; -import { NetworkRepository } from "../../src/infrastructure/NetworkRepository"; -import { NetworkType } from "../../src/model/blockchain/NetworkType"; +import { map } from 'rxjs/operators'; +import { instance, mock, when } from 'ts-mockito'; +import { BlockRepository } from '../../src/infrastructure/BlockRepository'; +import { NetworkRepository } from '../../src/infrastructure/NetworkRepository'; +import { RepositoryFactoryHttp } from '../../src/infrastructure/RepositoryFactoryHttp'; +import { BlockInfo } from '../../src/model/blockchain/BlockInfo'; +import { NetworkType } from '../../src/model/blockchain/NetworkType'; describe('RepositoryFactory', () => { it('Should create repositories', () => { - const repositoryFactory = new RepositoryFactoryHttp("http://localhost:3000"); + const repositoryFactory = new RepositoryFactoryHttp('http://localhost:3000'); expect(repositoryFactory.createBlockRepository()).to.be.not.null; expect(repositoryFactory.createNetworkRepository()).to.be.not.null; @@ -50,7 +50,7 @@ describe('RepositoryFactory', () => { const repositoryMock: BlockRepository = mock(); - const observableOfBlockInfo = observableOf({generationHash: 'aaaa'} as BlockInfo).pipe(map(v => { + const observableOfBlockInfo = observableOf({generationHash: 'aaaa'} as BlockInfo).pipe(map((v) => { counter++; return v; })); @@ -63,10 +63,10 @@ describe('RepositoryFactory', () => { createBlockRepository(): BlockRepository { return instance(repositoryMock); } - })("http://localhost:3000"); + })('http://localhost:3000'); expect(counter).to.be.equals(0); - repositoryFactory.getGenerationHash().subscribe(gh => { + repositoryFactory.getGenerationHash().subscribe((gh) => { expect(counter).to.be.equals(1); expect(gh).to.be.equals('aaaa'); repositoryFactory.getGenerationHash().subscribe(gh => { @@ -76,9 +76,9 @@ describe('RepositoryFactory', () => { expect(counter).to.be.equals(1); expect(gh).to.be.equals('aaaa'); done(); - }) - }) - }) + }); + }); + }); }); @@ -88,8 +88,8 @@ describe('RepositoryFactory', () => { const repositoryMock: NetworkRepository = mock(); - let expectedNetworkType = NetworkType.MIJIN_TEST; - const observableOfBlockInfo = observableOf(expectedNetworkType).pipe(map(v => { + const expectedNetworkType = NetworkType.MIJIN_TEST; + const observableOfBlockInfo = observableOf(expectedNetworkType).pipe(map((v) => { counter++; return v; })); @@ -98,22 +98,21 @@ describe('RepositoryFactory', () => { expect(observableOfBlockInfo).to.be.equals(observableOfBlockInfo); const repositoryFactory = new (class RepositoryFactoryHttpForTest extends RepositoryFactoryHttp { - createNetworkRepository(): NetworkRepository { return instance(repositoryMock); } - })("http://localhost:3000"); + })('http://localhost:3000'); expect(counter).to.be.equals(0); - repositoryFactory.getNetworkType().subscribe(networkType => { + repositoryFactory.getNetworkType().subscribe((networkType) => { expect(counter).to.be.equals(1); expect(networkType).to.be.equals(expectedNetworkType); repositoryFactory.getNetworkType().subscribe(networkType => { expect(counter).to.be.equals(1); expect(networkType).to.be.equals(expectedNetworkType); done(); - }) - }) + }); + }); }); @@ -123,8 +122,8 @@ describe('RepositoryFactory', () => { const repositoryMock: NetworkRepository = mock(); - let expectedNetworkType = NetworkType.MIJIN_TEST; - const observableOfBlockInfo = observableOf(expectedNetworkType).pipe(map(v => { + const expectedNetworkType = NetworkType.MIJIN_TEST; + const observableOfBlockInfo = observableOf(expectedNetworkType).pipe(map((v) => { counter++; return v; })); @@ -137,18 +136,18 @@ describe('RepositoryFactory', () => { createNetworkRepository(): NetworkRepository { return instance(repositoryMock); } - })("http://localhost:3000", expectedNetworkType); + })('http://localhost:3000', expectedNetworkType); expect(counter).to.be.equals(0); - repositoryFactory.getNetworkType().subscribe(networkType => { + repositoryFactory.getNetworkType().subscribe((networkType) => { expect(counter).to.be.equals(0); expect(networkType).to.be.equals(expectedNetworkType); repositoryFactory.getNetworkType().subscribe(networkType => { expect(counter).to.be.equals(0); expect(networkType).to.be.equals(expectedNetworkType); done(); - }) - }) + }); + }); });