Repository: ambari Updated Branches: refs/heads/trunk f37d4c940 -> 7e7b6709d
AMBARI-5540 Add unit tests and refactor controllers/main/service/item.js. (ababiichuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7e7b6709 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7e7b6709 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7e7b6709 Branch: refs/heads/trunk Commit: 7e7b6709d0fbf7b5c3748ef3e6838c01d52d2520 Parents: f37d4c9 Author: aBabiichuk <ababiic...@cybervisiontech.com> Authored: Wed Apr 23 15:21:16 2014 +0300 Committer: aBabiichuk <ababiic...@cybervisiontech.com> Committed: Wed Apr 23 15:24:16 2014 +0300 ---------------------------------------------------------------------- ambari-web/app/controllers/main/service/item.js | 37 +- ambari-web/test/controllers/main/item_test.js | 695 ++++++++++++++++++- 2 files changed, 705 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/7e7b6709/ambari-web/app/controllers/main/service/item.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/item.js b/ambari-web/app/controllers/main/service/item.js index 85883ee..ac7d5b8 100644 --- a/ambari-web/app/controllers/main/service/item.js +++ b/ambari-web/app/controllers/main/service/item.js @@ -98,7 +98,7 @@ App.MainServiceItemController = Em.Controller.extend({ additionalWarningMsg: isMaintenanceOFF && serviceHealth == 'INSTALLED'? Em.I18n.t('services.service.stop.warningMsg.turnOnMM').format(serviceDisplayName) : null }); - App.showConfirmationFeedBackPopup(function(query) { + return App.showConfirmationFeedBackPopup(function(query) { self.set('isPending', true); self.startStopPopupPrimary(serviceHealth, query); }, bodyMessage); @@ -150,8 +150,8 @@ App.MainServiceItemController = Em.Controller.extend({ */ runRebalancer: function (event) { var self = this; - App.showConfirmationPopup(function() { - self.content.set('runRebalancer', true); + return App.showConfirmationPopup(function() { + self.set("content.runRebalancer", true); // load data (if we need to show this background operations popup) from persist App.router.get('applicationController').dataLoading().done(function (initValue) { if (initValue) { @@ -167,8 +167,8 @@ App.MainServiceItemController = Em.Controller.extend({ */ runCompaction: function (event) { var self = this; - App.showConfirmationPopup(function() { - self.content.set('runCompaction', true); + return App.showConfirmationPopup(function() { + self.set("content.runCompaction", true); // load data (if we need to show this background operations popup) from persist App.router.get('applicationController').dataLoading().done(function (initValue) { if (initValue) { @@ -185,10 +185,9 @@ App.MainServiceItemController = Em.Controller.extend({ runSmokeTest: function (event) { var self = this; if (this.get('content.serviceName') === 'MAPREDUCE2' && !App.Service.find('YARN').get('isStarted')) { - App.showAlertPopup(Em.I18n.t('common.error'), Em.I18n.t('services.mapreduce2.smokeTest.requirement')); - return; + return App.showAlertPopup(Em.I18n.t('common.error'), Em.I18n.t('services.mapreduce2.smokeTest.requirement')); } - App.showConfirmationFeedBackPopup(function(query) { + return App.showConfirmationFeedBackPopup(function(query) { self.runSmokeTestPrimary(query); }); }, @@ -200,7 +199,7 @@ App.MainServiceItemController = Em.Controller.extend({ confirmButton: Em.I18n.t('services.service.restartAll.confirmButton'), additionalWarningMsg: this.get('content.passiveState') === 'OFF' ? Em.I18n.t('services.service.restartAll.warningMsg.turnOnMM').format(serviceDisplayName): null }); - App.showConfirmationFeedBackPopup(function(query) { + return App.showConfirmationFeedBackPopup(function(query) { batchUtils.restartAllServiceHostComponents(serviceName, false, query); }, bodyMessage); }, @@ -209,7 +208,7 @@ App.MainServiceItemController = Em.Controller.extend({ var self = this; var state = this.get('content.passiveState') == 'OFF' ? 'ON' : 'OFF'; var onOff = state === 'ON' ? "On" : "Off"; - App.showConfirmationPopup(function() { + return App.showConfirmationPopup(function() { self.turnOnOffPassiveRequest(state, label) }, Em.I18n.t('hosts.passiveMode.popup').format(onOff,self.get('content.displayName')) @@ -282,11 +281,13 @@ App.MainServiceItemController = Em.Controller.extend({ reassignMaster: function (hostComponent) { var component = App.HostComponent.find().findProperty('componentName', hostComponent); console.log('In Reassign Master', hostComponent); - var reassignMasterController = App.router.get('reassignMasterController'); - reassignMasterController.saveComponentToReassign(component); - reassignMasterController.getSecurityStatus(); - reassignMasterController.setCurrentStep('1'); - App.router.transitionTo('reassign'); + if (component) { + var reassignMasterController = App.router.get('reassignMasterController'); + reassignMasterController.saveComponentToReassign(component); + reassignMasterController.getSecurityStatus(); + reassignMasterController.setCurrentStep('1'); + App.router.transitionTo('reassign'); + } }, /** @@ -311,12 +312,16 @@ App.MainServiceItemController = Em.Controller.extend({ refreshConfigs: function() { var self = this; if (this.get('content.isClientsOnly')) { - App.showConfirmationFeedBackPopup(function(query) { + return App.showConfirmationFeedBackPopup(function(query) { batchUtils.restartHostComponents(self.get('content.hostComponents'), Em.I18n.t('rollingrestart.context.allForSelectedService').format(self.get('content.serviceName')), query); }); } }, + /** + * set property isPending (if this property is true - means that service has task in BGO) + * and this makes start/stop button disabled + */ setStartStopState: function () { var serviceName = this.get('content.serviceName'); var backgroundOperations = App.router.get('backgroundOperationsController.services'); http://git-wip-us.apache.org/repos/asf/ambari/blob/7e7b6709/ambari-web/test/controllers/main/item_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/item_test.js b/ambari-web/test/controllers/main/item_test.js index 5f57dbf..f7b43ed 100644 --- a/ambari-web/test/controllers/main/item_test.js +++ b/ambari-web/test/controllers/main/item_test.js @@ -16,20 +16,693 @@ * limitations under the License. */ -/* -var App = require('app'); +App = require('app'); +require('ember'); +require('models/host_component') require('views/common/modal_popup'); +require('mixins/common/userPref'); +require('controllers/application'); +require('controllers/global/background_operations_controller'); +require('controllers/global/cluster_controller'); +require('controllers/main/service/reassign_controller') require('controllers/main/service/item'); +var batchUtils = require('utils/batch_scheduled_requests'); describe('App.MainServiceItemController', function () { - describe('#showRebalancer', function () { - it('should return true if serviceName is hdfs', function () { - var mainServiceItemController = App.MainServiceItemController.create({ - }); - mainServiceItemController.content.set('serviceName', 'hdfs'); - expect(mainServiceItemController.get('showRebalancer')).to.equal(true); - }) + describe('#setStartStopState', function () { + var tests = [ + { + serviceController: { + serviceName: "YARN" + }, + backgroundOperationsController: { + services: [ + { + isRunning: true, + dependentService: "ALL_SERVICES" + } + ] + }, + isPending: true, + m: 'operaion is active because all services are running' + }, + { + serviceController: { + serviceName: "HBASE" + }, + backgroundOperationsController: { + services: [ + { + isRunning: true, + dependentService: "HBASE" + } + ] + }, + isPending: true, + m: 'operaion is active button because current service is running' + }, + { + serviceController: { + serviceName: "HDFS" + }, + backgroundOperationsController: { + services: [ + + ] + }, + isPending: true, + m: 'pending is true - backgroundOperationsController.services is empty' + }, + { + serviceController: { + serviceName: "HBASE" + }, + backgroundOperationsController: { + services: [ + { + isRunning: false, + dependentService: "ALL_SERVICES" + } + ] + }, + isPending: false, + m: 'pending is false - operation is not running' + }, + { + serviceController: { + serviceName: "HBASE" + }, + backgroundOperationsController: { + services: [ + { + isRunning: true, + dependentService: "HDFS" + } + ] + }, + isPending: false, + m: 'pending is false - current service is not running' + } + ]; + + + tests.forEach(function (test) { + it(test.m, function () { + var backgroundOperationsController = App.BackgroundOperationsController.create(); + backgroundOperationsController.set('services', []); + test.backgroundOperationsController.services.forEach(function (service) { + backgroundOperationsController.get('services').push(service); + }); + backgroundOperationsController.set("serviceTimestamp", new Date().getTime()); + App.router.set('backgroundOperationsController', backgroundOperationsController); + var mainServiceItemController = App.MainServiceItemController.create({content: {serviceName: test.serviceController.serviceName}}); + mainServiceItemController.setStartStopState(); + expect(mainServiceItemController.get('isPending')).to.equal(test.isPending); + }); + }) + }); + + describe('#reassignMaster()', function () { + var v; + var tests = [ + { + host_components: [ + {component_name: "RESOURCEMANGER"} + ], + conponentName: "RESOURCEMANGER", + result: true, + m: 'run reassignMaster' + }, + { + host_components: [ + {component_name: "RESOURCEMANGER"} + ], + conponentName: "DATANODE", + result: false, + m: 'don\t run reassignMaster' + } + ]; + + tests.forEach(function (test) { + var reassignMasterController = App.ReassignMasterController.create({currentStep: ''}); + beforeEach(function () { + sinon.spy(reassignMasterController, 'saveComponentToReassign'); + sinon.spy(reassignMasterController, 'getSecurityStatus'); + sinon.spy(reassignMasterController, 'setCurrentStep'); + App.router.transitionTo = Em.K; + }); + afterEach(function () { + reassignMasterController.saveComponentToReassign.restore(); + reassignMasterController.getSecurityStatus.restore(); + reassignMasterController.setCurrentStep.restore(); + App.router.transitionTo = v; + }); + it(test.m, function () { + v = App.router.transitionTo; + var mainServiceItemController = App.MainServiceItemController.create({}); + App.router.set('reassignMasterController', reassignMasterController); + App.store.loadMany(App.HostComponent, test.host_components); + mainServiceItemController.reassignMaster(test.conponentName); + expect(reassignMasterController.saveComponentToReassign.calledOnce).to.equal(test.result); + expect(reassignMasterController.getSecurityStatus.calledOnce).to.equal(test.result); + expect(reassignMasterController.setCurrentStep.calledOnce).to.equal(test.result); + }); + }, this); + }); + + describe("#updateService", function () { + + var tests = [ + { + params: { + passive_state: "ON" + }, + m: "turn on passive" + }, + { + params: { + passive_state: "OFF" + }, + m: "turn off passive" + } + ]; + tests.forEach(function (test) { + it(test.m, function () { + var clusterController = App.ClusterController.create(); + App.router.set('clusterController', clusterController); + var mainServiceItemController = App.MainServiceItemController.create({content: {passiveState: "ON"}}); + mainServiceItemController.updateService(null, null, test.params); + expect(mainServiceItemController.get('content.passiveState')).to.equal(test.params.passive_state); + }); + }); + }); + + describe("#doAction", function () { + + var el = document.createElement("BUTTON"); + el.disabled = false; + var tests = [ + { + event: { + target: el, + context: { + action: 'runSmokeTest' + } + }, + m: "run runSmokeTest" + }, + { + event: { + target: el, + context: { + action: 'refreshConfigs' + } + }, + m: "run refreshConfigs" + }, + { + event: { + target: el, + context: { + action: 'restartAllHostComponents' + } + }, + m: "run restartAllHostComponents" + }, + { + event: { + target: el, + context: { + action: 'rollingRestart' + } + }, + m: "run rollingRestart" + } + ]; + + tests.forEach(function (test) { + var mainServiceItemController = App.MainServiceItemController.create({}); + mainServiceItemController.set(test.event.context.action, Em.K); + beforeEach(function () { + sinon.spy(mainServiceItemController, test.event.context.action); + }); + afterEach(function () { + mainServiceItemController[test.event.context.action].restore(); + }); + it(test.m, function () { + mainServiceItemController.doAction(test.event); + expect(mainServiceItemController[test.event.context.action].calledOnce).to.equal(!test.event.target.disabled); + }); + }); + }); + + describe("#startStopPopupPrimary", function () { + + + var tests = [ + { + data: { + "serviceName": "HDFS", + "state": "STARTED", + "query": Em.Object.create({ServiceInfo: "FAIL"}) + }, + request: { + "RequestInfo": { + "context": "_PARSE_.START.HDFS" + }, + "Body": { + "ServiceInfo": { + "state": "STARTED" + } + } + }, + m: "Start HDFS" + }, + { + data: { + "serviceName": "YARN", + "state": "STOPPED", + "query": Em.Object.create({ServiceInfo: "FAIL"}) + }, + request: { + "RequestInfo": { + "context": "_PARSE_.STOP.YARN" + }, + "Body": { + "ServiceInfo": { + "state": "STOPPED" + } + } + }, + m: "Stop YARN" + } + ]; + + beforeEach(function () { + sinon.spy($, 'ajax'); + }); + + afterEach(function () { + $.ajax.restore(); + }); + + + tests.forEach(function (test) { + it('', function () { + var mainServiceItemController = App.MainServiceItemController.create({content: {serviceName: test.data.serviceName}}); + mainServiceItemController.startStopPopupPrimary(test.data.state, test.data.query); + expect($.ajax.calledOnce).to.equal(true); + + expect(JSON.parse($.ajax.args[0][0].data).Body.ServiceInfo.state).to.equal(test.request.Body.ServiceInfo.state); + expect(JSON.parse($.ajax.args[0][0].data).RequestInfo.context).to.equal(test.request.RequestInfo.context); + + expect(mainServiceItemController.get('isStopDisabled')).to.equal(true); + expect(mainServiceItemController.get('isStartDisabled')).to.equal(true); + }); + }); + + + }); + + describe("#startStopPopupSuccessCallback", function () { + + var data = { + Requests: true + }; + var params = Em.Object.create({ + query: Em.Object.create() + }); + var ajaxOptions = { + data: '{"RequestInfo":{"context":"_PARSE_.STOP.ZOOKEEPER"},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' + }; + + var content = { + workStatus: "", + hostComponents: [ + { + workStatus: "" + } + ] + }; + + var mainServiceItemController = App.MainServiceItemController.create({content: content}); + var applicationController = App.ApplicationController.create(App.UserPref, {}); + var clusterController = App.ClusterController.create({loadUpdatedStatusDelayed: Em.K}); + var backgroundOperationsController = App.BackgroundOperationsController.create({showPopup: Em.K}); + App.testMode = false; + beforeEach(function () { + App.testMode = false; + sinon.spy(clusterController, "loadUpdatedStatusDelayed"); + }); + afterEach(function () { + clusterController.loadUpdatedStatusDelayed.restore(); + App.testMode = true; + }); + it("open bgo popup", function () { + App.router.set('applicationController', applicationController); + App.router.set('clusterController', clusterController); + App.router.set('backgroundOperationsController', backgroundOperationsController); + mainServiceItemController.startStopPopupSuccessCallback(data, ajaxOptions, params); + expect(clusterController.loadUpdatedStatusDelayed.calledOnce).to.equal(true); }) -}) -*/ + }); + + + describe("#startService , #stopService", function () { + var mainServiceItemController = App.MainServiceItemController.create({startStopPopup: Em.K}); + beforeEach(function () { + sinon.spy(mainServiceItemController, "startStopPopup"); + }); + afterEach(function () { + mainServiceItemController.startStopPopup.restore(); + }); + it("start service", function () { + mainServiceItemController.startService({}); + expect(mainServiceItemController.startStopPopup.calledWith({},App.HostComponentStatus.started)).to.equal(true); + }); + it("stop service", function () { + mainServiceItemController.stopService({}); + expect(mainServiceItemController.startStopPopup.calledWith({},App.HostComponentStatus.stopped)).to.equal(true); + }); + }); + + + describe("#turnOnOffPassive", function () { + var mainServiceItemController = App.MainServiceItemController.create({turnOnOffPassiveRequest: Em.K}); + beforeEach(function () { + sinon.spy(mainServiceItemController, "turnOnOffPassiveRequest"); + }); + afterEach(function () { + mainServiceItemController.turnOnOffPassiveRequest.restore(); + }); + it("turns on/off passive mode for service", function () { + mainServiceItemController.turnOnOffPassive({}).onPrimary(); + expect(mainServiceItemController.turnOnOffPassiveRequest.calledOnce).to.equal(true); + }); + }); + + describe("#runSmokeTest", function () { + var tests = [ + { + content: { + id: "YARN", + service_name: "YARN", + work_status: "STARTED" + }, + startSmoke: true, + serviceName: "MAPREDUCE2", + m: "don't run smoke test primary for MAPREDUCE2" + }, + { + content: { + id: "YARN", + service_name: "YARN", + work_status: "STOPPED" + }, + startSmoke: false, + serviceName: "MAPREDUCE2", + m: "run smoke test primary for MAPREDUCE2" + }, + { + m: "run smoke test primary for all services (not MAPREDUCE2)", + startSmoke: true, + default: true + } + ]; + + tests.forEach(function (test) { + var mainServiceItemController = test.default ? App.MainServiceItemController.create({runSmokeTestPrimary: Em.K}) : + App.MainServiceItemController.create({content: {serviceName: test.serviceName}, runSmokeTestPrimary: Em.K}); + beforeEach(function () { + sinon.spy(mainServiceItemController, "runSmokeTestPrimary"); + }); + afterEach(function () { + mainServiceItemController.runSmokeTestPrimary.restore(); + }); + it(test.m, function () { + if (!test.default) { + App.store.load(App.Service, test.content); + } + mainServiceItemController.runSmokeTest({}).onPrimary(); + expect(mainServiceItemController.runSmokeTestPrimary.calledOnce).to.equal(test.startSmoke); + }); + }); + }); + + describe("#refreshConfigs", function () { + var temp = batchUtils.restartHostComponents; + beforeEach(function () { + batchUtils.restartHostComponents = Em.K; + sinon.spy(batchUtils, "restartHostComponents"); + }); + afterEach(function () { + batchUtils.restartHostComponents.restore(); + batchUtils.restartHostComponents = temp; + }); + var tests = [ + { + isClientsOnly: true, + m: "run refresh for clients" + }, + { + isClientsOnly: false, + m: "don't run refresh for non clients" + } + ]; + tests.forEach(function (test) { + var mainServiceItemController = App.MainServiceItemController.create({content: {isClientsOnly: test.isClientsOnly}}); + it(test.m, function () { + if (test.isClientsOnly) { + mainServiceItemController.refreshConfigs().onPrimary(); + } else { + mainServiceItemController.refreshConfigs(); + } + expect(batchUtils.restartHostComponents.calledOnce).to.equal(test.isClientsOnly); + }); + }, this); + }); + + describe("#startStopPopup", function () { + var el = document.createElement("BUTTON"); + el.disabled = false; + var event = { + target: el + } + var mainServiceItemController = App.MainServiceItemController.create({content: {serviceName: "HDFS"}}); + beforeEach(function () { + sinon.spy(mainServiceItemController, "startStopPopupPrimary"); + }); + afterEach(function () { + mainServiceItemController.startStopPopupPrimary.restore(); + }); + it("start start/stop service popup", function () { + mainServiceItemController.startStopPopup(event, "").onPrimary(); + expect(mainServiceItemController.startStopPopupPrimary.calledOnce).to.equal(true); + }); + }); + + describe("#restartAllHostComponents", function () { + var temp = batchUtils.restartAllServiceHostComponents; + beforeEach(function () { + batchUtils.restartAllServiceHostComponents = Em.K; + sinon.spy(batchUtils, "restartAllServiceHostComponents"); + }); + afterEach(function () { + batchUtils.restartAllServiceHostComponents.restore(); + batchUtils.restartAllServiceHostComponents = temp; + }); + + var mainServiceItemController = App.MainServiceItemController.create({content: {displayName: "HDFS"}}); + + it("start restartAllHostComponents for service", function () { + mainServiceItemController.restartAllHostComponents({}).onPrimary(); + expect(batchUtils.restartAllServiceHostComponents.calledOnce).to.equal(true); + }); + }); + + describe("#rollingRestart", function () { + var temp = batchUtils.launchHostComponentRollingRestart; + beforeEach(function () { + batchUtils.launchHostComponentRollingRestart = Em.K; + sinon.spy(batchUtils, "launchHostComponentRollingRestart"); + }); + afterEach(function () { + batchUtils.launchHostComponentRollingRestart.restore(); + batchUtils.launchHostComponentRollingRestart = temp; + }); + + var mainServiceItemController = App.MainServiceItemController.create(); + + it("start restartAllHostComponents for service", function () { + mainServiceItemController.rollingRestart(); + expect(batchUtils.launchHostComponentRollingRestart.calledOnce).to.equal(true); + }); + }); + + describe("#isStartDisabled", function () { + var tests = [ + { + content: { + healthStatus: 'red' + }, + isPending: true, + disabled: true, + m: "disabled because of pending" + }, + { + content: { + healthStatus: 'green' + }, + isPending: false, + disabled: true, + m: "disabled because healthStatus is not red" + }, + { + content: { + healthStatus: 'red' + }, + isPending: false, + disabled: false, + m: "enabled because healthStatus is red and pending is false" + } + ]; + tests.forEach(function (test) { + it(test.m, function () { + var mainServiceItemController = App.MainServiceItemController.create({content: {healthStatus: test.content.healthStatus}, isPending: test.isPending}); + expect(mainServiceItemController.get('isStartDisabled')).to.equal(test.disabled); + }); + }); + }); + + describe("#isSopDisabled", function () { + var tests = [ + { + content: { + healthStatus: 'red' + }, + isPending: true, + disabled: true, + m: "disabled because of pending" + }, + { + content: { + healthStatus: 'green' + }, + isPending: false, + disabled: false, + m: "enabled because healthStatus is green and pending is false" + }, + { + content: { + healthStatus: 'red' + }, + isPending: false, + disabled: true, + m: "disabled because healthStatus is not green" + } + ]; + tests.forEach(function (test) { + it(test.m, function () { + var mainServiceItemController = App.MainServiceItemController.create({content: test.content, isPending: test.isPending}); + expect(mainServiceItemController.get('isStopDisabled')).to.equal(test.disabled); + }); + }); + }); + + describe("#runRebalancer", function () { + it("run rebalancer", function () { + var mainServiceItemController = App.MainServiceItemController.create({content: {runRebalancer: false}}); + mainServiceItemController.runRebalancer().onPrimary(); + expect(mainServiceItemController.get("content.runRebalancer")).to.equal(true); + }); + }); + + describe("#runCompaction", function () { + it("run compaction", function () { + var mainServiceItemController = App.MainServiceItemController.create({content: {runCompaction: false}}); + mainServiceItemController.runCompaction().onPrimary(); + expect(mainServiceItemController.get("content.runCompaction")).to.equal(true); + }); + }); + + describe("#turnOnOffPassiveRequest", function () { + var tests = [ + { + data: { + "requestInfo": 'Turn On Maintenance Mode', + "serviceName" : "HDFS", + "passive_state": "ON" + }, + RequestInfo: { + "context": 'Turn On Maintenance Mode' + }, + Body: { + ServiceInfo: { + maintenance_state: "ON" + } + } + } + ]; + + beforeEach(function () { + sinon.spy($, 'ajax'); + }); + + afterEach(function () { + $.ajax.restore(); + }); + + tests.forEach(function (test) { + it('send request to turn on passive state', function () { + var mainServiceItemController = App.MainServiceItemController.create({content: {serviceName: test.data.serviceName}}); + mainServiceItemController.turnOnOffPassiveRequest(test.data.passive_state, test.data.requestInfo); + expect($.ajax.calledOnce).to.equal(true); + + expect(JSON.parse($.ajax.args[0][0].data).Body.ServiceInfo.maintenance_state).to.equal(test.Body.ServiceInfo.maintenance_state); + expect(JSON.parse($.ajax.args[0][0].data).RequestInfo.context).to.equal(test.RequestInfo.context); + }); + }); + }); + + describe("#runSmokeTestPrimary", function () { + var tests = [ + { + data: { + 'serviceName': "HDFS", + 'displayName': "HDFS", + 'query': "test" + }, + "RequestInfo": { + "context": "HDFS Service Check", + "command" : "HDFS_SERVICE_CHECK" + }, + "Requests/resource_filters": [{"service_name" : "HDFS"}] + } + ]; + tests.forEach(function (test) { + + var mainServiceItemController = App.MainServiceItemController.create({content: {serviceName: test.data.serviceName, + displayName: test.data.displayName}}); + beforeEach(function () { + mainServiceItemController.set("runSmokeTestErrorCallBack", Em.K); + mainServiceItemController.set("runSmokeTestSuccessCallBack", Em.K); + sinon.spy($, 'ajax'); + }); + + afterEach(function () { + $.ajax.restore(); + }); + + it('send request to run smoke test', function () { + + mainServiceItemController.runSmokeTestPrimary(test.data.query); + expect($.ajax.calledOnce).to.equal(true); + + expect(JSON.parse($.ajax.args[0][0].data).RequestInfo.context).to.equal(test.RequestInfo.context); + expect(JSON.parse($.ajax.args[0][0].data).RequestInfo.command).to.equal(test.RequestInfo.command); + expect(JSON.parse($.ajax.args[0][0].data)["Requests/resource_filters"][0].serviceName).to.equal(test["Requests/resource_filters"][0].serviceName); + }); + }); + }); +});