PHP WebShell

Текущая директория: /opt/BitGoJS/modules/bitgo/dist/test/integration

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

"use strict";
//
// Tests for Pending Approvals (listing / get)
//
// Copyright 2015, BitGo, Inc.  All Rights Reserved.
//
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = require("assert");
require("should");
const TestBitGo = require('../lib/test_bitgo');
const _ = require("lodash");
describe('PendingApprovals', function () {
    let bitgo;
    let pendingApprovals;
    let sharedWallet;
    before(function () {
        bitgo = new TestBitGo();
        bitgo.initializeTestVars();
        pendingApprovals = bitgo.pendingApprovals();
        return bitgo
            .authenticateTestUser(bitgo.testUserOTP())
            .then(function () {
            return bitgo.unlock({ otp: bitgo.testUserOTP() });
        })
            .then(function () {
            return bitgo.wallets().get({ id: TestBitGo.TEST_SHARED_WALLET_ADDRESS });
        })
            .then(function (result) {
            sharedWallet = result;
        });
    });
    describe('List', function () {
        it('arguments', function () {
            assert_1.strict.throws(function () {
                pendingApprovals.list({}, 'invalid');
            });
            assert_1.strict.throws(function () {
                pendingApprovals.list('invalid');
            });
            assert_1.strict.throws(function () {
                pendingApprovals.list({ walletId: 54312 });
            });
            assert_1.strict.throws(function () {
                pendingApprovals.list({ enterpriseId: 54312 });
            });
            assert_1.strict.throws(function () {
                pendingApprovals.list({
                    walletId: TestBitGo.TEST_SHARED_WALLET_ADDRESS,
                    enterpriseId: TestBitGo.TEST_ENTERPRISE,
                });
            });
        });
        it('wallet pending approvals', function () {
            return bitgo
                .pendingApprovals()
                .list({ walletId: sharedWallet.id() })
                .then(function (res) {
                res.should.have.property('pendingApprovals');
                res.pendingApprovals.length.should.not.eql(0);
                const pendingApprovalIds = _.map(res.pendingApprovals, function (pa) {
                    return pa.id();
                });
                pendingApprovalIds.should.containEql(TestBitGo.TEST_WALLET_PENDING_APPROVAL_ID);
            });
        });
        it('shared wallet should have pending approval objects on it', function () {
            return sharedWallet.get().then(function (result) {
                const walletPendingApprovals = result.pendingApprovals();
                walletPendingApprovals.length.should.not.eql(0);
                const pendingApprovalIds = _.map(walletPendingApprovals, function (pa) {
                    return pa.id();
                });
                pendingApprovalIds.should.containEql(TestBitGo.TEST_WALLET_PENDING_APPROVAL_ID);
                // the pending approval from the wallet object should have itself on it
                walletPendingApprovals[0].walletId().should.eql(walletPendingApprovals[0].wallet.id());
            });
        });
        it('enterprise pending approvals', function () {
            return bitgo
                .pendingApprovals()
                .list({ enterpriseId: TestBitGo.TEST_ENTERPRISE })
                .then(function (res) {
                res.should.have.property('pendingApprovals');
                res.pendingApprovals.length.should.not.eql(0);
                const pendingApprovalIds = _.map(res.pendingApprovals, function (pa) {
                    return pa.id();
                });
                pendingApprovalIds.should.containEql(TestBitGo.TEST_ENTERPRISE_PENDING_APPROVAL_ID);
            });
        });
    });
    describe('Get Pending Approval', function () {
        it('arguments', function () {
            assert_1.strict.throws(function () {
                pendingApprovals.get({}, 'invalid');
            });
            assert_1.strict.throws(function () {
                pendingApprovals.get('invalid');
            });
            assert_1.strict.throws(function () {
                pendingApprovals.get({ id: 54321 }, 'invalid');
            });
        });
        it('get a wallet pending approval', function () {
            return bitgo
                .pendingApprovals()
                .get({ id: TestBitGo.TEST_WALLET_PENDING_APPROVAL_ID })
                .then(function (pendingApproval) {
                pendingApproval.id().should.eql(TestBitGo.TEST_WALLET_PENDING_APPROVAL_ID);
                pendingApproval.ownerType().should.eql('wallet');
                pendingApproval.walletId().should.eql(TestBitGo.TEST_SHARED_WALLET_ADDRESS);
            });
        });
        it('get an enterprise pending approval', function () {
            return bitgo
                .pendingApprovals()
                .get({ id: TestBitGo.TEST_ENTERPRISE_PENDING_APPROVAL_ID })
                .then(function (pendingApproval) {
                pendingApproval.id().should.eql(TestBitGo.TEST_ENTERPRISE_PENDING_APPROVAL_ID);
                pendingApproval.ownerType().should.eql('enterprise');
                pendingApproval.enterpriseId().should.eql(TestBitGo.TEST_ENTERPRISE);
            });
        });
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ2FwcHJvdmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvaW50ZWdyYXRpb24vcGVuZGluZ2FwcHJvdmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsRUFBRTtBQUNGLDhDQUE4QztBQUM5QyxFQUFFO0FBQ0Ysb0RBQW9EO0FBQ3BELEVBQUU7O0FBRUYsbUNBQTBDO0FBQzFDLGtCQUFnQjtBQUVoQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUUvQyw0QkFBNEI7QUFFNUIsUUFBUSxDQUFDLGtCQUFrQixFQUFFO0lBQzNCLElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBSSxnQkFBZ0IsQ0FBQztJQUNyQixJQUFJLFlBQVksQ0FBQztJQUVqQixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUzQixnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEtBQUs7YUFDVCxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDekMsSUFBSSxDQUFDO1lBQ0osT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDO1lBQ0osT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLFVBQVUsTUFBTTtZQUNwQixZQUFZLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFR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bmcgLyBnZXQpXG4vL1xuLy8gQ29weXJpZ2h0IDIwMTUsIEJpdEdvLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cblxuaW1wb3J0IHsgc3RyaWN0IGFzIGFzc2VydCB9IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5cbmNvbnN0IFRlc3RCaXRHbyA9IHJlcXVpcmUoJy4uL2xpYi90ZXN0X2JpdGdvJyk7XG5cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuZGVzY3JpYmUoJ1BlbmRpbmdBcHByb3ZhbHMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbztcbiAgbGV0IHBlbmRpbmdBcHByb3ZhbHM7XG4gIGxldCBzaGFyZWRXYWxsZXQ7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IG5ldyBUZXN0Qml0R28oKTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcblxuICAgIHBlbmRpbmdBcHByb3ZhbHMgPSBiaXRnby5wZW5kaW5nQXBwcm92YWxzKCk7XG4gICAgcmV0dXJuIGJpdGdvXG4gICAgICAuYXV0aGVudGljYXRlVGVzdFVzZXIoYml0Z28udGVzdFVzZXJPVFAoKSlcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGJpdGdvLnVubG9jayh7IG90cDogYml0Z28udGVzdFVzZXJPVFAoKSB9KTtcbiAgICAgIH0pXG4gICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IFRlc3RCaXRHby5URVNUX1NIQVJFRF9XQUxMRVRfQUREUkVTUyB9KTtcbiAgICAgIH0pXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHNoYXJlZFdhbGxldCA9IHJlc3VsdDtcbiAgICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnYXJndW1lbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbHMubGlzdCh7fSwgJ2ludmFsaWQnKTtcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnRocm93cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbHMubGlzdCgnaW52YWxpZCcpO1xuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGVuZGluZ0FwcHJvdmFscy5saXN0KHsgd2FsbGV0SWQ6IDU0MzEyIH0pO1xuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGVuZGluZ0FwcHJvdmFscy5saXN0KHsgZW50ZXJwcmlzZUlkOiA1NDMxMiB9KTtcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnRocm93cyhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbHMubGlzdCh7XG4gICAgICAgICAgd2FsbGV0SWQ6IFRlc3RCaXRHby5URVNUX1NIQVJFRF9XQUxMRVRfQUREUkVTUyxcbiAgICAgICAgICBlbnRlcnByaXNlSWQ6IFRlc3RCaXRHby5URVNUX0VOVEVSUFJJU0UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnd2FsbGV0IHBlbmRpbmcgYXBwcm92YWxzJywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJpdGdvXG4gICAgICAgIC5wZW5kaW5nQXBwcm92YWxzKClcbiAgICAgICAgLmxpc3QoeyB3YWxsZXRJZDogc2hhcmVkV2FsbGV0LmlkKCkgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgIHJlcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncGVuZGluZ0FwcHJvdmFscycpO1xuICAgICAgICAgIHJlcy5wZW5kaW5nQXBwcm92YWxzLmxlbmd0aC5zaG91bGQubm90LmVxbCgwKTtcbiAgICAgICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWxJZHMgPSBfLm1hcChyZXMucGVuZGluZ0FwcHJvdmFscywgZnVuY3Rpb24gKHBhKSB7XG4gICAgICAgICAgICByZXR1cm4gcGEuaWQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWxJZHMuc2hvdWxkLmNvbnRhaW5FcWwoVGVzdEJpdEdvLlRFU1RfV0FMTEVUX1BFTkRJTkdfQVBQUk9WQUxfSUQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaGFyZWQgd2FsbGV0IHNob3VsZCBoYXZlIHBlbmRpbmcgYXBwcm92YWwgb2JqZWN0cyBvbiBpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzaGFyZWRXYWxsZXQuZ2V0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHdhbGxldFBlbmRpbmdBcHByb3ZhbHMgPSByZXN1bHQucGVuZGluZ0FwcHJvdmFscygpO1xuICAgICAgICB3YWxsZXRQZW5kaW5nQXBwcm92YWxzLmxlbmd0aC5zaG91bGQubm90LmVxbCgwKTtcbiAgICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFsSWRzID0gXy5tYXAod2FsbGV0UGVuZGluZ0FwcHJvdmFscywgZnVuY3Rpb24gKHBhKSB7XG4gICAgICAgICAgcmV0dXJuIHBhLmlkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwZW5kaW5nQXBwcm92YWxJZHMuc2hvdWxkLmNvbnRhaW5FcWwoVGVzdEJpdEdvLlRFU1RfV0FMTEVUX1BFTkRJTkdfQVBQUk9WQUxfSUQpO1xuICAgICAgICAvLyB0aGUgcGVuZGluZyBhcHByb3ZhbCBmcm9tIHRoZSB3YWxsZXQgb2JqZWN0IHNob3VsZCBoYXZlIGl0c2VsZiBvbiBpdFxuICAgICAgICB3YWxsZXRQZW5kaW5nQXBwcm92YWxzWzBdLndhbGxldElkKCkuc2hvdWxkLmVxbCh3YWxsZXRQZW5kaW5nQXBwcm92YWxzWzBdLndhbGxldC5pZCgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2VudGVycHJpc2UgcGVuZGluZyBhcHByb3ZhbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYml0Z29cbiAgICAgICAgLnBlbmRpbmdBcHByb3ZhbHMoKVxuICAgICAgICAubGlzdCh7IGVudGVycHJpc2VJZDogVGVzdEJpdEdvLlRFU1RfRU5URVJQUklTRSB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgcmVzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwZW5kaW5nQXBwcm92YWxzJyk7XG4gICAgICAgICAgcmVzLnBlbmRpbmdBcHByb3ZhbHMubGVuZ3RoLnNob3VsZC5ub3QuZXFsKDApO1xuICAgICAgICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbElkcyA9IF8ubWFwKHJlcy5wZW5kaW5nQXBwcm92YWxzLCBmdW5jdGlvbiAocGEpIHtcbiAgICAgICAgICAgIHJldHVybiBwYS5pZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbElkcy5zaG91bGQuY29udGFpbkVxbChUZXN0Qml0R28uVEVTVF9FTlRFUlBSSVNFX1BFTkRJTkdfQVBQUk9WQUxfSUQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0dldCBQZW5kaW5nIEFwcHJvdmFsJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdhcmd1bWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGVuZGluZ0FwcHJvdmFscy5nZXQoe30sICdpbnZhbGlkJyk7XG4gICAgICB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoZnVuY3Rpb24gKCkge1xuICAgICAgICBwZW5kaW5nQXBwcm92YWxzLmdldCgnaW52YWxpZCcpO1xuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGVuZGluZ0FwcHJvdmFscy5nZXQoeyBpZDogNTQzMjEgfSwgJ2ludmFsaWQnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dldCBhIHdhbGxldCBwZW5kaW5nIGFwcHJvdmFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJpdGdvXG4gICAgICAgIC5wZW5kaW5nQXBwcm92YWxzKClcbiAgICAgICAgLmdldCh7IGlkOiBUZXN0Qml0R28uVEVTVF9XQUxMRVRfUEVORElOR19BUFBST1ZBTF9JRCB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbiAocGVuZGluZ0FwcHJvdmFsKSB7XG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsLmlkKCkuc2hvdWxkLmVxbChUZXN0Qml0R28uVEVTVF9XQUxMRVRfUEVORElOR19BUFBST1ZBTF9JRCk7XG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsLm93bmVyVHlwZSgpLnNob3VsZC5lcWwoJ3dhbGxldCcpO1xuICAgICAgICAgIHBlbmRpbmdBcHByb3ZhbC53YWxsZXRJZCgpLnNob3VsZC5lcWwoVGVzdEJpdEdvLlRFU1RfU0hBUkVEX1dBTExFVF9BRERSRVNTKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZ2V0IGFuIGVudGVycHJpc2UgcGVuZGluZyBhcHByb3ZhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBiaXRnb1xuICAgICAgICAucGVuZGluZ0FwcHJvdmFscygpXG4gICAgICAgIC5nZXQoeyBpZDogVGVzdEJpdEdvLlRFU1RfRU5URVJQUklTRV9QRU5ESU5HX0FQUFJPVkFMX0lEIH0pXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChwZW5kaW5nQXBwcm92YWwpIHtcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWwuaWQoKS5zaG91bGQuZXFsKFRlc3RCaXRHby5URVNUX0VOVEVSUFJJU0VfUEVORElOR19BUFBST1ZBTF9JRCk7XG4gICAgICAgICAgcGVuZGluZ0FwcHJvdmFsLm93bmVyVHlwZSgpLnNob3VsZC5lcWwoJ2VudGVycHJpc2UnKTtcbiAgICAgICAgICBwZW5kaW5nQXBwcm92YWwuZW50ZXJwcmlzZUlkKCkuc2hvdWxkLmVxbChUZXN0Qml0R28uVEVTVF9FTlRFUlBSSVNFKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=

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


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