PHP WebShell

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

Просмотр файла: transferBuilder.js

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
const should_1 = __importDefault(require("should"));
const transferBuilder_1 = require("../../src/lib/transferBuilder");
describe('Tezos Transfer builder', function () {
    describe('should build', () => {
        it('a valid transfer with minimum fields', async () => {
            const builder = new transferBuilder_1.TransferBuilder();
            const transfer = builder.amount('10').from('a').to('b').fee('20').build();
            transfer.amount.should.equal('10');
            should_1.default.not.exist(transfer.coin);
            transfer.from.should.equal('a');
            transfer.to.should.equal('b');
            transfer.fee.fee.should.equal('20');
            should_1.default.not.exist(transfer.fee.gasLimit);
            should_1.default.not.exist(transfer.fee.storageLimit);
            should_1.default.not.exist(transfer.counter);
            should_1.default.not.exist(transfer.dataToSign);
        });
        it('a valid transfer with all fields', async () => {
            const builder = new transferBuilder_1.TransferBuilder();
            const transfer = builder
                .amount('10')
                .coin('testCoin')
                .from('a')
                .to('b')
                .fee('20')
                .gasLimit('30')
                .storageLimit('40')
                .counter('0')
                .dataToSign('someEncodedData')
                .build();
            transfer.amount.should.equal('10');
            should_1.default.exist(transfer.coin);
            transfer.coin.should.equal('testCoin');
            transfer.from.should.equal('a');
            transfer.to.should.equal('b');
            transfer.fee.fee.should.equal('20');
            should_1.default.exist(transfer.fee.gasLimit);
            transfer.fee.gasLimit.should.equal('30');
            should_1.default.exist(transfer.fee.storageLimit);
            transfer.fee.storageLimit.should.equal('40');
            should_1.default.exist(transfer.counter);
            transfer.counter.should.equal('0');
            should_1.default.exist(transfer.dataToSign);
            transfer.dataToSign.should.equal('someEncodedData');
        });
    });
    describe('should fail to', () => {
        it('build an empty transfer', async () => {
            const builder = new transferBuilder_1.TransferBuilder();
            assert_1.default.throws(() => builder.build(), new RegExp('Missing transfer mandatory fields'));
        });
        it('build a transfer without amount', async () => {
            const builder = new transferBuilder_1.TransferBuilder()
                .from('KT1NH2M23xovhw7uwWVuoGTYxykeCcVfSqhL')
                .to('tz1VRjRpVKnv16AVprFH1tkDn4TDfVqA893A')
                .fee('20');
            assert_1.default.throws(() => builder.build(), new RegExp('Missing transfer mandatory fields'));
        });
        it('build a transfer without from address', async () => {
            const builder = new transferBuilder_1.TransferBuilder().amount('10').to('tz1VRjRpVKnv16AVprFH1tkDn4TDfVqA893A').fee('20');
            assert_1.default.throws(() => builder.build(), new RegExp('Missing transfer mandatory fields'));
        });
        it('build a transfer without destination address', async () => {
            const builder = new transferBuilder_1.TransferBuilder().amount('10').from('KT1NH2M23xovhw7uwWVuoGTYxykeCcVfSqhL').fee('20');
            assert_1.default.throws(() => builder.build(), new RegExp('Missing transfer mandatory fields'));
        });
        it('build a transfer without fee', async () => {
            const builder = new transferBuilder_1.TransferBuilder()
                .amount('10')
                .from('KT1NH2M23xovhw7uwWVuoGTYxykeCcVfSqhL')
                .to('tz1VRjRpVKnv16AVprFH1tkDn4TDfVqA893A');
            assert_1.default.throws(() => builder.build(), new RegExp('Missing transfer mandatory fields'));
        });
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixvREFBNEI7QUFFNUIsbUVBQWdFO0FBRWhFLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtJQUNqQyxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtRQUM1QixFQUFFLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQ0FBZSxFQUFFLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxRSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEs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RUFBRSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDOUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksTUFBTSxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNmZXJCdWlsZGVyJztcblxuZGVzY3JpYmUoJ1Rlem9zIFRyYW5zZmVyIGJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ2EgdmFsaWQgdHJhbnNmZXIgd2l0aCBtaW5pbXVtIGZpZWxkcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlciA9IGJ1aWxkZXIuYW1vdW50KCcxMCcpLmZyb20oJ2EnKS50bygnYicpLmZlZSgnMjAnKS5idWlsZCgpO1xuICAgICAgdHJhbnNmZXIuYW1vdW50LnNob3VsZC5lcXVhbCgnMTAnKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QodHJhbnNmZXIuY29pbik7XG4gICAgICB0cmFuc2Zlci5mcm9tLnNob3VsZC5lcXVhbCgnYScpO1xuICAgICAgdHJhbnNmZXIudG8uc2hvdWxkLmVxdWFsKCdiJyk7XG4gICAgICB0cmFuc2Zlci5mZWUuZmVlLnNob3VsZC5lcXVhbCgnMjAnKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QodHJhbnNmZXIuZmVlLmdhc0xpbWl0KTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QodHJhbnNmZXIuZmVlLnN0b3JhZ2VMaW1pdCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHRyYW5zZmVyLmNvdW50ZXIpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh0cmFuc2Zlci5kYXRhVG9TaWduKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHZhbGlkIHRyYW5zZmVyIHdpdGggYWxsIGZpZWxkcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlciA9IGJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCgnMTAnKVxuICAgICAgICAuY29pbigndGVzdENvaW4nKVxuICAgICAgICAuZnJvbSgnYScpXG4gICAgICAgIC50bygnYicpXG4gICAgICAgIC5mZWUoJzIwJylcbiAgICAgICAgLmdhc0xpbWl0KCczMCcpXG4gICAgICAgIC5zdG9yYWdlTGltaXQoJzQwJylcbiAgICAgICAgLmNvdW50ZXIoJzAnKVxuICAgICAgICAuZGF0YVRvU2lnbignc29tZUVuY29kZWREYXRhJylcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgICB0cmFuc2Zlci5hbW91bnQuc2hvdWxkLmVxdWFsKCcxMCcpO1xuICAgICAgc2hvdWxkLmV4aXN0KHRyYW5zZmVyLmNvaW4pO1xuICAgICAgdHJhbnNmZXIuY29pbiEuc2hvdWxkLmVxdWFsKCd0ZXN0Q29pbicpO1xuICAgICAgdHJhbnNmZXIuZnJvbS5zaG91bGQuZXF1YWwoJ2EnKTtcbiAgICAgIHRyYW5zZmVyLnRvLnNob3VsZC5lcXVhbCgnYicpO1xuICAgICAgdHJhbnNmZXIuZmVlLmZlZS5zaG91bGQuZXF1YWwoJzIwJyk7XG4gICAgICBzaG91bGQuZXhpc3QodHJhbnNmZXIuZmVlLmdhc0xpbWl0KTtcbiAgICAgIHRyYW5zZmVyLmZlZS5nYXNMaW1pdCEuc2hvdWxkLmVxdWFsKCczMCcpO1xuICAgICAgc2hvdWxkLmV4aXN0KHRyYW5zZmVyLmZlZS5zdG9yYWdlTGltaXQpO1xuICAgICAgdHJhbnNmZXIuZmVlLnN0b3JhZ2VMaW1pdCEuc2hvdWxkLmVxdWFsKCc0MCcpO1xuICAgICAgc2hvdWxkLmV4aXN0KHRyYW5zZmVyLmNvdW50ZXIpO1xuICAgICAgdHJhbnNmZXIuY291bnRlciEuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICBzaG91bGQuZXhpc3QodHJhbnNmZXIuZGF0YVRvU2lnbik7XG4gICAgICB0cmFuc2Zlci5kYXRhVG9TaWduIS5zaG91bGQuZXF1YWwoJ3NvbWVFbmNvZGVkRGF0YScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGZhaWwgdG8nLCAoKSA9PiB7XG4gICAgaXQoJ2J1aWxkIGFuIGVtcHR5IHRyYW5zZmVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5idWlsZCgpLCBuZXcgUmVnRXhwKCdNaXNzaW5nIHRyYW5zZmVyIG1hbmRhdG9yeSBmaWVsZHMnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0cmFuc2ZlciB3aXRob3V0IGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKClcbiAgICAgICAgLmZyb20oJ0tUMU5IMk0yM3hvdmh3N3V3V1Z1b0dUWXh5a2VDY1ZmU3FoTCcpXG4gICAgICAgIC50bygndHoxVlJqUnBWS252MTZBVnByRkgxdGtEbjRURGZWcUE4OTNBJylcbiAgICAgICAgLmZlZSgnMjAnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5idWlsZCgpLCBuZXcgUmVnRXhwKCdNaXNzaW5nIHRyYW5zZmVyIG1hbmRhdG9yeSBmaWVsZHMnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSB0cmFuc2ZlciB3aXRob3V0IGZyb20gYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKCkuYW1vdW50KCcxMCcpLnRvKCd0ejFWUmpScFZLbnYxNkFWcHJGSDF0a0RuNFREZlZxQTg5M0EnKS5mZWUoJzIwJyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuYnVpbGQoKSwgbmV3IFJlZ0V4cCgnTWlzc2luZyB0cmFuc2ZlciBtYW5kYXRvcnkgZmllbGRzJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEgdHJhbnNmZXIgd2l0aG91dCBkZXN0aW5hdGlvbiBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIoKS5hbW91bnQoJzEwJykuZnJvbSgnS1QxTkgyTTIzeG92aHc3dXdXVnVvR1RZeHlrZUNjVmZTcWhMJykuZmVlKCcyMCcpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmJ1aWxkKCksIG5ldyBSZWdFeHAoJ01pc3NpbmcgdHJhbnNmZXIgbWFuZGF0b3J5IGZpZWxkcycpKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIHRyYW5zZmVyIHdpdGhvdXQgZmVlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIoKVxuICAgICAgICAuYW1vdW50KCcxMCcpXG4gICAgICAgIC5mcm9tKCdLVDFOSDJNMjN4b3Zodzd1d1dWdW9HVFl4eWtlQ2NWZlNxaEwnKVxuICAgICAgICAudG8oJ3R6MVZSalJwVktudjE2QVZwckZIMXRrRG40VERmVnFBODkzQScpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLmJ1aWxkKCksIG5ldyBSZWdFeHAoJ01pc3NpbmcgdHJhbnNmZXIgbWFuZGF0b3J5IGZpZWxkcycpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==

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


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