2 * MCTX3420 2013 - Remote pressurised can experiment.
3 * Unit testing for the server API.
4 * These unit tests use the QUnit unit testing framework.
5 * @requires QUnit, jQuery, and base64.js
13 ut.api = location.protocol + "//" + location.host + "/api/";
15 ut.controlcb = $.Callbacks();
18 * Sends an AJAX query to the API
19 * @param {string} module The name of the module to be queried
20 * @param {Object} opts Object holding the parameters, username, password and
21 * callback. The parameters should be an object of key/value
23 * @returns jqXHR object (but calls callback with JSON data, or null on AJAX error)
25 function query(module, opts) {
26 var queryurl = ut.api + module;
30 authfunc = function(xhr) {
31 xhr.setRequestHeader("Authorization",
32 "Basic " + base64.encode(opts.username + ":" + opts.password));
43 }).done(opts.callback)
44 .fail(function(jqXHR) {
45 ok(false, "Request failed: " + jqXHR.status.toString() + " " + jqXHR.statusText);
50 QUnit.module("API basics");
51 QUnit.asyncTest("API Existence (identify)", function () {
52 query("identify", {callback : function(data) {
54 ok(data.status > 0, "Return status");
55 ok(data.description, data.description);
56 ok(data.build_date, data.build_date);
60 QUnit.asyncTest("Invalid module", function () {
61 query("dontexist", {callback : function(data) {
67 QUnit.module("Sensors");
68 QUnit.asyncTest("Existence", function() {
69 query("sensors", {params : {id : 0}, callback : function(data) {
71 ok(data.status > 0, "Return status");
72 ok(data.data !== undefined, "Data field existence");
73 var result = "Data: ";
74 for (var i = 0; i < data.data.length; i++) {
75 result += data.data[i][0] + ":" + data.data[i][1] + ", ";
81 QUnit.asyncTest("Invalid sensor id 1", function() {
82 query("sensors", {params : {id : 999}, callback : function(data) {
84 ok(data.status < 0, "Return status");
88 QUnit.asyncTest("Invalid sensor id 2", function() {
89 query("sensors", {params : {id : ""}, callback : function(data) {
91 ok(data.status < 0, "Return status");
95 QUnit.asyncTest("Out of bounds sensor id 1", function() {
96 query("sensors", {params : {id : "-1"}, callback : function(data) {
98 ok(data.status < 0, "Return status");
102 QUnit.asyncTest("Out of bounds sensor id 2", function() {
103 query("sensors", {params : {id : "999"}, callback : function(data) {
105 ok(data.status < 0, "Return status");
109 QUnit.module("Controls and access");
110 QUnit.asyncTest("Gaining access", function() {
111 ut.controlcb.add(function () {
112 query("control", {params : {action : "start", force : true},
113 username : $("#username").val(), password : $("#password").val(),
115 callback : function(data) {
117 ok(data.status > 0, "Return status");
123 QUnit.asyncTest("Setting actuator value", function () {
124 ut.controlcb.add(function () {
125 query("control", {params : {action : "set", id : 0,
126 username : $("#username").val(), password : $("#password").val(),
127 value : 200, key : ut.ckey},
128 callback : function(data) {
130 ok(data.status > 0, "Return status");
131 ok(true, data.description);
136 $(document).ready(function(){
137 $("#control").submit(function () {