forked from lix-project/lix-website
126 lines
2.7 KiB
JavaScript
126 lines
2.7 KiB
JavaScript
var util = require("util");
|
|
var querystring = require("querystring");
|
|
var BaseClient = require("./client");
|
|
var extend = require("./extend");
|
|
|
|
function AutomateClient(settings) {
|
|
this.server = {
|
|
host: "api.browserstack.com"
|
|
};
|
|
BaseClient.call(this, settings);
|
|
}
|
|
|
|
util.inherits(AutomateClient, BaseClient);
|
|
|
|
// public API
|
|
extend(AutomateClient.prototype, {
|
|
getPlan: function(fn) {
|
|
this.request({
|
|
path: this.path("/plan.json")
|
|
}, fn);
|
|
},
|
|
|
|
getBrowsers: function(fn) {
|
|
this.request({
|
|
path: this.path("/browsers.json")
|
|
}, fn);
|
|
},
|
|
|
|
getProjects: function(fn) {
|
|
this.request({
|
|
path: this.path("/projects.json")
|
|
}, this.handleResponse(fn, this.stripChildKeys("automation_project")));
|
|
},
|
|
|
|
getProject: function(id, fn) {
|
|
this.request({
|
|
path: this.path("/projects/" + id + ".json")
|
|
}, this.handleResponse(fn, function(project) {
|
|
project = project.project;
|
|
project.builds = this.stripChildKeys("automation_build")(project.builds);
|
|
return project;
|
|
}.bind(this)));
|
|
},
|
|
|
|
getBuilds: function(options, fn) {
|
|
if (typeof options === "function") {
|
|
fn = options;
|
|
options = {};
|
|
}
|
|
|
|
this.request({
|
|
path: this.path("/builds.json?" + querystring.stringify(options))
|
|
}, this.handleResponse(fn, this.stripChildKeys("automation_build")));
|
|
},
|
|
|
|
getSessions: function(buildId, options, fn) {
|
|
if (typeof fn === "undefined") {
|
|
fn = options;
|
|
options = {};
|
|
}
|
|
|
|
this.request({
|
|
path: this.path("/builds/" + buildId + "/sessions.json?" +
|
|
querystring.stringify(options))
|
|
}, this.handleResponse(fn, this.stripChildKeys("automation_session")));
|
|
},
|
|
|
|
getSession: function(id, fn) {
|
|
this.request({
|
|
path: this.path("/sessions/" + id + ".json")
|
|
}, this.handleResponse(fn, this.stripKey("automation_session")));
|
|
},
|
|
|
|
updateSession: function(id, options, fn) {
|
|
var data = JSON.stringify(options);
|
|
this.request({
|
|
method: "PUT",
|
|
path: this.path("/sessions/" + id + ".json")
|
|
}, data, this.handleResponse(fn, this.stripKey("automation_session")));
|
|
},
|
|
|
|
deleteSession: function(id, fn) {
|
|
this.request({
|
|
method: "DELETE",
|
|
path: this.path("/sessions/" + id + ".json")
|
|
}, fn);
|
|
}
|
|
});
|
|
|
|
// internal API
|
|
extend(AutomateClient.prototype, {
|
|
path: function(path) {
|
|
return "/automate" + path;
|
|
},
|
|
|
|
handleResponse: function(fn, modifier) {
|
|
return function(error, data) {
|
|
if (error) {
|
|
return fn(error);
|
|
}
|
|
|
|
fn(null, modifier(data));
|
|
};
|
|
},
|
|
|
|
stripKey: function(key) {
|
|
return function(item) {
|
|
return item[key];
|
|
};
|
|
},
|
|
|
|
stripChildKeys: function(key) {
|
|
return function(items) {
|
|
return items.map(function(item) {
|
|
return item[key];
|
|
});
|
|
};
|
|
}
|
|
});
|
|
|
|
module.exports = {
|
|
createClient: function(settings) {
|
|
return new AutomateClient(settings);
|
|
}
|
|
};
|