| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| var App = require('app'); |
| require('controllers/installer'); |
| require('controllers/wizard/selectMpacks_controller'); |
| |
| var wizardSelectMpacksController; |
| var registry = { |
| "href" : "http://localhost:8080/api/v1/registries?fields=mpacks/*,mpacks/versions/RegistryMpackVersionInfo/*,scenarios/*", |
| "items" : [ |
| { |
| "href" : "http://localhost:8080/api/v1/registries/1", |
| "RegistryInfo" : { |
| "registry_id" : 1 |
| }, |
| "mpacks" : [ |
| { |
| "href" : "http://localhost:8080/api/v1/registries/1/mpacks/HDPCORE", |
| "RegistryMpackInfo" : { |
| "mpack_description" : "Hortonworks Data Platform Core", |
| "mpack_id" : "hdpcore", |
| "mpack_logo_uri" : "https://public-repo-1.hortonworks.com/logos/hdpcore-logo.png", |
| "mpack_name" : "HDPCORE", |
| "registry_id" : 1 |
| }, |
| "versions" : [ |
| { |
| "href" : "http://localhost:8080/api/v1/registries/1/mpacks/HDPCORE/versions/1.0.0-b85", |
| "RegistryMpackVersionInfo" : { |
| "modules" : [ |
| { |
| "id" : "zookeeper_clients", |
| "displayName" : "ZooKeeper Clients", |
| "description" : "Clients for ZooKeeper", |
| "category" : "CLIENT", |
| "name" : "ZOOKEEPER_CLIENTS", |
| "version" : "3.4.0.0-b29", |
| "definition" : "zookeeper_clients-3.4.0.0-b29-definition.tar.gz", |
| "dependencies" : [ |
| { |
| "id" : "zookeeper", |
| "name" : "ZOOKEEPER", |
| "dependencyType" : "RUNTIME" |
| } |
| ], |
| "components" : [ |
| { |
| "id" : "zookeeper_client", |
| "name" : "ZOOKEEPER_CLIENT", |
| "category" : "CLIENT", |
| "isExternal" : false, |
| "version" : "3.4.0.0-b29" |
| } |
| ] |
| }, |
| { |
| "id" : "zookeeper", |
| "displayName" : "ZooKeeper", |
| "description" : "Centralized service which provides highly reliable distributed coordination", |
| "category" : "SERVER", |
| "name" : "ZOOKEEPER", |
| "version" : "3.4.0.0-b29", |
| "definition" : "zookeeper-3.4.0.0-b29-definition.tar.gz", |
| "dependencies" : [ |
| { |
| "id" : "zookeeper_clients", |
| "name" : "ZOOKEEPER_CLIENTS", |
| "dependencyType" : "INSTALL" |
| } |
| ], |
| "components" : [ |
| { |
| "id" : "zookeeper_server", |
| "name" : "ZOOKEEPER_SERVER", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "3.4.0.0-b29" |
| } |
| ] |
| }, |
| { |
| "id" : "hdfs", |
| "displayName" : "HDFS", |
| "description" : "Apache Hadoop Distributed File System", |
| "category" : "SERVER", |
| "name" : "HDFS", |
| "version" : "3.0.0.0-b54", |
| "definition" : "hdfs-3.0.0.0-b54-definition.tar.gz", |
| "dependencies" : [ |
| { |
| "id" : "hadoop_clients", |
| "name" : "HADOOP_CLIENTS", |
| "dependencyType" : "INSTALL" |
| } |
| ], |
| "components" : [ |
| { |
| "id" : "namenode", |
| "name" : "NAMENODE", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "datanode", |
| "name" : "DATANODE", |
| "category" : "SLAVE", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "journalnode", |
| "name" : "JOURNALNODE", |
| "category" : "SLAVE", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "secondary_namenode", |
| "name" : "SECONDARY_NAMENODE", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "zkfc", |
| "name" : "ZKFC", |
| "category" : "SLAVE", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "nfs_gateway", |
| "name" : "NFS_GATEWAY", |
| "category" : "SLAVE", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| } |
| ] |
| }, |
| { |
| "id" : "yarn", |
| "displayName" : "YARN", |
| "description" : "Apache Hadoop Yarn", |
| "category" : "SERVER", |
| "name" : "YARN", |
| "version" : "3.0.0.0-b54", |
| "definition" : "yarn-3.0.0.0-b54-definition.tar.gz", |
| "dependencies" : [ |
| { |
| "id" : "hadoop_clients", |
| "name" : "HADOOP_CLIENTS", |
| "dependencyType" : "INSTALL" |
| }, |
| { |
| "id" : "hdfs", |
| "name" : "HDFS", |
| "dependencyType" : "RUNTIME" |
| }, |
| { |
| "id" : "mapreduce2", |
| "name" : "MAPREDUCE2", |
| "dependencyType" : "RUNTIME" |
| }, |
| { |
| "id" : "zookeeper", |
| "name" : "ZOOKEEPER", |
| "dependencyType" : "RUNTIME" |
| } |
| ], |
| "components" : [ |
| { |
| "id" : "resourcemanager", |
| "name" : "RESOURCEMANAGER", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "nodemanager", |
| "name" : "NODEMANAGER", |
| "category" : "SLAVE", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "app_timeline_server", |
| "name" : "APP_TIMELINE_SERVER", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "timeline_reader", |
| "name" : "TIMELINE_READER", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| }, |
| { |
| "id" : "yarn_registry_dns", |
| "name" : "YARN_REGISTRY_DNS", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| } |
| ] |
| }, |
| { |
| "id" : "mapreduce2", |
| "displayName" : "MAPREDUCE2", |
| "description" : "Apache Hadoop Mapreduce2", |
| "category" : "SERVER", |
| "name" : "MAPREDUCE2", |
| "version" : "3.0.0.0-b54", |
| "definition" : "mapreduce2-3.0.0.0-b54-definition.tar.gz", |
| "dependencies" : [ |
| { |
| "id" : "hadoop_clients", |
| "name" : "HADOOP_CLIENTS", |
| "dependencyType" : "INSTALL" |
| }, |
| { |
| "id" : "yarn", |
| "name" : "YARN", |
| "dependencyType" : "RUNTIME" |
| } |
| ], |
| "components" : [ |
| { |
| "id" : "historyserver", |
| "name" : "HISTORYSERVER", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| } |
| ] |
| }, |
| { |
| "id" : "hadoop_clients", |
| "displayName" : "Hadoop client", |
| "description" : "Clients for HDFS, YARN and MAPREDUCE services", |
| "category" : "CLIENT", |
| "name" : "HADOOP_CLIENTS", |
| "version" : "3.0.0.0-b54", |
| "definition" : "hadoop_clients-3.0.0.0-b54-definition.tar.gz", |
| "dependencies" : [ |
| { |
| "id" : "hdfs", |
| "name" : "HDFS", |
| "dependencyType" : "RUNTIME" |
| }, |
| { |
| "id" : "yarn", |
| "name" : "YARN", |
| "dependencyType" : "RUNTIME" |
| }, |
| { |
| "id" : "mapreduce2", |
| "name" : "MAPREDUCE2", |
| "dependencyType" : "RUNTIME" |
| } |
| ], |
| "components" : [ |
| { |
| "id" : "hadoop_client", |
| "name" : "HADOOP_CLIENT", |
| "category" : "CLIENT", |
| "isExternal" : false, |
| "version" : "3.0.0.0-b54" |
| } |
| ] |
| } |
| ], |
| "mpack_dependencies" : null, |
| "mpack_description" : "Hortonworks Data Platform Core", |
| "mpack_doc_uri" : "http://docs.hortonworks.com/HDPDocuments/HDPCORE1/HDPCORE-1.0.0/index.html", |
| "mpack_id" : "hdpcore", |
| "mpack_logo_uri" : "https://public-repo-1.hortonworks.com/logos/hdpcore-logo.png", |
| "mpack_name" : "HDPCORE", |
| "mpack_uri" : "http://dev.hortonworks.com.s3.amazonaws.com/HDPCORE/centos7/1.x/BUILDS/1.0.0-b85/mpack.json", |
| "mpack_version" : "1.0.0-b85", |
| "registry_id" : 1 |
| } |
| } |
| ] |
| }, |
| { |
| "href" : "http://localhost:8080/api/v1/registries/1/mpacks/ODS", |
| "RegistryMpackInfo" : { |
| "mpack_description" : "Hortonworks Operational Data Store", |
| "mpack_id" : "ods", |
| "mpack_logo_uri" : "https://public-repo-1.hortonworks.com/logos/ods-logo.png", |
| "mpack_name" : "ODS", |
| "registry_id" : 1 |
| }, |
| "versions" : [ |
| { |
| "href" : "http://localhost:8080/api/v1/registries/1/mpacks/ODS/versions/1.0.0-b27", |
| "RegistryMpackVersionInfo" : { |
| "modules" : [ |
| { |
| "id" : "hbase", |
| "displayName" : "HBase", |
| "description" : "Non-relational distributed database and centralized service for configuration management &\n synchronization\n ", |
| "category" : "SERVER", |
| "name" : "HBASE", |
| "version" : "2.0.0.0-b23", |
| "definition" : "hbase-2.0.0.0-b23-definition.tar.gz", |
| "dependencies" : [ |
| { |
| "id" : "zookeeper_clients", |
| "name" : "ZOOKEEPER_CLIENTS", |
| "dependencyType" : "INSTALL" |
| } |
| ], |
| "components" : [ |
| { |
| "id" : "hbase_master", |
| "name" : "HBASE_MASTER", |
| "category" : "MASTER", |
| "isExternal" : false, |
| "version" : "2.0.0.0-b23" |
| }, |
| { |
| "id" : "hbase_regionserver", |
| "name" : "HBASE_REGIONSERVER", |
| "category" : "SLAVE", |
| "isExternal" : false, |
| "version" : "2.0.0.0-b23" |
| } |
| ] |
| }, |
| { |
| "id" : "hbase_clients", |
| "displayName" : "HBase", |
| "description" : "Non-relational distributed database and centralized service for configuration management &\n synchronization\n ", |
| "category" : "CLIENT", |
| "name" : "HBASE_CLIENTS", |
| "version" : "2.0.0.0-b23", |
| "definition" : "hbase_clients-2.0.0.0-b23-definition.tar.gz", |
| "dependencies" : [ |
| { |
| "id" : "zookeeper_clients", |
| "name" : "ZOOKEEPER_CLIENTS", |
| "dependencyType" : "INSTALL" |
| } |
| ], |
| "components" : [ |
| { |
| "id" : "hbase-client", |
| "name" : null, |
| "category" : null, |
| "isExternal" : null, |
| "version" : "2.0.0.0-b23" |
| } |
| ] |
| } |
| ], |
| "mpack_dependencies" : [ |
| { |
| "id" : "hdpcore", |
| "name" : "HDPCORE", |
| "minVersion" : "1.0.0", |
| "maxVersion" : "1.0.99" |
| } |
| ], |
| "mpack_description" : "Hortonworks Operational Data Store", |
| "mpack_doc_uri" : "http://docs.hortonworks.com/HDPDocuments/ODS1/ODS-1.0.0/index.html", |
| "mpack_id" : "ods", |
| "mpack_logo_uri" : "https://public-repo-1.hortonworks.com/logos/ods-logo.png", |
| "mpack_name" : "ODS", |
| "mpack_uri" : "http://dev.hortonworks.com.s3.amazonaws.com/ODS/centos7/1.x/BUILDS/1.0.0-b27/mpack.json", |
| "mpack_version" : "1.0.0-b27", |
| "registry_id" : 1 |
| } |
| } |
| ] |
| } |
| ], |
| "scenarios" : [ |
| { |
| "href" : "http://localhost:8080/api/v1/registries/1/scenarios/DataStore", |
| "RegistryScenarioInfo" : { |
| "registry_id" : 1, |
| "scenario_description" : "Operational Data Store", |
| "scenario_mpacks" : [ |
| { |
| "name" : "HDPCORE" |
| }, |
| { |
| "name" : "ODS" |
| } |
| ], |
| "scenario_name" : "DataStore" |
| } |
| }, |
| { |
| "href" : "http://localhost:8080/api/v1/registries/1/scenarios/Hadoop", |
| "RegistryScenarioInfo" : { |
| "registry_id" : 1, |
| "scenario_description" : "Hadoop Core Platform", |
| "scenario_mpacks" : [ |
| { |
| "name" : "HDPCORE" |
| } |
| ], |
| "scenario_name" : "Hadoop" |
| } |
| } |
| ] |
| } |
| ] |
| }; |
| |
| describe('App.WizardSelectMpacksController', function () { |
| describe('#registryLoaded - before loading registry', function () { |
| it('should not have a loaded registry', function () { |
| wizardController = App.InstallerController.create(); |
| wizardController.set('steps', [ |
| "step0", |
| "selectMpacks", |
| "step2", |
| "step3", |
| "step4" |
| ]); |
| |
| wizardSelectMpacksController = App.WizardSelectMpacksController.create({ |
| isSubmitDisabled: false, |
| selectedServices: null, |
| selectedMpackVersions: null, |
| content: { |
| selectedServices: null, |
| selectedServiceNames: null, |
| selectedMpacks: null |
| }, |
| wizardController: wizardController |
| }); |
| |
| expect(wizardSelectMpacksController.registryLoaded()).to.be.false; |
| }); |
| }); |
| }); |
| |
| describe('App.WizardSelectMpacksController', function () { |
| |
| before(function () { |
| wizardController = App.InstallerController.create(); |
| wizardController.set('steps', [ |
| "step0", |
| "selectMpacks", |
| "step2", |
| "step3", |
| "step4" |
| ]); |
| |
| wizardSelectMpacksController = App.WizardSelectMpacksController.create({ |
| isSubmitDisabled: false, |
| selectedServices: null, |
| selectedMpackVersions: null, |
| content: { |
| selectedServices: null, |
| selectedServiceNames: null, |
| selectedMpacks: null |
| }, |
| wizardController: wizardController |
| }); |
| |
| wizardSelectMpacksController.loadRegistrySucceeded(registry); |
| }); |
| |
| describe('#registryLoaded - after loading registry', function () { |
| it('should have a loaded registry', function () { |
| expect(wizardSelectMpacksController.registryLoaded()).to.be.true; |
| }) |
| }); |
| |
| describe('#loadStep', function () { |
| it('adds previously selected services to selection', function () { |
| wizardSelectMpacksController.set('content.selectedServices', [ |
| { id: "HDPCORE1.0.0-b85ZOOKEEPER" }, |
| { id: "HDPCORE1.0.0-b85HDFS" } |
| ]); |
| |
| wizardSelectMpacksController.loadStep(); |
| |
| var service = wizardSelectMpacksController.getServiceVersionById("HDPCORE1.0.0-b85ZOOKEEPER"); |
| expect(service.get('selected')).to.be.true; |
| expect(service.get('mpackVersion.selected')).to.be.true; |
| |
| var service = wizardSelectMpacksController.getServiceVersionById("HDPCORE1.0.0-b85HDFS"); |
| expect(service.get('selected')).to.be.true; |
| expect(service.get('mpackVersion.selected')).to.be.true; |
| }); |
| }); |
| |
| describe('#getMpacksByName', function () { |
| it('should return an array of mpacks matching the given names', function () { |
| //this test assumes that mpackNames contains the names of all mpacks in the test registry data at the top of this file |
| var mpackNames = [ |
| 'HDPCORE', |
| 'ODS' |
| ] |
| |
| var expected = wizardSelectMpacksController.get('content.mpacks'); |
| var actual = wizardSelectMpacksController.getMpacksByName(mpackNames); |
| |
| expect(actual.length).to.equal(expected.length); |
| for (var i = 0, length = actual.length; i < length; i++) { |
| expect(actual[i].get('mpack.name')).to.equal(expected[i].get('name')); |
| } |
| }); |
| }); |
| |
| describe('#getServiceVersionById', function () { |
| it('should return the correct service', function () { |
| var serviceVersions = [ |
| Em.Object.create({ id: 0 }), |
| Em.Object.create({ id: 1 }), |
| Em.Object.create({ id: 2 }), |
| ]; |
| wizardSelectMpacksController.set('content.mpackServiceVersions', serviceVersions); |
| |
| var actual = wizardSelectMpacksController.getServiceVersionById(1); |
| expect(actual).to.equal(serviceVersions[1]); |
| }); |
| }); |
| |
| describe('#getUsecaseById', function () { |
| it('should return the correct use case', function () { |
| var usecases = [ |
| Em.Object.create({ id: 0 }), |
| Em.Object.create({ id: 1 }), |
| Em.Object.create({ id: 2 }), |
| ]; |
| wizardSelectMpacksController.set('content.mpackUsecases', usecases); |
| |
| var actual = wizardSelectMpacksController.getUsecaseById(1); |
| expect(actual).to.equal(usecases[1]); |
| }); |
| }); |
| |
| describe('#getMpackVersionById', function () { |
| it('should return the correct mpack', function () { |
| var mpackVersions = [ |
| Em.Object.create({ id: 0 }), |
| Em.Object.create({ id: 1 }), |
| Em.Object.create({ id: 2 }), |
| ]; |
| wizardSelectMpacksController.set('content.mpackVersions', mpackVersions); |
| |
| var actual = wizardSelectMpacksController.getMpackVersionById(1); |
| expect(actual).to.equal(mpackVersions[1]); |
| }); |
| }); |
| |
| describe('#displayMpackVersion', function () { |
| var actual = { |
| mpack: { |
| versions: [ |
| Em.Object.create({ id: "1", displayed: true }), |
| Em.Object.create({ id: "2", displayed: false }), |
| Em.Object.create({ id: "3", displayed: false }), |
| Em.Object.create({ id: "4", displayed: false }), |
| ] |
| } |
| }; |
| |
| before(function () { |
| sinon.stub(wizardSelectMpacksController, 'getMpackVersionById').returns(actual); |
| }); |
| |
| it('should set chosen mpack version to displayed and set others to not displayed', function () { |
| var expected = { |
| mpack: { |
| versions: [ |
| Em.Object.create({ id: "1", displayed: false }), |
| Em.Object.create({ id: "2", displayed: false }), |
| Em.Object.create({ id: "3", displayed: true }), |
| Em.Object.create({ id: "4", displayed: false }), |
| ] |
| } |
| }; |
| |
| wizardSelectMpacksController.displayMpackVersion("3"); |
| expect(actual).to.deep.equal(expected); |
| }); |
| |
| after(function () { |
| wizardSelectMpacksController.getMpackVersionById.restore(); |
| }); |
| }); |
| |
| describe('#displayServiceVersion', function () { |
| var actual = { |
| service: { |
| versions: [ |
| Em.Object.create({ id: "1", displayed: true }), |
| Em.Object.create({ id: "2", displayed: false }), |
| Em.Object.create({ id: "3", displayed: false }), |
| Em.Object.create({ id: "4", displayed: false }), |
| ] |
| } |
| }; |
| |
| before(function () { |
| sinon.stub(wizardSelectMpacksController, 'getServiceVersionById').returns(actual); |
| }); |
| |
| it('should set chosen service version to displayed and set others to not displayed', function () { |
| var expected = { |
| service: { |
| versions: [ |
| Em.Object.create({ id: "1", displayed: false }), |
| Em.Object.create({ id: "2", displayed: false }), |
| Em.Object.create({ id: "3", displayed: true }), |
| Em.Object.create({ id: "4", displayed: false }), |
| ] |
| } |
| }; |
| |
| wizardSelectMpacksController.displayServiceVersion("3"); |
| expect(actual).to.deep.equal(expected); |
| }); |
| |
| after(function () { |
| wizardSelectMpacksController.getServiceVersionById.restore(); |
| }); |
| }); |
| |
| describe('#addServiceHandler', function () { |
| var actual; |
| |
| before(function () { |
| var initial = Em.Object.create({ |
| "0": true, |
| "1": true, |
| "2": true, |
| "3": true, |
| "4": true |
| }) |
| wizardSelectMpacksController.set('wizardController.content.stepsSavedState', initial); |
| |
| actual = Em.Object.create({ |
| selected: false, |
| mpackVersion: { |
| selected: false, |
| services: [ |
| actual, |
| Em.Object.create({ selected: false }) |
| ] |
| } |
| }); |
| |
| sinon.stub(wizardSelectMpacksController, 'getServiceVersionById').returns(actual); |
| }); |
| |
| after(function () { |
| wizardSelectMpacksController.getServiceVersionById.restore(); |
| }); |
| |
| it('should set the service and its mpack to selected and set the step to unsaved', function () { |
| var expected = Em.Object.create({ |
| selected: true, |
| mpackVersion: { |
| selected: true, |
| services: [ |
| expected, |
| Em.Object.create({ selected: false }) |
| ] |
| } |
| }); |
| |
| wizardSelectMpacksController.addServiceHandler("HDPCore3.0.0ZOOKEEPER"); |
| expect(actual).to.deep.equal(expected); |
| |
| var final = Em.Object.create({ |
| "0": true, |
| "1": false, |
| "2": true, |
| "3": true, |
| "4": true |
| }); |
| var savedState = wizardSelectMpacksController.get('wizardController.content.stepsSavedState'); |
| expect(savedState).to.deep.equal(final); |
| }); |
| }); |
| |
| describe('#removeServiceHandler', function () { |
| beforeEach(function () { |
| var initial = Em.Object.create({ |
| "0": true, |
| "1": true, |
| "2": true, |
| "3": true, |
| "4": true |
| }) |
| wizardSelectMpacksController.set('wizardController.content.stepsSavedState', initial); |
| }); |
| |
| afterEach(function () { |
| var final = Em.Object.create({ |
| "0": true, |
| "1": false, |
| "2": true, |
| "3": true, |
| "4": true |
| }); |
| var savedState = wizardSelectMpacksController.get('wizardController.content.stepsSavedState'); |
| expect(savedState).to.deep.equal(final); |
| |
| wizardSelectMpacksController.getServiceVersionById.restore(); |
| }); |
| |
| it('should set only the service to not selected and set the step to unsaved', function () { |
| var actual = Em.Object.create({ |
| selected: true, |
| mpackVersion: { |
| selected: true, |
| services: [] |
| } |
| }); |
| actual.set('mpackVersion.services', [ |
| actual, |
| Em.Object.create({ selected: true }) |
| ]); |
| |
| sinon.stub(wizardSelectMpacksController, 'getServiceVersionById').returns(actual); |
| |
| wizardSelectMpacksController.removeServiceHandler("HDPCore3.0.0ZOOKEEPER"); |
| expect(actual.get('selected')).to.be.false; |
| expect(actual.get('mpackVersion.selected')).to.be.true; |
| }); |
| |
| it('when removing the last service, it should set the service and its mpack to not selected and set the step to unsaved', function () { |
| var actual = Em.Object.create({ |
| selected: true, |
| mpackVersion: { |
| selected: true, |
| services: [] |
| } |
| }); |
| actual.set('mpackVersion.services', [ |
| actual, |
| Em.Object.create({ selected: false }) |
| ]); |
| |
| sinon.stub(wizardSelectMpacksController, 'getServiceVersionById').returns(actual); |
| |
| wizardSelectMpacksController.removeServiceHandler("HDPCore3.0.0ZOOKEEPER"); |
| expect(actual.get('selected')).to.be.false; |
| expect(actual.get('mpackVersion.selected')).to.be.false; |
| }); |
| }); |
| |
| describe('#addMpackHandler', function () { |
| var actual; |
| |
| before(function () { |
| var initial = Em.Object.create({ |
| "0": true, |
| "1": true, |
| "2": true, |
| "3": true, |
| "4": true |
| }) |
| wizardSelectMpacksController.set('wizardController.content.stepsSavedState', initial); |
| |
| var service0 = Em.Object.create({ |
| id: 0, |
| selected: false |
| }); |
| |
| var service1 = Em.Object.create({ |
| id: 1, |
| selected: false |
| }); |
| |
| actual = Em.Object.create({ |
| selected: false, |
| services: [ |
| service0, |
| service1 |
| ] |
| }); |
| |
| actual.get('services')[0].set('mpackVersion', actual); |
| actual.get('services')[1].set('mpackVersion', actual); |
| |
| sinon.stub(wizardSelectMpacksController, 'getMpackVersionById').returns(actual); |
| sinon.stub(wizardSelectMpacksController, 'getServiceVersionById') |
| .withArgs(0).returns(service0) |
| .withArgs(1).returns(service1); |
| }); |
| |
| after(function () { |
| wizardSelectMpacksController.getMpackVersionById.restore(); |
| wizardSelectMpacksController.getServiceVersionById.restore(); |
| }); |
| |
| it('should set the mpack and all of its services to selected and set the step to unsaved', function () { |
| var expected = Em.Object.create({ |
| selected: true, |
| services: [ |
| Em.Object.create({ |
| id: 0, |
| selected: true |
| }), |
| Em.Object.create({ |
| id: 1, |
| selected: true |
| }) |
| ] |
| }); |
| expected.get('services')[0].set('mpackVersion', expected); |
| expected.get('services')[1].set('mpackVersion', expected); |
| |
| wizardSelectMpacksController.addMpackHandler("HDPCore3.0.0"); |
| expect(actual).to.deep.equal(expected); |
| |
| var final = Em.Object.create({ |
| "0": true, |
| "1": false, |
| "2": true, |
| "3": true, |
| "4": true |
| }); |
| var savedState = wizardSelectMpacksController.get('wizardController.content.stepsSavedState'); |
| expect(savedState).to.deep.equal(final); |
| }); |
| }); |
| |
| describe('#removeMpackHandler', function () { |
| before(function () { |
| var initial = Em.Object.create({ |
| "0": true, |
| "1": true, |
| "2": true, |
| "3": true, |
| "4": true |
| }) |
| wizardSelectMpacksController.set('wizardController.content.stepsSavedState', initial); |
| |
| var service0 = Em.Object.create({ |
| id: 0, |
| selected: true |
| }); |
| |
| var service1 = Em.Object.create({ |
| id: 1, |
| selected: true |
| }); |
| |
| actual = Em.Object.create({ |
| selected: true, |
| services: [ |
| service0, |
| service1 |
| ] |
| }); |
| |
| actual.get('services')[0].set('mpackVersion', actual); |
| actual.get('services')[1].set('mpackVersion', actual); |
| |
| sinon.stub(wizardSelectMpacksController, 'getMpackVersionById').returns(actual); |
| sinon.stub(wizardSelectMpacksController, 'getServiceVersionById') |
| .withArgs(0).returns(service0) |
| .withArgs(1).returns(service1); |
| }); |
| |
| after(function () { |
| wizardSelectMpacksController.getMpackVersionById.restore(); |
| wizardSelectMpacksController.getServiceVersionById.restore(); |
| }); |
| |
| it('should set the mpack and all its services to not selected and set the step to unsaved', function () { |
| var expected = Em.Object.create({ |
| selected: false, |
| services: [ |
| Em.Object.create({ |
| id: 0, |
| selected: false |
| }), |
| Em.Object.create({ |
| id: 1, |
| selected: false |
| }) |
| ] |
| }); |
| expected.get('services')[0].set('mpackVersion', expected); |
| expected.get('services')[1].set('mpackVersion', expected); |
| |
| wizardSelectMpacksController.removeMpackHandler("HDPCore3.0.0"); |
| expect(actual).to.deep.equal(expected); |
| |
| var final = Em.Object.create({ |
| "0": true, |
| "1": false, |
| "2": true, |
| "3": true, |
| "4": true |
| }); |
| var savedState = wizardSelectMpacksController.get('wizardController.content.stepsSavedState'); |
| expect(savedState).to.deep.equal(final); |
| }); |
| }); |
| |
| describe('#clearSelection', function () { |
| var initial, servicesActual, versionsActual, usecasesActual, expected, final; |
| |
| beforeEach(function () { |
| initial = Em.Object.create({ |
| "0": true, |
| "1": true, |
| "2": true, |
| "3": true, |
| "4": true |
| }); |
| wizardSelectMpacksController.set('wizardController.content.stepsSavedState', initial); |
| |
| final = Em.Object.create({ |
| "0": true, |
| "1": false, |
| "2": true, |
| "3": true, |
| "4": true |
| }); |
| |
| servicesActual = [ |
| Em.Object.create({ selected: true }), |
| Em.Object.create({ selected: true }), |
| Em.Object.create({ selected: true }) |
| ]; |
| wizardSelectMpacksController.set('content.mpackServiceVersions', servicesActual); |
| |
| versionsActual = [ |
| Em.Object.create({ selected: true }), |
| Em.Object.create({ selected: true }), |
| Em.Object.create({ selected: true }) |
| ]; |
| wizardSelectMpacksController.set('content.mpackVersions', versionsActual); |
| |
| usecasesActual = [ |
| Em.Object.create({ selected: true }), |
| Em.Object.create({ selected: true }), |
| Em.Object.create({ selected: true }) |
| ]; |
| wizardSelectMpacksController.set('content.mpackUsecases', usecasesActual); |
| |
| expected = [ |
| Em.Object.create({ selected: false }), |
| Em.Object.create({ selected: false }), |
| Em.Object.create({ selected: false }) |
| ]; |
| }); |
| |
| it('should set all services and mpacks to be unselected and set the step to unsaved', function () { |
| wizardSelectMpacksController.set('content.advancedMode', false); |
| wizardSelectMpacksController.clearSelection(); |
| expect(servicesActual).to.deep.equal(expected); |
| expect(versionsActual).to.deep.equal(expected); |
| |
| //should not be changed |
| expect(usecasesActual).to.deep.equal([ |
| Em.Object.create({ selected: true }), |
| Em.Object.create({ selected: true }), |
| Em.Object.create({ selected: true }) |
| ]); |
| |
| var savedState = wizardSelectMpacksController.get('wizardController.content.stepsSavedState'); |
| expect(savedState).to.deep.equal(final); |
| }); |
| |
| it('should set all usecases to be unselected in advanced mode', function () { |
| wizardSelectMpacksController.set('content.advancedMode', true); |
| wizardSelectMpacksController.clearSelection(); |
| expect(servicesActual).to.deep.equal(expected); |
| expect(versionsActual).to.deep.equal(expected); |
| expect(usecasesActual).to.deep.equal(expected); |
| |
| var savedState = wizardSelectMpacksController.get('wizardController.content.stepsSavedState'); |
| expect(savedState).to.deep.equal(final); |
| }); |
| }); |
| |
| describe('#submit', function () { |
| it('should populate content.selectedServices, content.selectedServiceNames, and content.selectedMpacks', function () { |
| wizardSelectMpacksController.set('selectedServices', [ |
| { |
| id: "id1", |
| name: "name1", |
| mpackVersion: { |
| mpack: { name: "mpackName1" }, |
| name: "mpackName1", |
| version: "1.0.0.0" |
| } |
| }, |
| { |
| id: "id2", |
| name: "name2", |
| mpackVersion: { |
| mpack: { name: "mpackName2" }, |
| name: "mpackName2", |
| version: "1.0.0.0" |
| } |
| } |
| ]); |
| |
| wizardSelectMpacksController.set('selectedMpackVersions', [ |
| { |
| mpack: { |
| name: "mpackName1", |
| displayName: "displayName1" |
| }, |
| mpackUrl: "http://someurl.com/mpack1", |
| version: "1.0.0.0" |
| }, |
| { |
| mpack: { |
| name: "mpackName2", |
| displayName: "displayName2" |
| }, |
| mpackUrl: "http://someurl.com/mpack2", |
| version: "1.0.0.0" |
| } |
| ]); |
| |
| var expectedSelectedServices = [ |
| { |
| id: "id1", |
| name: "name1", |
| mpackName: "mpackName1", |
| mpackVersion: "1.0.0.0" |
| }, |
| { |
| id: "id2", |
| name: "name2", |
| mpackName: "mpackName2", |
| mpackVersion: "1.0.0.0" |
| } |
| ]; |
| |
| var expectedSelectedServiceNames = [ |
| "name1", |
| "name2" |
| ]; |
| |
| var expectedSelectedMpacks = [ |
| { |
| id: "mpackName1-1.0.0.0", |
| name: "mpackName1", |
| displayName: "displayName1", |
| publicUrl: "http://someurl.com/mpack1", |
| downloadUrl: "http://someurl.com/mpack1", |
| version: "1.0.0.0" |
| }, |
| { |
| id: "mpackName2-1.0.0.0", |
| name: "mpackName2", |
| displayName: "displayName2", |
| publicUrl: "http://someurl.com/mpack2", |
| downloadUrl: "http://someurl.com/mpack2", |
| version: "1.0.0.0" |
| } |
| ]; |
| |
| sinon.stub(App.router, 'send'); |
| wizardSelectMpacksController.submit(); |
| App.router.send.restore(); |
| |
| expect(wizardSelectMpacksController.get('content.selectedServices')).to.deep.equal(expectedSelectedServices); |
| expect(wizardSelectMpacksController.get('content.selectedServiceNames')).to.deep.equal(expectedSelectedServiceNames); |
| expect(wizardSelectMpacksController.get('content.selectedMpacks')).to.deep.equal(expectedSelectedMpacks); |
| }); |
| }); |
| |
| describe('#toggleUsecaseHandler', function () { |
| beforeEach(function () { |
| var initial = Em.Object.create({ |
| "0": true, |
| "1": true, |
| "2": true, |
| "3": true, |
| "4": true |
| }) |
| wizardSelectMpacksController.set('wizardController.content.stepsSavedState', initial); |
| |
| sinon.stub(wizardSelectMpacksController, 'getUsecaseRecommendation').returns({ |
| done: sinon.stub().returns({ fail: sinon.stub() }) |
| }); |
| }); |
| |
| afterEach(function () { |
| var final = Em.Object.create({ |
| "0": true, |
| "1": false, |
| "2": true, |
| "3": true, |
| "4": true |
| }); |
| var savedState = wizardSelectMpacksController.get('wizardController.content.stepsSavedState'); |
| expect(savedState).to.deep.equal(final); |
| |
| wizardSelectMpacksController.getUsecaseById.restore(); |
| wizardSelectMpacksController.getUsecaseRecommendation.restore(); |
| }); |
| |
| it('should select usecase when it is not already selected', function () { |
| var actual = Em.Object.create({ |
| selected: false |
| }); |
| |
| wizardSelectMpacksController.set('content.mpackUsecases', [ |
| Em.Object.create({ |
| selected: false |
| }), |
| actual |
| ]); |
| |
| sinon.stub(wizardSelectMpacksController, 'getUsecaseById').returns(actual); |
| |
| wizardSelectMpacksController.toggleUsecaseHandler("DataScience"); |
| expect(actual.get('selected')).to.be.true; |
| expect(wizardSelectMpacksController.getUsecaseRecommendation).to.have.been.called; |
| }); |
| |
| it('should deselect use case when it is already selected', function () { |
| var actual = Em.Object.create({ |
| selected: true |
| }); |
| |
| wizardSelectMpacksController.set('content.mpackUsecases', [ |
| Em.Object.create({ |
| selected: true |
| }), |
| actual |
| ]); |
| |
| sinon.stub(wizardSelectMpacksController, 'getUsecaseById').returns(actual); |
| sinon.stub(wizardSelectMpacksController, 'clearSelection'); |
| |
| wizardSelectMpacksController.toggleUsecaseHandler("DataScience"); |
| expect(actual.get('selected')).to.be.false; |
| expect(wizardSelectMpacksController.getUsecaseRecommendation).to.have.been.called; |
| |
| wizardSelectMpacksController.clearSelection.restore(); |
| }); |
| |
| it('should not call getUsecaseRecommendation when no use cases are selected', function () { |
| var actual = Em.Object.create({ |
| selected: true |
| }); |
| |
| wizardSelectMpacksController.set('content.mpackUsecases', [ |
| Em.Object.create({ |
| selected: false |
| }), |
| actual |
| ]); |
| |
| sinon.stub(wizardSelectMpacksController, 'getUsecaseById').returns(actual); |
| sinon.stub(wizardSelectMpacksController, 'clearSelection'); |
| |
| wizardSelectMpacksController.toggleUsecaseHandler("DataScience"); |
| expect(actual.get('selected')).to.be.false; |
| expect(wizardSelectMpacksController.getUsecaseRecommendation).to.not.have.been.called; |
| |
| wizardSelectMpacksController.clearSelection.restore(); |
| }); |
| }); |
| |
| describe('#toggleMode', function () { |
| it('should set mode to advanced', function () { |
| wizardSelectMpacksController.set('content.advancedMode', false); |
| wizardSelectMpacksController.toggleMode(); |
| expect(wizardSelectMpacksController.get('content.advancedMode')).to.be.true; |
| }); |
| |
| it('should set mode to basic', function () { |
| wizardSelectMpacksController.set('content.advancedMode', true); |
| sinon.stub(wizardSelectMpacksController, 'clearSelection'); |
| |
| wizardSelectMpacksController.toggleMode(); |
| |
| expect(wizardSelectMpacksController.get('content.advancedMode')).to.be.false; |
| expect(wizardSelectMpacksController.clearSelection).to.have.been.called |
| |
| wizardSelectMpacksController.clearSelection.restore(); |
| }); |
| }); |
| |
| describe('#filteredMpacks', function () { |
| var mpacks = [ |
| Em.Object.create({ |
| filterOn: "alphabravo" |
| }), |
| Em.Object.create({ |
| filterOn: "alphacharlie" |
| }), |
| Em.Object.create({ |
| filterOn: "bravodelta" |
| }) |
| ]; |
| |
| beforeEach(function () { |
| wizardSelectMpacksController.set('content.mpacks', mpacks); |
| wizardSelectMpacksController.set('filterMpacksText', 'alpha'); |
| }) |
| |
| it('should return the correctly filtered mpacks', function () { |
| var expected = [ |
| Em.Object.create({ |
| filterOn: "alphabravo" |
| }), |
| Em.Object.create({ |
| filterOn: "alphacharlie" |
| }) |
| ]; |
| |
| var actual = wizardSelectMpacksController.get('filteredMpacks'); |
| |
| expect(actual).to.deep.equal(expected); |
| }); |
| |
| it('should return all mpacks when there is no filter text', function () { |
| wizardSelectMpacksController.clearFilterMpacks(); |
| |
| var actual = wizardSelectMpacksController.get('filteredMpacks'); |
| |
| expect(actual).to.deep.equal(mpacks); |
| }); |
| }); |
| |
| describe('#filteredServices', function () { |
| var services = [ |
| Em.Object.create({ |
| filterOn: "alphabravo" |
| }), |
| Em.Object.create({ |
| filterOn: "alphacharlie" |
| }), |
| Em.Object.create({ |
| filterOn: "bravodelta" |
| }) |
| ]; |
| |
| beforeEach(function () { |
| wizardSelectMpacksController.set('content.mpackServices', services); |
| wizardSelectMpacksController.set('filterServicesText', 'alpha'); |
| }) |
| |
| it('should return the correctly filtered services', function () { |
| var expected = [ |
| Em.Object.create({ |
| filterOn: "alphabravo" |
| }), |
| Em.Object.create({ |
| filterOn: "alphacharlie" |
| }) |
| ]; |
| |
| var actual = wizardSelectMpacksController.get('filteredServices'); |
| |
| expect(actual).to.deep.equal(expected); |
| }); |
| |
| it('should return all services when there is no filter text', function () { |
| wizardSelectMpacksController.clearFilterServices(); |
| |
| var actual = wizardSelectMpacksController.get('filteredServices'); |
| |
| expect(actual).to.deep.equal(services); |
| }); |
| }); |
| }); |