From 8ed63e50226a4f4c1ea1562f3a39c2f9ba17f29b Mon Sep 17 00:00:00 2001 From: Anthony Truskinger Date: Fri, 4 Jul 2014 15:07:31 +1000 Subject: [PATCH] Added unit converter tests and extra checks for malformed input data --- src/components/services/unitConverter.js | 15 ++++++--- .../services/unitConverters.spec.js | 33 +++++++++++-------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/components/services/unitConverter.js b/src/components/services/unitConverter.js index 39541e19..c88b7519 100644 --- a/src/components/services/unitConverter.js +++ b/src/components/services/unitConverter.js @@ -7,6 +7,8 @@ uc.factory("bawApp.unitConverter", ['conf.constants', function (constants) { return Math.abs(fraction - 1); } + var keysToCheck = ["sampleRate", "spectrogramWindowSize", "startOffset", "endOffset"]; + function calculateUnitConversions(data) { var result = { pixelsPerSecond: NaN, @@ -15,15 +17,18 @@ uc.factory("bawApp.unitConverter", ['conf.constants', function (constants) { enforcedImageWidth: NaN, enforcedImageHeight: NaN }; - - if (data.sampleRate === undefined || - data.spectrogramWindowSize === undefined || - data.startOffset === undefined || - data.endOffset === undefined) { + + if (keysToCheck.some(function (key) { return data[key] === undefined; })) { console.warn("unitConverter:calculateUnitConversions: not enough information available to calculate unit conversions"); return result; } + keysToCheck.forEach(function(key) { + if (!angular.isNumber(data[key])) { + throw "Input data field `" + key + "` should be a number!"; + } + }); + // based on meta data only var duration = data.endOffset - data.startOffset, nyquistFrequency = (data.sampleRate / 2.0), diff --git a/src/components/services/unitConverters.spec.js b/src/components/services/unitConverters.spec.js index 7cc7e7e2..31902218 100644 --- a/src/components/services/unitConverters.spec.js +++ b/src/components/services/unitConverters.spec.js @@ -1,13 +1,7 @@ describe("The unitConverter service", function () { var unitConverter; - var inputArgs = { - sampleRate: null, - spectrogramWindowSize: null, - endOffset: null, - startOffset: null, - imageElement: null - }; + var inputArgs = {}; beforeEach(module('bawApp.services.unitConverter')); @@ -15,12 +9,12 @@ describe("The unitConverter service", function () { unitConverter = providedUnitConverted; inputArgs = { - sampleRate: null, - spectrogramWindowSize: null, - endOffset: null, - startOffset: null, - imageElement: null, - audioRecordingAbsoluteStartDate: null + sampleRate: undefined, + spectrogramWindowSize: undefined, + endOffset: undefined, + startOffset: undefined, + imageElement: undefined, + audioRecordingAbsoluteStartDate: undefined }; }])); @@ -75,6 +69,19 @@ describe("The unitConverter service", function () { expect(converters.input).toBe(inputArgs); }); + ["sampleRate", "spectrogramWindowSize", "startOffset", "endOffset"].forEach(function (key) { + it("requires " + key + " be provided as a number", function () { + + var f = function () { + var local = angular.extend({}, inputArgs); + local[key] = inputArgs[key].toString(); + unitConverter.getConversions(local); + }; + + expect(f).toThrowError("Input data field `" + key + "` should be a number!"); + }); + }); + it("ensure the absolute start date of the input object is output and is a date", function(){ var isDate = converters.input.audioRecordingAbsoluteStartDate instanceof Date;