PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo-express/node_modules/bitgo/test

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

/**
 * Utility functions for testing
 */

var TestUtil = module.exports;
var should = require('should');
var moment = require('moment');
var _ = require('lodash');
var Q = require('q');

/**
 * Checks if a promise chain throws an error, and optionally that the error includes
 * the given errorMsg. Our current version of shouldjs (3.3.2) doesn't have the promise
 * assertion .rejectedWith, so we make due with this.
 * @param promise {String} (optional) error message to check for
 * @param errorMsg
 */
TestUtil.throws = function(promise, errorMsg) {
  return promise
  .then(function(res) {
    throw new Error(); // should never reach this point
  })
  .catch(function(e) {
    if (errorMsg) {
      e.message.should.include(errorMsg);
    }
    should.exist(e);
  });
};

// `condition` is a function that returns a boolean
// `body` is a function that returns a promise
// returns a promise for the completion of the loop
TestUtil.promiseWhile = function(condition, body) {
  var done = Q.defer();

  function loop() {
    // When the result of calling `condition` is no longer true, we are
    // done.
    if (!condition()) return done.resolve();
    // Use `when`, in case `body` does not return a promise.
    // When it completes loop again otherwise, if it fails, reject the
    // done promise
    Q.when(body(), loop, done.reject);
  }

  // Start running the loop in the next tick so that this function is
  // completely async. It would be unexpected if `body` was called
  // synchronously the first time.
  Q.nextTick(loop);

  // The promise
  return done.promise;
};

// helper function used to cleanup more than one token
// This is useful in the event that some of your tests fail, and there ends up being more than 10 access tokens
// at which point the server won't allow you to make any more longlived tokens
TestUtil.deleteTestTokens = function(bitgoObj, filterFunc) {
  var tokenList;
  var index = 0;

  var condition = function() { return index < tokenList.length }; // don't delete last token, which is the login token for this test
  var body = function() {
    var token = tokenList[index];

    return bitgoObj.removeAccessToken({ id: token.id })
    .then(function(tok) {
      if (tok) {
        tok.id.should.equal(tokenList[index].id);
      }
    })
    .catch(function(e) {
      console.log(e); // show the error to help debugging
    })
    .finally(function() {
      index++;
    });
  };

  return bitgoObj.listAccessTokens()
  .then(function(tokens) {
    // clear up access tokens which return true from the filter function
    tokenList = _.filter(tokens, filterFunc);
    
    return TestUtil.promiseWhile(condition, body);
  });
};

// helper function to unlock a token for a specified time
TestUtil.unlockToken = function(agent, accessToken, seconds) {
  return agent.post('/api/v1/user/unlock')
  .set('Authorization', 'Bearer ' + accessToken)
  .send({ otp: '0000000', duration: seconds })
  .then(function(res) {
    res.should.have.status(200);
  })
};

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


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