wct-sauce
Version:
WCT plugin that enables support for sauce browsers via Sauce Labs
127 lines (98 loc) • 3.54 kB
JavaScript
var
expand = require('../lib/browsers').expand,
expect = require('chai').expect,
slice = Array.prototype.slice,
_ = require('lodash')
;
const DEFAULT_BROWSERS = require('../default-sauce-browsers.json');
const DEFAULT_OPTIONS = {
accessKey: 'access-key-' + Date.now(),
browsers: ['default'],
username: 'catpants-' + Date.now()
};
const DEFAULT_URL = {
accessKey: DEFAULT_OPTIONS.accessKey,
hostname: 'ondemand.saucelabs.com',
port: 80,
username: DEFAULT_OPTIONS.username
};
function browserOptions() {
var options = _.cloneDeep(DEFAULT_OPTIONS);
options.browsers = slice.call(arguments);
return options;
}
describe('expand', function() {
['all', 'default'].forEach(function(keyword) {
it('should respect browser keyword: ' + keyword, function(done) {
expand(browserOptions(keyword), function(error, browsers) {
expect(browsers).to.have.length(DEFAULT_BROWSERS.length);
browsers.forEach(function(browser) {
expect(browser).to.have.all.keys('browserName', 'platform', 'url', 'version');
expect(browser.url).to.deep.equal(DEFAULT_URL);
});
done();
});
});
});
it('should remove bad browser instances', function(done) {
expand(browserOptions('default', null, 'all', 0, false, 'What?'), function(error, browsers) {
expect(browsers).to.have.length(DEFAULT_BROWSERS.length);
browsers.forEach(function(browser) {
expect(browser).to.have.all.keys('browserName', 'platform', 'url', 'version');
expect(browser.url).to.deep.equal(DEFAULT_URL);
});
done();
});
});
it('should allow objects to pass through', function(done) {
var browser = {foo: 'bar', baz: 1};
expand(browserOptions(browser), function(error, browsers) {
expect(browsers).to.have.length(1);
expect(browsers[0]).to.deep.equal(browser);
done();
});
});
it('should pass custom browsers', function(done) {
var
browser = 'browers name here',
platform = 'os or platform',
version = String(Date.now())
;
expand(browserOptions(platform + '/' + browser + '@' + version), function(error, browsers) {
var result;
expect(browsers).to.have.length(1);
result = browsers[0];
expect(result).to.have.property('browserName', browser);
expect(result).to.have.property('platform', platform);
expect(result).to.have.property('version', version);
expect(result.url).to.deep.equal(DEFAULT_URL);
done();
});
});
it('should extend browsers with custom metadata', function(done) {
var
buildNumber = Date.now(),
customName = 'custom name ' + Date.now(),
options = browserOptions('platform/browser@eleventy', 'default'),
tags = ['custom', 'tags', 'here']
;
_.extend(options, {
build: buildNumber,
disabled: true,
name: customName,
tags: tags
});
expand(options, function(error, browsers) {
expect(browsers).to.have.length(DEFAULT_BROWSERS.length + 1);
browsers.forEach(function(browser) {
expect(browser).to.contain.all.keys('browserName', 'platform', 'url', 'version');
expect(browser).to.have.property('build', buildNumber);
expect(browser).to.have.property('name', customName);
expect(browser).to.have.property('tags', tags);
expect(browser.url).to.deep.equal(DEFAULT_URL);
expect(browser).to.not.have.keys('browsers', 'disabled');
});
done();
});
});
});