X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=testing%2Fqunit%2Funit-tests.js;h=476e1459aeb789693bdcce4ab3e301867ab18398;hb=1788aa399989e919221f0bf4c8b6114bef4a49a9;hp=12bb76ad2c8c680a29411c821cef0bd09e1ea8b0;hpb=8aa358c02e86aee0486c1951ee3c5634cb7586a1;p=matches%2FMCTX3420.git diff --git a/testing/qunit/unit-tests.js b/testing/qunit/unit-tests.js index 12bb76a..476e145 100644 --- a/testing/qunit/unit-tests.js +++ b/testing/qunit/unit-tests.js @@ -11,11 +11,11 @@ ut = {}; ut.api = location.protocol + "//" + location.host + "/api/"; -ut.ckey = undefined; -ut.controlcb = $.Callbacks(); +ut.controlcb = $.Deferred(); /** - * Sends an AJAX query to the API + * Sends a synchronous AJAX query to the API + * A synchronous request makes it easier for unit testing. * @param {string} module The name of the module to be queried * @param {Object} opts Object holding the parameters, username, password and * callback. The parameters should be an object of key/value @@ -39,7 +39,7 @@ function query(module, opts) { dataType: 'json', data: opts.params, beforeSend: authfunc, - async: opts.async + async: false }).done(opts.callback) .fail(function(jqXHR) { ok(false, "Request failed: " + jqXHR.status.toString() + " " + jqXHR.statusText); @@ -48,86 +48,87 @@ function query(module, opts) { } QUnit.module("API basics"); -QUnit.asyncTest("API Existence (identify)", function () { - query("identify", {callback : function(data) { - start(); - ok(data.status > 0, "Return status"); - ok(data.description, data.description); - ok(data.build_date, data.build_date); - }}); +QUnit.test("API Existence (identify)", function () { + query("identify", {params : {actuators : true, sensors : true}, + callback : function(data) { + ok(data.status > 0, "Return status"); + ok(data.description !== undefined, data.description); + ok(data.build_date !== undefined, data.build_date); + ok(data.api_version !== undefined, "API version: " + data.api_version); + ok(data.sensors !== undefined, "Sensors list"); + ok(data.actuators !== undefined, "Actuators list"); + + var sl = "Sensors: ", al = "Actuators: "; + for (var id in data.sensors) { + sl += id + ":" + data.sensors[id] + " "; + } + for (var id in data.actuators) { + al += id + ":" + data.actuators[id] + " "; + } + ok(sl, sl); + ok(al, al); + }}); }); -QUnit.asyncTest("Invalid module", function () { +QUnit.test("Invalid module", function () { query("dontexist", {callback : function(data) { - start(); ok(data.status < 0); }}); }); QUnit.module("Sensors"); -QUnit.asyncTest("Existence", function() { - query("sensors", {params : {id : 0}, callback : function(data) { - start(); - ok(data.status > 0, "Return status"); - ok(data.data !== undefined, "Data field existence"); - var result = "Data: "; - for (var i = 0; i < data.data.length; i++) { - result += data.data[i][0] + ":" + data.data[i][1] + ", "; - } - ok(true, result); - }}); -}); - -QUnit.asyncTest("Invalid sensor id 1", function() { - query("sensors", {params : {id : 999}, callback : function(data) { - start(); - ok(data.status < 0, "Return status"); - }}); +QUnit.test("Existence", function() { + query("identify", {params : {sensors : 1}, callback : function(data) { + ok(data.status > 0, "Identification"); + var hasSensor = false; + for (var id in data.sensors) { + hasSensor = true; + query("sensors", {params : {id : id}, callback : function(data) { + ok(data.status > 0, "Sensor " + id); + ok(data.data !== undefined, "Data field existence"); + var result = "Data: "; + for (var i = 0; i < data.data.length; i++) { + result += data.data[i][0] + ":" + data.data[i][1] + ", "; + } + ok(true, result); + }}); + } + ok(hasSensor, "Has at least one sensor"); + }}); + }); -QUnit.asyncTest("Invalid sensor id 2", function() { +QUnit.test("Invalid sensor ids", function() { query("sensors", {params : {id : ""}, callback : function(data) { - start(); - ok(data.status < 0, "Return status"); + ok(data.status < 0, "No id"); }}); -}); - -QUnit.asyncTest("Out of bounds sensor id 1", function() { + query("sensors", {params : {id : 999}, callback : function(data) { + ok(data.status < 0, "Id too large"); + }}); query("sensors", {params : {id : "-1"}, callback : function(data) { - start(); - ok(data.status < 0, "Return status"); - }}); -}); - -QUnit.asyncTest("Out of bounds sensor id 2", function() { - query("sensors", {params : {id : "999"}, callback : function(data) { - start(); - ok(data.status < 0, "Return status"); + ok(data.status < 0, "Negative id"); }}); }); QUnit.module("Controls and access"); -QUnit.asyncTest("Gaining access", function() { - ut.controlcb.add(function () { +QUnit.asyncTest("Setting actuator value", function () { + $.when(ut.controlcb).done(function () { + start(); + var key; + query("control", {params : {action : "start", force : true}, username : $("#username").val(), password : $("#password").val(), async : false, callback : function(data) { - start(); - ok(data.status > 0, "Return status"); - ut.ckey = data.key; - }}); - }); -}); - -QUnit.asyncTest("Setting actuator value", function () { - ut.controlcb.add(function () { + ok(data.status > 0, "Gaining access key"); + ok(data.key, "Access key - " + data.key); + key = data.key; + }}); query("control", {params : {action : "set", id : 0, username : $("#username").val(), password : $("#password").val(), - value : 200, key : ut.ckey}, + value : 200, key : key}, callback : function(data) { - start(); - ok(data.status > 0, "Return status"); + ok(data.status > 0, "Setting actuator"); ok(true, data.description); }}); }); @@ -135,7 +136,7 @@ QUnit.asyncTest("Setting actuator value", function () { $(document).ready(function(){ $("#control").submit(function () { - ut.controlcb.fire(); + ut.controlcb.resolve(); return false; }); }); \ No newline at end of file