Repository: ambari
Updated Branches:
  refs/heads/trunk 4b2f1ab0c -> baebf4523


AMBARI-7987. User may skip steps on Slider Wizard. (onechiporenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/baebf452
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/baebf452
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/baebf452

Branch: refs/heads/trunk
Commit: baebf45239384b47161af086a7937d42a9902429
Parents: 4b2f1ab
Author: Oleg Nechiporenko <onechipore...@apache.org>
Authored: Mon Oct 27 17:23:41 2014 +0200
Committer: Oleg Nechiporenko <onechipore...@apache.org>
Committed: Mon Oct 27 17:23:41 2014 +0200

----------------------------------------------------------------------
 .../createAppWizard/step1_controller.js         | 36 +++++++++++----
 .../processes/create_new_app_test.js            |  1 +
 .../createAppWizard/step1_controller_test.js    | 46 +++++++++++++++-----
 3 files changed, 62 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/baebf452/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js
 
b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js
index 0a59916..5d3ade7 100644
--- 
a/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js
+++ 
b/contrib/views/slider/src/main/resources/ui/app/controllers/createAppWizard/step1_controller.js
@@ -53,10 +53,19 @@ App.CreateAppWizardStep1Controller = 
Ember.Controller.extend(App.AjaxErrorHandle
   nameErrorMessage: '',
 
   /**
+   * Determines if request for validating new App name is sent
+   * If true - "Next" button should be disabled
+   * Set to false after request is finished
+   * @type {bool}
+   */
+  validateAppNameRequestExecuting: false,
+
+  /**
    * Define if there are existing App types
    * @type {Boolean}
    */
   isAppTypesError: Em.computed.equal('availableTypes.content.length', 0),
+
   /**
    * Define description depending on selected App type
    * @type {string}
@@ -72,8 +81,8 @@ App.CreateAppWizardStep1Controller = 
Ember.Controller.extend(App.AjaxErrorHandle
    * @type {bool}
    */
   isSubmitDisabled: function () {
-    return !this.get('newApp.name') || this.get('isNameError') || 
this.get('isAppTypesError');
-  }.property('newApp.name', 'isNameError', 'isAppTypesError'),
+    return this.get('validateAppNameRequestExecuting') || 
!this.get('newApp.name') || this.get('isNameError') || 
this.get('isAppTypesError');
+  }.property('newApp.name', 'isNameError', 'isAppTypesError', 
'validateAppNameRequestExecuting'),
 
   /**
    * Initialize new App and set it to <code>newApp</code>
@@ -149,26 +158,25 @@ App.CreateAppWizardStep1Controller = 
Ember.Controller.extend(App.AjaxErrorHandle
 
   /**
    * Proceed if app name has failed server validation
-   * @method {validateAppNameSuccessCallback}
+   * @method {validateAppNameErrorCallback}
    */
   validateAppNameErrorCallback: function (request, ajaxOptions, error, opt, 
params) {
     if (request.status == 409) {
-      var self = this;
       Bootstrap.ModalManager.open(
         'app-name-conflict',
         Em.I18n.t('common.error'),
         Em.View.extend({
-          template: Em.Handlebars.compile('<div class="alert alert-danger">' +
-            Em.I18n.t('wizard.step1.validateAppNameError').format(params.name) 
+ '</div>')
+          classNames: ['alert', 'alert-danger'],
+          template: 
Em.Handlebars.compile(Em.I18n.t('wizard.step1.validateAppNameError').format(params.name))
         }),
         [
-          Ember.Object.create({
+          Em.Object.create({
             title: Em.I18n.t('ok'),
             dismiss: 'modal',
             type: 'success'
           })
         ],
-        self
+        this
       );
     } else {
       this.defaultErrorHandler(request, opt.url, opt.type, true);
@@ -176,6 +184,14 @@ App.CreateAppWizardStep1Controller = 
Ember.Controller.extend(App.AjaxErrorHandle
   },
 
   /**
+   * Complete-callback for validating newAppName request
+   * @method validateAppNameCompleteCallback
+   */
+  validateAppNameCompleteCallback: function() {
+    this.set('validateAppNameRequestExecuting', false);
+  },
+
+  /**
    * Save new application data to wizard controller
    * @method saveApp
    */
@@ -189,6 +205,7 @@ App.CreateAppWizardStep1Controller = 
Ember.Controller.extend(App.AjaxErrorHandle
 
   actions: {
     submit: function () {
+      this.set('validateAppNameRequestExecuting', true);
       return App.ajax.send({
         name: 'validateAppName',
         sender: this,
@@ -196,7 +213,8 @@ App.CreateAppWizardStep1Controller = 
Ember.Controller.extend(App.AjaxErrorHandle
           name: this.get('newApp.name')
         },
         success: 'validateAppNameSuccessCallback',
-        error: 'validateAppNameErrorCallback'
+        error: 'validateAppNameErrorCallback',
+        complete: 'validateAppNameCompleteCallback'
       });
     }
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/baebf452/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js
 
b/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js
index fcf32c5..7b6ca9b 100644
--- 
a/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js
+++ 
b/contrib/views/slider/src/main/resources/ui/test/integration/processes/create_new_app_test.js
@@ -141,6 +141,7 @@ test('basic (no errors - just valid data)', function () {
     equal(find(selectors.buttonNext).attr('disabled'), null, '"Next"-button 
should be enabled after user input a valid name');
   });
   click(selectors.buttonNext);
+  equal(find(selectors.buttonNext).attr('disabled'), 'disabled', 
'"Next"-button should be disabled after click on it');
 
   andThen(function () {
     /* STEP 2 */

http://git-wip-us.apache.org/repos/asf/ambari/blob/baebf452/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js
----------------------------------------------------------------------
diff --git 
a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js
 
b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js
index aea7585..419a9ab 100644
--- 
a/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js
+++ 
b/contrib/views/slider/src/main/resources/ui/test/unit/controllers/createAppWizard/step1_controller_test.js
@@ -38,7 +38,7 @@ test('isAppTypesError', function () {
 
 });
 
-test('nameValidator', function() {
+test('nameValidator', function () {
   expect(7);
 
   var tests = [
@@ -51,7 +51,7 @@ test('nameValidator', function() {
 
   var controller = this.subject({isNameError: false,
     store: Em.Object.create({
-      all: function(key) {
+      all: function (key) {
         return {
           sliderApp: [
             { name: 'slider2' }
@@ -61,17 +61,17 @@ test('nameValidator', function() {
     })
   });
 
-  tests.forEach(function(test) {
-    Em.run(function() {
+  tests.forEach(function (test) {
+    Em.run(function () {
       controller.set('newApp', { name: test.name});
     });
 
     equal(controller.get('isNameError'), test.e, 'Name `' + test.name + '` is' 
+ (!!test.e ? ' not ' : ' ') + 'valid');
   });
 
-  Em.run(function() {
+  Em.run(function () {
     controller.set('newApp', { name: 'slider2'});
-  })
+  });
 
   equal(controller.get('isNameError'), true, 'Name `slider2` already exist');
   equal(controller.get('nameErrorMessage'), 
Em.I18n.t('wizard.step1.nameRepeatError'), 'Error message should be shown');
@@ -85,12 +85,11 @@ test('validateAppNameSuccessCallback', function () {
         n0: 'v0'
       }
     }),
-    title = 'newApp should have {0} set';
-
-  var controller = this.subject({
-    newApp: Em.Object.create(),
-    selectedType: selectedType
-  });
+    title = 'newApp should have {0} set',
+    controller = this.subject({
+      newApp: Em.Object.create(),
+      selectedType: selectedType
+    });
 
   Em.run(function () {
     controller.set('appWizardController.transitionToRoute', Em.K);
@@ -103,4 +102,27 @@ test('validateAppNameSuccessCallback', function () {
   deepEqual(controller.get('appWizardController.newApp'), 
controller.get('newApp'), 'newApp should be set in CreateAppWizardController');
   equal(controller.get('appWizardController.currentStep'), 2, 'should proceed 
to the next step');
 
+});
+
+test('isSubmitDisabled', function () {
+
+  var controller = this.subject({
+    availableTypes: {
+      content: [
+        {}
+      ]
+    },
+    isNameError: false,
+    newApp: {
+      name: 'some'
+    }
+  });
+
+  equal(controller.get('isSubmitDisabled'), false);
+  Em.run(function () {
+    controller.set('validateAppNameRequestExecuting', true);
+  });
+
+  equal(controller.get('isSubmitDisabled'), true, 'button disabled when 
request executing');
+
 });
\ No newline at end of file

Reply via email to