فهرست منبع

AMBARI-14691 Service uninstall: Integration with API. (atkach)

Andrii Tkach 9 سال پیش
والد
کامیت
4876cf6109

+ 55 - 2
ambari-web/app/controllers/main/service/item.js

@@ -1009,15 +1009,48 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
    * @param {string} serviceName
    */
   confirmDeleteService: function (serviceName) {
-    var message = Em.I18n.t('services.service.confirmDelete.popup.body').format(App.format.role(serviceName));
-    var confirmKey = 'yes';
+    var message = Em.I18n.t('services.service.confirmDelete.popup.body').format(App.format.role(serviceName)),
+        confirmKey = 'yes',
+        self = this;
 
     App.ModalPopup.show({
+
+      /**
+       * @function onPrimary
+       */
+      onPrimary: function() {
+        self.deleteServiceCall(serviceName);
+        this._super();
+      },
+
+      /**
+       * @type {string}
+       */
       primary: Em.I18n.t('common.delete'),
+
+      /**
+       * @type {string}
+       */
       primaryClass: 'btn-danger',
+
+      /**
+       * @type {string}
+       */
       header: Em.I18n.t('services.service.confirmDelete.popup.header'),
+
+      /**
+       * @type {string}
+       */
       confirmInput: '',
+
+      /**
+       * @type {boolean}
+       */
       disablePrimary: Em.computed.notEqual('confirmInput', confirmKey),
+
+      /**
+       * @type {Em.View}
+       */
       bodyClass: Em.View.extend({
         confirmKey: confirmKey,
         template: Em.Handlebars.compile(message +
@@ -1027,6 +1060,26 @@ App.MainServiceItemController = Em.Controller.extend(App.SupportClientConfigsDow
         '</form>')
       })
     });
+  },
+
+  /**
+   * Ajax call to delete service
+   * @param {string} serviceName
+   * @returns {$.ajax}
+   */
+  deleteServiceCall: function(serviceName) {
+    return App.ajax.send({
+      name : 'service.item.delete',
+      sender: this,
+      data : {
+        serviceName : serviceName
+      },
+      success : 'deleteServiceCallSuccessCallback'
+    });
+  },
+
+  deleteServiceCallSuccessCallback: function(data, ajaxOptions, params) {
+    window.location.reload();
   }
 
 });

+ 5 - 0
ambari-web/app/utils/ajax/ajax.js

@@ -498,6 +498,11 @@ var urls = {
       };
     }
   },
+  'service.item.delete': {
+    'real': '/clusters/{clusterName}/services/{serviceName}',
+    'mock': '',
+    'type': 'DELETE'
+  },
   'service.item.smoke': {
     'real': '/clusters/{clusterName}/requests',
     'mock': '/data/wizard/deploy/poll_1.json',

+ 41 - 0
ambari-web/test/controllers/main/service/item_test.js

@@ -1267,4 +1267,45 @@ describe('App.MainServiceItemController', function () {
     });
   });
 
+  describe("#deleteServiceCall()", function() {
+    var mainServiceItemController;
+
+    beforeEach(function() {
+      mainServiceItemController = App.MainServiceItemController.create({});
+      sinon.stub(App.ajax, 'send');
+    });
+    afterEach(function() {
+      App.ajax.send.restore();
+    });
+
+    it("App.ajax.send should be called", function() {
+      mainServiceItemController.deleteServiceCall('S1');
+      expect(App.ajax.send.getCall(0).args[0]).to.eql({
+        name : 'service.item.delete',
+        sender: mainServiceItemController,
+        data : {
+          serviceName : 'S1'
+        },
+        success : 'deleteServiceCallSuccessCallback'
+      })
+    });
+  });
+
+  describe("#deleteServiceCallSuccessCallback()", function() {
+    var mainServiceItemController;
+
+    beforeEach(function() {
+      mainServiceItemController = App.MainServiceItemController.create({});
+      sinon.stub(window.location, 'reload');
+    });
+    afterEach(function() {
+      window.location.reload.restore();
+    });
+
+    it("window.location.reload should be called", function() {
+      mainServiceItemController.deleteServiceCallSuccessCallback();
+      expect(window.location.reload.calledOnce).to.be.true;
+    });
+  });
+
 });