acs
Version: 
Appcelerator Server Side Node
177 lines (148 loc) • 4.74 kB
JavaScript
var sinon = require('sinon'),
    EventEmitter = require('events').EventEmitter,
    util = require('util'),
    acsutil = require('../lib/util');
exports.fakeCookieForReq = 'fake-cookie-for-request';
exports.testHost = 'https://admin.unittest.appcelerator.com';
// exports.defaultHost = 'https://admin.cloudapp-enterprise.appcelerator.com';
exports.defaultHost = 'https://admin.ars.us.axway.com';
exports.testApp = 'testApp';
exports.testVersion = '0.1.0';
function Request(options) {
}
// lib/post.js pipe stream to request
Request.prototype.write = function(){}
Request.prototype.end = function(){}
util.inherits(Request, EventEmitter);
exports.buildRequestMock = function(checkOptions, error, response, body, rawBody) {
    if(!rawBody) {
        body = JSON.stringify(body);
    }
    if(!response) {
        response = {
            statusCode: 200,
            headers: {
                'set-cookie': 'fake-cookie-for-response',
                'content-type': 'json'
            }
        };
    }
    if(!body) {
        body = {
            success: true,
            message: 'done'
        }
    }
    return function(options) {
        return [response,body];
    }
}
exports.buildStreamRequestMock = function(checkOptions, error, response, body, rawBody) {
    if(!rawBody) {
        body = JSON.stringify(body);
    }
    if(!response) {
        response = {
            statusCode: 200,
            headers: {
                'set-cookie': 'fake-cookie-for-response',
                'content-type': 'json'
            }
        };
    }
    if(!body) {
        body = {
            success: true,
            message: 'done'
        }
    }
    return function(options) {
        checkOptions(options);
        var request = new Request();
        setTimeout(function() {
            request.emit('response', response);
            request.emit('data', body);
            request.emit('end');
        }, 10);
        return request;
    }
}
exports.hostInfoLine = function(host) {
    return 'Admin Hostname: ' + host;
}
exports.beforeHandler = function(done) {
    sinon.stub(acsutil, 'getCookie', function() {
        return exports.fakeCookieForReq;
    });
    sinon.stub(acsutil, 'getGlobalConfig', function() {
        return {};
    });
    sinon.stub(acsutil, 'saveGlobalConfig', function(callback) {
    });
    var originalGetEffectiveConfig = acsutil.getEffectiveConfig;
    sinon.stub(acsutil, 'getEffectiveConfig', function(opts) {
        if(opts.host) {
            return originalGetEffectiveConfig(opts);
        }
        var result = acsutil.getDefaultConfig();
        result.publishHostPort = result.publishHost + ':' + result.publishPort;
        result.isDefaultHost = true;
        return result;
    });
    done();
};
exports.afterHandler = function(done) {
    acsutil.getCookie.restore();
    acsutil.getGlobalConfig.restore();
    acsutil.saveGlobalConfig.restore();
    acsutil.getEffectiveConfig.restore();
    done();
};
exports.buildBeforeEachHandler = function(outputs, stubConsole) {
    if(stubConsole == undefined) {
        stubConsole = true;
    }
    return function(done) {
        if(stubConsole) {
            var consolelog = console.log;
            sinon.stub(console, 'log', function() {
                consolelog.apply(this, arguments);
                // outputs.push(Object.values(arguments).join(' '));
                outputs.push([].slice.call(arguments).join(' '));
            });
        }
        outputs.length = 0;
        done();    
    };
}
exports.afterEachHandler = function(done) {
    if(console.log.restore) {
        console.log.restore();
    }
    if(process.exit.restore) {
        process.exit.restore();
    }
    done();
}
exports.buildRequestMockWithReqOptions = function(host, port, path, method, body, rawBody) {
    return exports.buildRequestMock(function(options) {
        options['url'].should.eql(host + ':' + port + path);
        if(Array.isArray(method)) {
            options['method'].should.be.oneOf(method);
        } else {
            options['method'].should.eql(method);
        }
        options['headers']['Cookie'].should.eql(exports.fakeCookieForReq); 
    }, null, null, body, rawBody);
}
exports.buildStreamRequestMockWithReqOptions = function(host, port, path, method, body, rawBody) {
    return exports.buildStreamRequestMock(function(options) {
        options['url'].should.eql(host + ':' + port + path);
        if(Array.isArray(method)) {
            options['method'].should.be.oneOf(method);
        } else {
            options['method'].should.eql(method);
        }
        options['headers']['Cookie'].should.eql(exports.fakeCookieForReq); 
    }, null, null, body, rawBody);
}