PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-icp/test/unit

Просмотр файла: transaction.ts

import { Transaction } from '../../src';
import { coins } from '@bitgo/statics';
import assert from 'assert';
import should from 'should';
import { Utils } from '../../src/lib/utils';
import { InvalidTransactionError } from '@bitgo/sdk-core';
import * as testData from '../resources/icp';
import { getBuilderFactory } from './getBuilderFactory';
import sinon from 'sinon';

describe('ICP Transaction', () => {
  let tx: Transaction;
  let utils: Utils;
  let serializedTxHex: any;
  const config = coins.get('ticp');

  beforeEach(() => {
    utils = new Utils();
    tx = new Transaction(config, utils);
    const serializedTxFormat = {
      serializedTxHex: testData.PayloadsData,
      publicKey: testData.Accounts.account1.publicKey,
    };
    serializedTxHex = Buffer.from(JSON.stringify(serializedTxFormat), 'utf-8').toString('hex');
    sinon.stub(utils, 'validateExpireTime').returns(true);
  });

  describe('empty transaction', () => {
    it('should throw an empty transaction error', () => {
      assert.throws(
        () => tx.toBroadcastFormat(),
        (err) => err instanceof InvalidTransactionError && err.message === 'Empty transaction',
        'Expected an InvalidTransactionError with message "Empty transaction"'
      );
      assert.throws(
        () => tx.toJson(),
        (err) => err instanceof InvalidTransactionError && err.message === 'Empty transaction',
        'Expected an InvalidTransactionError with message "Empty transaction"'
      );
    });
  });

  describe('build a txn from init() method', () => {
    it('start and build a txn with builder init method', async () => {
      const txn = new Transaction(config, utils);
      txn.icpTransactionData = testData.IcpTransactionData;
      const factory = getBuilderFactory('ticp');
      const txBuilder = factory.getTransferBuilder();
      txBuilder.initBuilder(txn);
      await txBuilder.build();

      const icpTransaction = txBuilder.transaction.icpTransaction;
      const payloadsData = txBuilder.transaction.payloadsData;
      should.equal(icpTransaction.metadata.memo, testData.IcpTransactionData.memo);
      should.equal(icpTransaction.operations[0].account.address, testData.IcpTransactionData.senderAddress);
      should.equal(icpTransaction.operations[1].account.address, testData.IcpTransactionData.receiverAddress);
      should.equal(icpTransaction.operations[1].amount.value, testData.IcpTransactionData.amount);
      should.equal(icpTransaction.operations[2].amount.value, testData.IcpTransactionData.fee);
      should.equal(icpTransaction.public_keys[0].hex_bytes, testData.IcpTransactionData.senderPublicKeyHex);
      payloadsData.payloads.should.be.an.Array();
      payloadsData.payloads.length.should.equal(1);
    });
  });

  describe('from raw transaction', () => {
    it('build a json transaction from raw hex', async () => {
      await tx.fromRawTransaction(serializedTxHex);
      const json = tx.toJson();
      should.equal(json.memo, testData.ParsedRawTransaction.metadata.memo);
      should.equal(json.feeAmount, testData.ParsedRawTransaction.operations[2].amount.value);
      should.equal(json.sender, testData.ParsedRawTransaction.operations[0].account.address);
      should.equal(json.recipient, testData.ParsedRawTransaction.operations[1].account.address);
      should.equal(json.senderPublicKey, testData.Accounts.account1.publicKey);
      should.equal(json.id, testData.OnChainTransactionHash);
    });
  });

  describe('Explain', () => {
    it('explain transaction', async () => {
      await tx.fromRawTransaction(serializedTxHex);
      const explain = tx.explainTransaction();

      explain.outputAmount.should.equal('10');
      explain.outputs[0].amount.should.equal('10');
      explain.outputs[0].address.should.equal(testData.Accounts.account2.address);
      explain.fee.fee.should.equal('-10000');
      explain.changeAmount.should.equal('0');
      if (explain.displayOrder !== undefined) {
        explain.displayOrder.should.deepEqual([
          'id',
          'outputAmount',
          'changeAmount',
          'outputs',
          'changeOutputs',
          'fee',
        ]);
      }
    });
  });
});

Выполнить команду


Для локальной разработки. Не используйте в интернете!