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!'); + }); });