diff --git a/e2e/infrastructure/RestrictionHttp.spec.ts b/e2e/infrastructure/RestrictionHttp.spec.ts index 413e62e446..b63d2d0b62 100644 --- a/e2e/infrastructure/RestrictionHttp.spec.ts +++ b/e2e/infrastructure/RestrictionHttp.spec.ts @@ -15,7 +15,7 @@ */ import {deepEqual} from 'assert'; -import {assert} from 'chai'; +import {assert, expect} from 'chai'; import {AccountHttp} from '../../src/infrastructure/AccountHttp'; import { Listener, TransactionHttp } from '../../src/infrastructure/infrastructure'; import { RestrictionHttp } from '../../src/infrastructure/RestrictionHttp'; @@ -309,7 +309,7 @@ describe('RestrictionHttp', () => { it('should call getAccountRestrictions successfully', (done) => { setTimeout(() => { restrictionHttp.getAccountRestrictions(accountAddress).subscribe((accountRestrictions) => { - deepEqual(accountRestrictions.accountRestrictions.address, accountAddress); + expect(accountRestrictions.length).to.be.greaterThan(0); done(); }); }, 1000); @@ -320,7 +320,7 @@ describe('RestrictionHttp', () => { it('should call getAccountRestrictionsFromAccounts successfully', (done) => { setTimeout(() => { restrictionHttp.getAccountRestrictionsFromAccounts([accountAddress]).subscribe((accountRestrictions) => { - deepEqual(accountRestrictions[0]!.accountRestrictions.address, accountAddress); + deepEqual(accountRestrictions[0]!.address, accountAddress); done(); }); }, 1000); diff --git a/e2e/service/MetadataTransactionService.spec.ts b/e2e/service/MetadataTransactionService.spec.ts index dd88a4aadf..4e11e5cb66 100644 --- a/e2e/service/MetadataTransactionService.spec.ts +++ b/e2e/service/MetadataTransactionService.spec.ts @@ -206,7 +206,7 @@ describe('MetadataTransactionService', () => { NetworkType.MIJIN_TEST, MetadataType.Account, targetAccount.publicAccount, - key.toHex(), + key, newValue, targetAccount.publicAccount, ).subscribe((transaction: AccountMetadataTransaction) => { @@ -225,7 +225,7 @@ describe('MetadataTransactionService', () => { NetworkType.MIJIN_TEST, MetadataType.Mosaic, targetAccount.publicAccount, - key.toHex(), + key, newValue + 'delta', targetAccount.publicAccount, mosaicId, @@ -247,7 +247,7 @@ describe('MetadataTransactionService', () => { NetworkType.MIJIN_TEST, MetadataType.Namespace, targetAccount.publicAccount, - key.toHex(), + key, newValue + 'delta', targetAccount.publicAccount, namespaceId, @@ -280,7 +280,7 @@ describe('MetadataTransactionService', () => { NetworkType.MIJIN_TEST, MetadataType.Mosaic, targetAccount.publicAccount, - key.toHex(), + key, newValue + 'delta', targetAccount.publicAccount, mosaicId, diff --git a/e2e/service/MosaicService.spec.ts b/e2e/service/MosaicService.spec.ts index 540e264d48..59fa9e718b 100644 --- a/e2e/service/MosaicService.spec.ts +++ b/e2e/service/MosaicService.spec.ts @@ -1,4 +1,19 @@ -import { map, mergeMap, toArray } from 'rxjs/operators'; +/* + * Copyright 2019 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { AccountHttp } from '../../src/infrastructure/AccountHttp'; import { MosaicHttp } from '../../src/infrastructure/MosaicHttp'; import { Address } from '../../src/model/account/Address'; @@ -22,15 +37,17 @@ describe('MosaicService', () => { done(); }); }); - it('should return the mosaic list skipping the expired mosaics', () => { + it('should return the mosaic list skipping the expired mosaics', (done) => { const mosaicService = new MosaicService(accountHttp, mosaicHttp); const address = accountAddress; - return mosaicService.mosaicsAmountViewFromAddress(address).pipe( - mergeMap((_) => _), - map((mosaic) => console.log('You have', mosaic.relativeAmount(), mosaic.fullName())), - toArray(), - ).toPromise(); + return mosaicService.mosaicsAmountViewFromAddress(address).subscribe((amountViews) => { + const views = amountViews.map((v) => { + return {mosaicId: v.fullName(), amount: v.relativeAmount()}; + }); + console.log(views); + done(); + }); }); }); diff --git a/package-lock.json b/package-lock.json index cbad831d98..e601a56307 100644 --- a/package-lock.json +++ b/package-lock.json @@ -189,7 +189,8 @@ "@types/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" + "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==", + "dev": true }, "@types/mocha": { "version": "2.2.48", diff --git a/package.json b/package.json index ab5d4e7e91..026bb93a12 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@types/chai": "^4.0.4", "@types/crypto-js": "^3.1.43", "@types/lodash": "^4.14.85", + "@types/long": "^4.0.0", "@types/mocha": "^2.2.44", "@types/request": "^2.47.0", "@types/request-promise-native": "^1.0.14", @@ -55,7 +56,6 @@ "typescript-require": "^0.2.9-1" }, "dependencies": { - "@types/long": "^4.0.0", "bluebird": "^3.5.5", "crypto-js": "^3.1.9-1", "js-joda": "^1.6.2", diff --git a/src/core/format/KeyGenerator.ts b/src/core/format/KeyGenerator.ts new file mode 100644 index 0000000000..6bb813ec55 --- /dev/null +++ b/src/core/format/KeyGenerator.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2019 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { UInt64 } from '../../model/UInt64'; +import { sha3_256 } from 'js-sha3'; + +export class KeyGenerator { + /** + * Generate UInt64 from a string + * @param {string} input Input string + * @returns {UInt64} Deterministic uint64 value for the given string + */ + public static generateUInt64Key(input: string): UInt64 { + if (input.length === 0) { + throw Error(`Input must not be empty`); + } + const buf = sha3_256.arrayBuffer(input); + const result = new Uint32Array(buf); + return new UInt64([result[0], (result[1] | 0x80000000) >>> 0]); + } +} diff --git a/src/core/format/index.ts b/src/core/format/index.ts index 27fc8ea316..45d6ee1ca4 100644 --- a/src/core/format/index.ts +++ b/src/core/format/index.ts @@ -18,4 +18,5 @@ export * from './RawAddress'; export * from './RawArray'; export * from './Convert'; export * from './IdGenerator'; +export * from './KeyGenerator'; export * from './RawUInt64'; diff --git a/src/infrastructure/AccountHttp.ts b/src/infrastructure/AccountHttp.ts index 7f8c77d040..467eca76c2 100644 --- a/src/infrastructure/AccountHttp.ts +++ b/src/infrastructure/AccountHttp.ts @@ -145,7 +145,7 @@ export class AccountHttp extends Http implements AccountRepository { }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -166,7 +166,7 @@ export class AccountHttp extends Http implements AccountRepository { ); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } /** @@ -190,7 +190,7 @@ export class AccountHttp extends Http implements AccountRepository { .map((multisigAccount) => PublicAccount.createFromPublicKey(multisigAccount, networkType)), ); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ))); } @@ -223,7 +223,7 @@ export class AccountHttp extends Http implements AccountRepository { }); return new MultisigAccountGraphInfo(multisigAccounts); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ))); } @@ -245,7 +245,7 @@ export class AccountHttp extends Http implements AccountRepository { return CreateTransactionFromDTO(transactionDTO); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -268,7 +268,7 @@ export class AccountHttp extends Http implements AccountRepository { return CreateTransactionFromDTO(transactionDTO); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -291,7 +291,7 @@ export class AccountHttp extends Http implements AccountRepository { return CreateTransactionFromDTO(transactionDTO); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -315,7 +315,7 @@ export class AccountHttp extends Http implements AccountRepository { return CreateTransactionFromDTO(transactionDTO); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -338,7 +338,7 @@ export class AccountHttp extends Http implements AccountRepository { return CreateTransactionFromDTO(transactionDTO) as AggregateTransaction; }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } } diff --git a/src/infrastructure/Http.ts b/src/infrastructure/Http.ts index 7df9e615ae..38c5726d3d 100644 --- a/src/infrastructure/Http.ts +++ b/src/infrastructure/Http.ts @@ -59,10 +59,11 @@ export abstract class Http { } errorHandling(error: any): Error { - if (error.response && error.response.statusCode && error.response.body) { + if (error.response && error.response.statusCode && error.body) { const formattedError = { statusCode: error.response.statusCode, - errorDetails: error.response.body, + errorDetails: error.response, + body: error.body, }; return new Error(JSON.stringify(formattedError)); } diff --git a/src/infrastructure/MetadataHttp.ts b/src/infrastructure/MetadataHttp.ts index bb6579bb73..b0cf337628 100644 --- a/src/infrastructure/MetadataHttp.ts +++ b/src/infrastructure/MetadataHttp.ts @@ -72,7 +72,7 @@ export class MetadataHttp extends Http implements MetadataRepository { return this.buildMetadata(metadataEntry); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -91,7 +91,7 @@ export class MetadataHttp extends Http implements MetadataRepository { return this.buildMetadata(metadataEntry); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -109,7 +109,7 @@ export class MetadataHttp extends Http implements MetadataRepository { const metadataDTO = response.body; return this.buildMetadata(metadataDTO); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -131,7 +131,7 @@ export class MetadataHttp extends Http implements MetadataRepository { return this.buildMetadata(metadataEntry); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -150,7 +150,7 @@ export class MetadataHttp extends Http implements MetadataRepository { return this.buildMetadata(metadataEntry); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -168,7 +168,7 @@ export class MetadataHttp extends Http implements MetadataRepository { const metadataDTO = response.body; return this.buildMetadata(metadataDTO); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -190,7 +190,7 @@ export class MetadataHttp extends Http implements MetadataRepository { return this.buildMetadata(metadataEntry); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -209,7 +209,7 @@ export class MetadataHttp extends Http implements MetadataRepository { return this.buildMetadata(metadataEntry); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -227,7 +227,7 @@ export class MetadataHttp extends Http implements MetadataRepository { const metadataDTO = response.body; return this.buildMetadata(metadataDTO); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } diff --git a/src/infrastructure/NamespaceHttp.ts b/src/infrastructure/NamespaceHttp.ts index 0db370965a..3d674a8769 100644 --- a/src/infrastructure/NamespaceHttp.ts +++ b/src/infrastructure/NamespaceHttp.ts @@ -270,9 +270,9 @@ export class NamespaceHttp extends Http implements NamespaceRepository { */ private extractAlias(namespace: any): Alias { if (namespace.alias && namespace.alias.type === AliasType.Mosaic) { - return new MosaicAlias(namespace.alias.type, namespace.alias.mosaicId); + return new MosaicAlias(namespace.alias.mosaicId); } else if (namespace.alias && namespace.alias.type === AliasType.Address) { - return new AddressAlias(namespace.alias.type, namespace.alias.address); + return new AddressAlias(namespace.alias.address); } return new EmptyAlias(); diff --git a/src/infrastructure/NetworkHttp.ts b/src/infrastructure/NetworkHttp.ts index a635710304..243f11236b 100644 --- a/src/infrastructure/NetworkHttp.ts +++ b/src/infrastructure/NetworkHttp.ts @@ -18,9 +18,10 @@ import { ClientResponse } from 'http'; import {from as observableFrom, Observable, throwError} from 'rxjs'; import {catchError, map} from 'rxjs/operators'; import {NetworkType} from '../model/blockchain/NetworkType'; -import { NetworkRoutesApi, NetworkTypeDTO } from './api'; +import { NodeInfo } from '../model/node/NodeInfo'; import {Http} from './Http'; import {NetworkRepository} from './NetworkRepository'; +import { NodeHttp } from './NodeHttp'; /** * Network http repository. @@ -32,7 +33,7 @@ export class NetworkHttp extends Http implements NetworkRepository { * @internal * Nem2 Library account routes api */ - private networkRoutesApi: NetworkRoutesApi; + private nodeHttp: NodeHttp; /** * Constructor @@ -40,7 +41,7 @@ export class NetworkHttp extends Http implements NetworkRepository { */ constructor(url: string) { super(); - this.networkRoutesApi = new NetworkRoutesApi(url); + this.nodeHttp = new NodeHttp(url); } @@ -50,16 +51,11 @@ export class NetworkHttp extends Http implements NetworkRepository { * @return network type enum. */ public getNetworkType(): Observable { - return observableFrom(this.networkRoutesApi.getNetworkType()).pipe( - map((response: { response: ClientResponse; body: NetworkTypeDTO; } ) => { - const networkTypeDTO = response.body; - if (networkTypeDTO.name === 'mijinTest') { - return NetworkType.MIJIN_TEST; - } else { - throw new Error('network ' + networkTypeDTO.name + ' is not supported yet by the sdk'); - } + return observableFrom(this.nodeHttp.getNodeInfo()).pipe( + map(((nodeInfo: NodeInfo) => { + return nodeInfo.networkIdentifier; }), - catchError((error) => throwError(this.errorHandling(error))), + catchError((error) => throwError(this.errorHandling(error)))), ); } } diff --git a/src/infrastructure/RestrictionHttp.ts b/src/infrastructure/RestrictionHttp.ts index 5911b43731..36bc268cbb 100644 --- a/src/infrastructure/RestrictionHttp.ts +++ b/src/infrastructure/RestrictionHttp.ts @@ -20,6 +20,8 @@ import {catchError, map} from 'rxjs/operators'; import { DtoMapping } from '../core/utils/DtoMapping'; import { Address } from '../model/account/Address'; import { MosaicId } from '../model/mosaic/MosaicId'; +import { AccountRestriction } from '../model/restriction/AccountRestriction'; +import { AccountRestrictions } from '../model/restriction/AccountRestrictions'; import { AccountRestrictionsInfo } from '../model/restriction/AccountRestrictionsInfo'; import { MosaicAddressRestriction } from '../model/restriction/MosaicAddressRestriction'; import { MosaicGlobalRestriction } from '../model/restriction/MosaicGlobalRestriction'; @@ -55,13 +57,13 @@ export class RestrictionHttp extends Http implements RestrictionRepository { /** * Get Account restrictions. * @param publicAccount public account - * @returns Observable + * @returns Observable */ - public getAccountRestrictions(address: Address): Observable { + public getAccountRestrictions(address: Address): Observable { return observableFrom(this.restrictionRoutesApi.getAccountRestrictions(address.plain())) .pipe(map((response: { response: ClientResponse; body: AccountRestrictionsInfoDTO; }) => { const accountRestrictions = response.body; - return DtoMapping.extractAccountRestrictionFromDto(accountRestrictions); + return DtoMapping.extractAccountRestrictionFromDto(accountRestrictions).accountRestrictions.restrictions; }), catchError((error) => throwError(this.errorHandling(error))), ); @@ -72,7 +74,7 @@ export class RestrictionHttp extends Http implements RestrictionRepository { * @param address list of addresses * @returns Observable */ - public getAccountRestrictionsFromAccounts(addresses: Address[]): Observable { + public getAccountRestrictionsFromAccounts(addresses: Address[]): Observable { const accountIds = { addresses: addresses.map((address) => address.plain()), }; @@ -81,10 +83,10 @@ export class RestrictionHttp extends Http implements RestrictionRepository { .pipe(map((response: { response: ClientResponse; body: AccountRestrictionsInfoDTO[]; }) => { const accountRestrictions = response.body; return accountRestrictions.map((restriction) => { - return DtoMapping.extractAccountRestrictionFromDto(restriction); + return DtoMapping.extractAccountRestrictionFromDto(restriction).accountRestrictions; }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -112,7 +114,7 @@ export class RestrictionHttp extends Http implements RestrictionRepository { restirctionItems, ); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -145,7 +147,7 @@ export class RestrictionHttp extends Http implements RestrictionRepository { ); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -175,7 +177,7 @@ export class RestrictionHttp extends Http implements RestrictionRepository { restirctionItems, ); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } @@ -210,7 +212,7 @@ export class RestrictionHttp extends Http implements RestrictionRepository { ); }); }), - catchError((error) => throwError(error)), + catchError((error) => throwError(this.errorHandling(error))), ); } } diff --git a/src/infrastructure/RestrictionRepository.ts b/src/infrastructure/RestrictionRepository.ts index b0844b6123..21430e30ad 100644 --- a/src/infrastructure/RestrictionRepository.ts +++ b/src/infrastructure/RestrictionRepository.ts @@ -17,7 +17,8 @@ import { Observable } from 'rxjs/internal/Observable'; import { Address } from '../model/account/Address'; import { MosaicId } from '../model/mosaic/MosaicId'; -import { AccountRestrictionsInfo } from '../model/restriction/AccountRestrictionsInfo'; +import { AccountRestriction } from '../model/restriction/AccountRestriction'; +import { AccountRestrictions } from '../model/restriction/AccountRestrictions'; import { MosaicAddressRestriction } from '../model/restriction/MosaicAddressRestriction'; import { MosaicGlobalRestriction } from '../model/restriction/MosaicGlobalRestriction'; @@ -27,14 +28,14 @@ export interface RestrictionRepository { * @param address list of addresses * @returns Observable */ - getAccountRestrictions(address: Address): Observable; + getAccountRestrictions(address: Address): Observable; /** * Gets Account restrictions. * @param addresses list of addresses * @returns Observable */ - getAccountRestrictionsFromAccounts(addresses: Address[]): Observable; + getAccountRestrictionsFromAccounts(addresses: Address[]): Observable; /** * Get mosaic address restriction. diff --git a/src/infrastructure/TransactionHttp.ts b/src/infrastructure/TransactionHttp.ts index a374d53975..3d4612a923 100644 --- a/src/infrastructure/TransactionHttp.ts +++ b/src/infrastructure/TransactionHttp.ts @@ -146,7 +146,7 @@ export class TransactionHttp extends Http implements TransactionRepository { transactionStatusDTO.height ? UInt64.fromNumericString(transactionStatusDTO.height) : undefined); }); }), - catchError((error) => throwError(error.error.errorMessage)), + catchError((error) => throwError(this.errorHandling(error))), ); } diff --git a/src/infrastructure/api/accountRoutesApi.ts b/src/infrastructure/api/accountRoutesApi.ts index 9d8cebf513..d440913bae 100644 --- a/src/infrastructure/api/accountRoutesApi.ts +++ b/src/infrastructure/api/accountRoutesApi.ts @@ -142,7 +142,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -201,7 +201,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -260,7 +260,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } reject(); @@ -316,7 +316,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -370,7 +370,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -444,7 +444,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -518,7 +518,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -592,7 +592,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -666,7 +666,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -740,7 +740,7 @@ export class AccountRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/blockRoutesApi.ts b/src/infrastructure/api/blockRoutesApi.ts index ede899ea08..1eb62222ec 100644 --- a/src/infrastructure/api/blockRoutesApi.ts +++ b/src/infrastructure/api/blockRoutesApi.ts @@ -140,7 +140,7 @@ export class BlockRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -199,7 +199,7 @@ export class BlockRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -273,7 +273,7 @@ export class BlockRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -339,7 +339,7 @@ export class BlockRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -405,7 +405,7 @@ export class BlockRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -471,7 +471,7 @@ export class BlockRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/chainRoutesApi.ts b/src/infrastructure/api/chainRoutesApi.ts index 6e77b5f302..6a8ab5ae84 100644 --- a/src/infrastructure/api/chainRoutesApi.ts +++ b/src/infrastructure/api/chainRoutesApi.ts @@ -130,7 +130,7 @@ export class ChainRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -182,7 +182,7 @@ export class ChainRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/diagnosticRoutesApi.ts b/src/infrastructure/api/diagnosticRoutesApi.ts index 04202bdb99..be10a44b8d 100644 --- a/src/infrastructure/api/diagnosticRoutesApi.ts +++ b/src/infrastructure/api/diagnosticRoutesApi.ts @@ -130,7 +130,7 @@ export class DiagnosticRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -182,7 +182,7 @@ export class DiagnosticRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/metadataRoutesApi.ts b/src/infrastructure/api/metadataRoutesApi.ts index 2fcfec267a..f5ba8e87b6 100644 --- a/src/infrastructure/api/metadataRoutesApi.ts +++ b/src/infrastructure/api/metadataRoutesApi.ts @@ -152,7 +152,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -218,7 +218,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -291,7 +291,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -365,7 +365,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -431,7 +431,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -504,7 +504,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -578,7 +578,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -644,7 +644,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -717,7 +717,7 @@ export class MetadataRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/mosaicRoutesApi.ts b/src/infrastructure/api/mosaicRoutesApi.ts index d2aaf9a447..b4c762e69a 100644 --- a/src/infrastructure/api/mosaicRoutesApi.ts +++ b/src/infrastructure/api/mosaicRoutesApi.ts @@ -139,7 +139,7 @@ export class MosaicRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -198,7 +198,7 @@ export class MosaicRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -257,7 +257,7 @@ export class MosaicRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/namespaceRoutesApi.ts b/src/infrastructure/api/namespaceRoutesApi.ts index 1e93cfd9c5..861a0cfc72 100644 --- a/src/infrastructure/api/namespaceRoutesApi.ts +++ b/src/infrastructure/api/namespaceRoutesApi.ts @@ -140,7 +140,7 @@ export class NamespaceRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -209,7 +209,7 @@ export class NamespaceRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -263,7 +263,7 @@ export class NamespaceRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -322,7 +322,7 @@ export class NamespaceRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/networkRoutesApi.ts b/src/infrastructure/api/networkRoutesApi.ts index 2e7313d969..36733adcb1 100644 --- a/src/infrastructure/api/networkRoutesApi.ts +++ b/src/infrastructure/api/networkRoutesApi.ts @@ -129,7 +129,7 @@ export class NetworkRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/nodeRoutesApi.ts b/src/infrastructure/api/nodeRoutesApi.ts index bcc8ce0be6..2881a53d3c 100644 --- a/src/infrastructure/api/nodeRoutesApi.ts +++ b/src/infrastructure/api/nodeRoutesApi.ts @@ -130,7 +130,7 @@ export class NodeRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -182,7 +182,7 @@ export class NodeRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/restrictionRoutesApi.ts b/src/infrastructure/api/restrictionRoutesApi.ts index 79d66cb2ba..dbe7626f8c 100644 --- a/src/infrastructure/api/restrictionRoutesApi.ts +++ b/src/infrastructure/api/restrictionRoutesApi.ts @@ -141,7 +141,7 @@ export class RestrictionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -195,7 +195,7 @@ export class RestrictionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -261,7 +261,7 @@ export class RestrictionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -322,7 +322,7 @@ export class RestrictionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -381,7 +381,7 @@ export class RestrictionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -440,7 +440,7 @@ export class RestrictionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/api/transactionRoutesApi.ts b/src/infrastructure/api/transactionRoutesApi.ts index 5a6d7a9a91..480064a10d 100644 --- a/src/infrastructure/api/transactionRoutesApi.ts +++ b/src/infrastructure/api/transactionRoutesApi.ts @@ -143,7 +143,7 @@ export class TransactionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -202,7 +202,7 @@ export class TransactionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -261,7 +261,7 @@ export class TransactionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -320,7 +320,7 @@ export class TransactionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -379,7 +379,7 @@ export class TransactionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -438,7 +438,7 @@ export class TransactionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); @@ -497,7 +497,7 @@ export class TransactionRoutesApi { reject({ response: { statusCode: response.statusCode, statusMessage: response.statusMessage, - }, body }); + }, body: response.body }); } } }); diff --git a/src/infrastructure/receipt/CreateReceiptFromDTO.ts b/src/infrastructure/receipt/CreateReceiptFromDTO.ts index ef497b771b..27632d9070 100644 --- a/src/infrastructure/receipt/CreateReceiptFromDTO.ts +++ b/src/infrastructure/receipt/CreateReceiptFromDTO.ts @@ -96,7 +96,7 @@ const createResolutionStatement = (statementDTO, resolutionType): ResolutionStat UInt64.fromNumericString(statementDTO.height), Address.createFromEncoded(statementDTO.unresolved), statementDTO.resolutionEntries.map((entry) => { - return new ResolutionEntry(new AddressAlias(AliasType.Address, Address.createFromEncoded(entry.resolved)), + return new ResolutionEntry(new AddressAlias(Address.createFromEncoded(entry.resolved)), new ReceiptSource(entry.source.primaryId, entry.source.secondaryId)); }), ); @@ -105,7 +105,7 @@ const createResolutionStatement = (statementDTO, resolutionType): ResolutionStat UInt64.fromNumericString(statementDTO.height), new MosaicId(statementDTO.unresolved), statementDTO.resolutionEntries.map((entry) => { - return new ResolutionEntry(new MosaicAlias(AliasType.Mosaic, new MosaicId(entry.resolved)), + return new ResolutionEntry(new MosaicAlias(new MosaicId(entry.resolved)), new ReceiptSource(entry.source.primaryId, entry.source.secondaryId)); }), ); diff --git a/src/infrastructure/transaction/CreateTransactionFromDTO.ts b/src/infrastructure/transaction/CreateTransactionFromDTO.ts index 4a036bdda9..815ced74e8 100644 --- a/src/infrastructure/transaction/CreateTransactionFromDTO.ts +++ b/src/infrastructure/transaction/CreateTransactionFromDTO.ts @@ -495,7 +495,7 @@ export const extractMosaics = (mosaics: any): Mosaic[] => { return mosaics.map((mosaicDTO) => { // convert ID to UInt8 bytes array and get first byte (most significant byte) - const bytes = convert.hexToUint8(mosaicDTO.id).reverse(); + const bytes = convert.hexToUint8(mosaicDTO.id); const byte0 = bytes[0]; // if most significant bit of byte 0 is set, then we have a namespaceId diff --git a/src/model/namespace/AddressAlias.ts b/src/model/namespace/AddressAlias.ts index de1aade68c..4838350c14 100644 --- a/src/model/namespace/AddressAlias.ts +++ b/src/model/namespace/AddressAlias.ts @@ -15,28 +15,24 @@ */ import {Address} from '../account/Address'; import {Alias} from './Alias'; +import { AliasType } from './AliasType'; /** * The AddressAlias structure describes address aliases * * @since 0.10.2 */ -export class AddressAlias implements Alias { +export class AddressAlias extends Alias { /** * Create AddressAlias object - * - * @param type * @param content */ constructor(/** - * The alias type - */ - public readonly type: number, - /** * The alias address */ public readonly address: Address) { + super(AliasType.Address, address, undefined); } /** diff --git a/src/model/namespace/Alias.ts b/src/model/namespace/Alias.ts index b05262610a..1413bf4d42 100644 --- a/src/model/namespace/Alias.ts +++ b/src/model/namespace/Alias.ts @@ -17,27 +17,42 @@ import {Address} from '../account/Address'; import {MosaicId} from '../mosaic/MosaicId'; /** - * The alias structure defines an interface for Aliases + * Abtract class for Aliases * * @since 0.10.2 */ -export interface Alias { +export abstract class Alias { /** - * The alias type - * - * - 0 : No alias - * - 1 : Mosaic id alias - * - 2 : Address alias + * @internal + * @param type - Alias type + * @param address - Address for AddressAlias + * @param mosaicId - MosaicId for MosaicAlias */ - readonly type: number; + constructor( + /** + * The alias type + * + * - 0 : No alias + * - 1 : Mosaic id alias + * - 2 : Address alias + */ + public readonly type: number, - /** - * The alias address - */ - readonly address?: Address; + /** + * The alias address + */ + public readonly address?: Address, + + /** + * The alias mosaicId + */ + public readonly mosaicId?: MosaicId) { + } /** - * The alias mosaicId + * @internal + * Compares alias for equality. + * @param alias - MosaicAlias */ - readonly mosaicId?: MosaicId; + protected abstract equals(alias: any): boolean; } diff --git a/src/model/namespace/EmptyAlias.ts b/src/model/namespace/EmptyAlias.ts index 35e625f63e..a0fd1fcf9e 100644 --- a/src/model/namespace/EmptyAlias.ts +++ b/src/model/namespace/EmptyAlias.ts @@ -14,13 +14,14 @@ * limitations under the License. */ import {Alias} from './Alias'; +import { AliasType } from './AliasType'; /** * The EmptyAlias structure describes empty aliases (type:0) * * @since 0.10.2 */ -export class EmptyAlias implements Alias { +export class EmptyAlias extends Alias { /** * The alias type */ @@ -33,7 +34,7 @@ export class EmptyAlias implements Alias { * @param content */ constructor() { - this.type = 0; + super(AliasType.None); } /** diff --git a/src/model/namespace/MosaicAlias.ts b/src/model/namespace/MosaicAlias.ts index c49640016c..3af0f6a893 100644 --- a/src/model/namespace/MosaicAlias.ts +++ b/src/model/namespace/MosaicAlias.ts @@ -15,28 +15,24 @@ */ import {MosaicId} from '../mosaic/MosaicId'; import {Alias} from './Alias'; +import { AliasType } from './AliasType'; /** * The MosaicAlias structure describe mosaic aliases * * @since 0.10.2 */ -export class MosaicAlias implements Alias { +export class MosaicAlias extends Alias { /** * Create AddressAlias object - * - * @param type * @param mosaicId */ constructor(/** - * The alias type - */ - public readonly type: number, - /** * The alias address */ public readonly mosaicId: MosaicId) { + super(AliasType.Mosaic, undefined, mosaicId); } /** diff --git a/src/service/MetadataTransactionService.ts b/src/service/MetadataTransactionService.ts index f6763de7e3..b0d008e382 100644 --- a/src/service/MetadataTransactionService.ts +++ b/src/service/MetadataTransactionService.ts @@ -60,7 +60,7 @@ export class MetadataTransactionService { networkType: NetworkType, metadataType: MetadataType, targetPublicAccount: PublicAccount, - key: string, + key: UInt64, value: string, senderPublicAccount: PublicAccount, targetId?: MosaicId | NamespaceId, @@ -123,19 +123,19 @@ export class MetadataTransactionService { private createAccountMetadataTransaction(deadline: Deadline, networkType: NetworkType, targetPublicKey: string, - key: string, + key: UInt64, value: string, senderPublicKey: string, maxFee: UInt64): Observable { return this.metadataHttp.getAccountMetadataByKeyAndSender(Address.createFromPublicKey(targetPublicKey, networkType), - key, senderPublicKey) + key.toHex(), senderPublicKey) .pipe(map((metadata: Metadata) => { const currentValueByte = Convert.utf8ToUint8(metadata.metadataEntry.value); const newValueBytes = Convert.utf8ToUint8(value); return AccountMetadataTransaction.create( deadline, targetPublicKey, - UInt64.fromHex(key), + key, newValueBytes.length - currentValueByte.length, value, networkType, @@ -148,7 +148,7 @@ export class MetadataTransactionService { return of(AccountMetadataTransaction.create( deadline, targetPublicKey, - UInt64.fromHex(key), + key, newValueBytes.length, value, networkType, @@ -175,19 +175,19 @@ export class MetadataTransactionService { networkType: NetworkType, targetPublicKey: string, mosaicId: MosaicId, - key: string, + key: UInt64, value: string, senderPublicKey: string, maxFee: UInt64): Observable { return this.metadataHttp.getMosaicMetadataByKeyAndSender(mosaicId, - key, senderPublicKey) + key.toHex(), senderPublicKey) .pipe(map((metadata: Metadata) => { const currentValueByte = Convert.utf8ToUint8(metadata.metadataEntry.value); const newValueBytes = Convert.utf8ToUint8(value); return MosaicMetadataTransaction.create( deadline, targetPublicKey, - UInt64.fromHex(key), + key, mosaicId, newValueBytes.length - currentValueByte.length, value, @@ -201,7 +201,7 @@ export class MetadataTransactionService { return of(MosaicMetadataTransaction.create( deadline, targetPublicKey, - UInt64.fromHex(key), + key, mosaicId, newValueBytes.length, value, @@ -229,19 +229,19 @@ export class MetadataTransactionService { networkType: NetworkType, targetPublicKey: string, namespaceId: NamespaceId, - key: string, + key: UInt64, value: string, senderPublicKey: string, maxFee: UInt64): Observable { return this.metadataHttp.getNamespaceMetadataByKeyAndSender(namespaceId, - key, senderPublicKey) + key.toHex(), senderPublicKey) .pipe(map((metadata: Metadata) => { const currentValueByte = Convert.utf8ToUint8(metadata.metadataEntry.value); const newValueBytes = Convert.utf8ToUint8(value); return NamespaceMetadataTransaction.create( deadline, targetPublicKey, - UInt64.fromHex(key), + key, namespaceId, newValueBytes.length - currentValueByte.length, value, @@ -255,7 +255,7 @@ export class MetadataTransactionService { return of(NamespaceMetadataTransaction.create( deadline, targetPublicKey, - UInt64.fromHex(key), + key, namespaceId, newValueBytes.length, value, diff --git a/src/service/MosaicService.ts b/src/service/MosaicService.ts index d2550d20b5..eedc30e81d 100644 --- a/src/service/MosaicService.ts +++ b/src/service/MosaicService.ts @@ -15,10 +15,9 @@ */ import { Observable, of as observableOf } from 'rxjs'; -import { filter, first, map, mergeMap, take, toArray } from 'rxjs/operators'; +import { map, mergeMap, toArray } from 'rxjs/operators'; import { AccountHttp } from '../infrastructure/AccountHttp'; import { MosaicHttp } from '../infrastructure/MosaicHttp'; -import { NamespaceHttp } from '../infrastructure/NamespaceHttp'; import { Address } from '../model/account/Address'; import { MosaicInfo } from '../model/model'; import { Mosaic } from '../model/mosaic/Mosaic'; @@ -62,14 +61,20 @@ export class MosaicService { * @returns {Observable} */ mosaicsAmountView(mosaics: Mosaic[]): Observable { - return observableOf(mosaics).pipe( - mergeMap((_) => _), - mergeMap((mosaic: Mosaic) => this.mosaicsView([new MosaicId(mosaic.id.id.toDTO())]).pipe( - filter((_) => _.length !== 0), - map((mosaicViews) => { - return new MosaicAmountView(mosaicViews[0].mosaicInfo, mosaic.amount); - }), - toArray()))); + const mosaicIds = mosaics.map((mosaic) => { + return new MosaicId(mosaic.id.toHex()); + }); + return this.mosaicsView(mosaicIds).pipe( + map((mosaicViews) => { + const results: MosaicAmountView[] = []; + mosaicViews.forEach((view) => { + const mosaic = mosaics.find((m) => m.id.toHex() === view.mosaicInfo.id.toHex()); + if (mosaic) { + results.push(new MosaicAmountView(view.mosaicInfo, mosaic.amount)); + } + }); + return results; + })); } /** diff --git a/test/core/format/KeyGenerator.spec.ts b/test/core/format/KeyGenerator.spec.ts new file mode 100644 index 0000000000..23c4749eb5 --- /dev/null +++ b/test/core/format/KeyGenerator.spec.ts @@ -0,0 +1,39 @@ +/* + * Copyright 2019 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { expect } from 'chai'; +import { UInt64 } from '../../../src/model/UInt64'; +import { KeyGenerator } from '../../../src/core/format/KeyGenerator'; + +describe('key generator', () => { + describe('generate key from string', () => { + it('throws if input is empty', () => { + expect(() => KeyGenerator.generateUInt64Key('')).to.throw(Error, 'Input must not be empty'); + }) + it('returns UInt64', () => { + expect(KeyGenerator.generateUInt64Key('a')).to.be.instanceOf(UInt64); + }) + it('generates correct keys', () => { + expect(KeyGenerator.generateUInt64Key('a').toHex()).to.equal('F524A0FBF24B0880'); + }) + it('generates keys deterministically', () => { + expect(KeyGenerator.generateUInt64Key('abc').toHex()).to.equal('B225E24FA75D983A'); + expect(KeyGenerator.generateUInt64Key('abc').toHex()).to.equal('B225E24FA75D983A'); + expect(KeyGenerator.generateUInt64Key('def').toHex()).to.equal('B0AC5222678F0D8E'); + expect(KeyGenerator.generateUInt64Key('def').toHex()).to.equal('B0AC5222678F0D8E'); + expect(KeyGenerator.generateUInt64Key('abc').toHex()).to.equal('B225E24FA75D983A'); + }) + }) +}); diff --git a/test/model/namespace/Alias.spec.ts b/test/model/namespace/Alias.spec.ts index 4702c23b82..996e64ef1c 100644 --- a/test/model/namespace/Alias.spec.ts +++ b/test/model/namespace/Alias.spec.ts @@ -55,30 +55,30 @@ describe('Alias', () => { }); it('should create a AddressAlias object', () => { - const alias = new AddressAlias(addressAliasDTO.type, addressAliasDTO.address); + const alias = new AddressAlias( addressAliasDTO.address); expect(alias.type).to.be.equal(AliasType.Address); expect(alias.address).to.be.equal(addressAliasDTO.address); }); it('should create a MosaicAlias object', () => { - const alias = new MosaicAlias(mosaicAliasDTO.type, mosaicAliasDTO.mosaicId); + const alias = new MosaicAlias(mosaicAliasDTO.mosaicId); expect(alias.type).to.be.equal(AliasType.Mosaic); expect(alias.mosaicId).to.be.equal(mosaicAliasDTO.mosaicId); }); it('should compare addresses in AddressAlias.equals()', () => { - const alias1 = new AddressAlias(addressAliasDTO.type, addressAliasDTO.address); - const alias2 = new AddressAlias(addressAliasDTO.type, addressAliasDTO.address); - const alias3 = new AddressAlias(addressAliasDTO.type, address2); + const alias1 = new AddressAlias(addressAliasDTO.address); + const alias2 = new AddressAlias(addressAliasDTO.address); + const alias3 = new AddressAlias(address2); expect(alias1.equals(alias2)).to.be.equal(true); expect(alias1.equals(alias3)).to.be.equal(false); }); it('should compare mosaicIds in MosaicAlias.equals()', () => { - const alias1 = new MosaicAlias(mosaicAliasDTO.type, mosaicAliasDTO.mosaicId); - const alias2 = new MosaicAlias(mosaicAliasDTO.type, mosaicAliasDTO.mosaicId); - const alias3 = new MosaicAlias(mosaicAliasDTO.type, new MosaicId([481110498, 231112637])); + const alias1 = new MosaicAlias(mosaicAliasDTO.mosaicId); + const alias2 = new MosaicAlias(mosaicAliasDTO.mosaicId); + const alias3 = new MosaicAlias(new MosaicId([481110498, 231112637])); expect(alias1.equals(alias2)).to.be.equal(true); expect(alias1.equals(alias3)).to.be.equal(false); diff --git a/test/model/receipt/Receipt.spec.ts b/test/model/receipt/Receipt.spec.ts index 20f07c685d..290115f69f 100644 --- a/test/model/receipt/Receipt.spec.ts +++ b/test/model/receipt/Receipt.spec.ts @@ -287,7 +287,7 @@ describe('Receipt', () => { statementDto.statement.height, new MosaicId(statementDto.statement.unresolved), statementDto.statement.resolutionEntries.map((resolved) => { - return new ResolutionEntry(new MosaicAlias(AliasType.Mosaic, new MosaicId(resolved.resolved)), + return new ResolutionEntry(new MosaicAlias(new MosaicId(resolved.resolved)), new ReceiptSource( resolved.source.primaryId, resolved.source.secondaryId)); }), ); @@ -301,7 +301,7 @@ describe('Receipt', () => { statementDto.statement.height, Address.createFromEncoded(statementDto.statement.unresolved), statementDto.statement.resolutionEntries.map((resolved) => { - return new ResolutionEntry(new AddressAlias(AliasType.Address, Address.createFromEncoded(resolved.resolved)), + return new ResolutionEntry(new AddressAlias(Address.createFromEncoded(resolved.resolved)), new ReceiptSource( resolved.source.primaryId, resolved.source.secondaryId)); }), ); diff --git a/test/service/MetadataTransactionservice.spec.ts b/test/service/MetadataTransactionservice.spec.ts index aedc45b901..50103111e7 100644 --- a/test/service/MetadataTransactionservice.spec.ts +++ b/test/service/MetadataTransactionservice.spec.ts @@ -37,7 +37,7 @@ import { TestingAccount } from '../conf/conf.spec'; describe('MetadataTransactionService', () => { let account: Account; let metadataTransactionService: MetadataTransactionService; - const key = '85BBEA6CC462B244'; + const key = UInt64.fromHex('85BBEA6CC462B244'); const value = 'TEST'; const deltaValue = 'dalta'; const targetIdHex = '941299B2B7E1291C'; @@ -47,13 +47,13 @@ describe('MetadataTransactionService', () => { const mockMetadataHttp = mock(MetadataHttp); when(mockMetadataHttp - .getAccountMetadataByKeyAndSender(deepEqual(account.address), key, account.publicKey)) + .getAccountMetadataByKeyAndSender(deepEqual(account.address), key.toHex(), account.publicKey)) .thenReturn(observableOf(mockMetadata(MetadataType.Account))); when(mockMetadataHttp - .getMosaicMetadataByKeyAndSender(deepEqual(new MosaicId(targetIdHex)), key, account.publicKey)) + .getMosaicMetadataByKeyAndSender(deepEqual(new MosaicId(targetIdHex)), key.toHex(), account.publicKey)) .thenReturn(observableOf(mockMetadata(MetadataType.Mosaic))); when(mockMetadataHttp - .getNamespaceMetadataByKeyAndSender(deepEqual(NamespaceId.createFromEncoded(targetIdHex)), key, account.publicKey)) + .getNamespaceMetadataByKeyAndSender(deepEqual(NamespaceId.createFromEncoded(targetIdHex)), key.toHex(), account.publicKey)) .thenReturn(observableOf(mockMetadata(MetadataType.Namespace))); const metadataHttp = instance(mockMetadataHttp); metadataTransactionService = new MetadataTransactionService(metadataHttp); @@ -69,7 +69,7 @@ describe('MetadataTransactionService', () => { account.publicAccount) .subscribe((transaction: AccountMetadataTransaction) => { expect(transaction.type).to.be.equal(TransactionType.ACCOUNT_METADATA_TRANSACTION); - expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key); + expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key.toHex()); expect(transaction.value).to.be.equal(value + deltaValue); expect(transaction.valueSizeDelta).to.be.equal(deltaValue.length); expect(transaction.targetPublicKey).to.be.equal(account.publicKey); @@ -88,7 +88,7 @@ describe('MetadataTransactionService', () => { new MosaicId(targetIdHex)) .subscribe((transaction: MosaicMetadataTransaction) => { expect(transaction.type).to.be.equal(TransactionType.MOSAIC_METADATA_TRANSACTION); - expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key); + expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key.toHex()); expect(transaction.value).to.be.equal(value + deltaValue); expect(transaction.targetMosaicId.toHex()).to.be.equal(targetIdHex); expect(transaction.valueSizeDelta).to.be.equal(deltaValue.length); @@ -108,7 +108,7 @@ describe('MetadataTransactionService', () => { NamespaceId.createFromEncoded(targetIdHex)) .subscribe((transaction: NamespaceMetadataTransaction) => { expect(transaction.type).to.be.equal(TransactionType.NAMESPACE_METADATA_TRANSACTION); - expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key); + expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key.toHex()); expect(transaction.value).to.be.equal(value + deltaValue); expect(transaction.targetNamespaceId.toHex()).to.be.equal(targetIdHex); expect(transaction.valueSizeDelta).to.be.equal(deltaValue.length); @@ -169,7 +169,7 @@ describe('MetadataTransactionService', () => { '5E628EA59818D97AA4118780D9A88C5512FCE7A21C195E1574727EFCE5DF7C0D', account.publicKey, account.publicKey, - UInt64.fromHex(key), + key, MetadataType.Account, 4, value,