From 348339520d05a720849b034cd842f853b2c88fe3 Mon Sep 17 00:00:00 2001 From: Colin McLeod Date: Tue, 21 Jul 2015 12:34:07 -0700 Subject: [PATCH] Improve comparison import validation --- app/js/controllers/controller-import.js | 10 +++++++++- test/tests/test-controller-import.js | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/js/controllers/controller-import.js b/app/js/controllers/controller-import.js index d3beea0f..25985dda 100755 --- a/app/js/controllers/controller-import.js +++ b/app/js/controllers/controller-import.js @@ -52,7 +52,15 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$ throw 'builds must be an object!'; } if (importData.comparisons) { - // TODO: check ship/builds exist for comparison + for (var compName in importData.comparisons) { + var comparison = importData.comparisons[compName]; + for (var i = 0, l = comparison.builds.length; i < l; i++) { + var build = comparison.builds[i]; + if (!importData.builds[build.shipId] || !importData.builds[build.shipId][build.buildName]) { + throw build.shipId + ' build "' + build.buildName + '" data is missing!'; + } + } + } $scope.comparisons = importData.comparisons; } if (importData.discounts instanceof Array && importData.discounts.length == 2) { diff --git a/test/tests/test-controller-import.js b/test/tests/test-controller-import.js index 99dde417..fea84a41 100644 --- a/test/tests/test-controller-import.js +++ b/test/tests/test-controller-import.js @@ -85,6 +85,13 @@ describe('Import Controller', function() { expect(scope.jsonValid).toBeFalsy(); expect(scope.errorMsg).toEqual('Imperial Clipper build "" must be a string at least 3 characters long!'); + invalidImportData = angular.copy(importData); + invalidImportData.builds.asp = null; // Remove Asp Miner build used in comparison + scope.importJSON = angular.toJson(invalidImportData); + scope.validateJson(); + expect(scope.jsonValid).toBeFalsy(); + expect(scope.errorMsg).toEqual('asp build "Miner" data is missing!'); + }); });