all files / modules/utils/ callApp.js

100% Statements 16/16
100% Branches 10/10
100% Functions 4/4
100% Lines 16/16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50                                             85×   85×   85× 85×     85× 84×     81× 81× 81×            
const Connection = require("../Connection");
const Promise = require("bluebird");
const R = require("ramda");
 
/**
 * Creates a new Connection using the given options and sends
 * the request to the given app. Returns a promise for the connection
 * object when the response is received.
 *
 * Options may be any of the Connection options, plus the following:
 *
 * - binary     By default the response content is buffered and stored
 *              in the responseText property of the connection. Set this
 *              option true to disable this behavior.
 * - maxLength  The maximum length of the response content to accept.
 *              This option has no effect when "binary" is true. By
 *              default there is no maximum length.
 * - encoding   The encoding to use to decode the response body. This
 *              option has no effect when "binary" is true. By default
 *              the encoding is whatever was specified in the Content-Type
 *              header of the response.
 *
 * If a modifier function is provided, it will have a chance to modify
 * the Connection object immediately before the request is made.
 */
function callApp(app, options, modifier) {
    options = options || {};
 
    const c = new Connection(options);
 
    return Promise.resolve(modifier ? modifier(c) : c).then(function (conn) {
        if (R.isNil(conn) || !R.is(Connection, conn)) {
            conn = c;
        }
 
        return conn.call(app).then(function () {
            if (options.binary) {
                return conn;
            }
 
            return conn.response.stringifyContent(options.maxLength, options.encoding).then(function (content) {
                conn.responseText = content;
                return conn;
            });
        });
    });
}
 
module.exports = callApp;