浏览代码

AMBARI-745. Add unit tests for Installer Step 1 (Welcome page). (yusaku)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/AMBARI-666@1386725 13f79535-47bb-0310-9956-ffa450edef68
Yusaku Sako 12 年之前
父节点
当前提交
eb461c57cc

+ 2 - 0
AMBARI-666-CHANGES.txt

@@ -12,6 +12,8 @@ AMBARI-666 branch (unreleased changes)
 
   NEW FEATURES
 
+  AMBARI-745. Add unit tests for Installer Step 1 (Welcome page). (yusaku)
+
   AMBARI-744. Add definition for service config properties. (yusaku)
 
   AMBARI-743. Add unit testing framework for Ambari Web. (yusaku)

+ 2 - 2
ambari-web/app/controllers.js

@@ -22,8 +22,8 @@
 require('controllers/application');
 require('controllers/login_controller');
 require('controllers/installer');
-require('controllers/installer/step1');
-require('controllers/installer/step2');
+require('controllers/installer/step1_controller');
+require('controllers/installer/step2_controller');
 require('controllers/installer/step3');
 require('controllers/installer/step7_controller');
 require('controllers/main');

+ 2 - 1
ambari-web/app/controllers/installer/step1.js → ambari-web/app/controllers/installer/step1_controller.js

@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var db = require('utils/db');
 
 App.InstallerStep1Controller = Em.Controller.extend({
   name: 'installerStep1Controller',
@@ -49,7 +50,7 @@ App.InstallerStep1Controller = Em.Controller.extend({
       console.log('value of clusterName is: ' + this.get('clusterName'));
       this.set('clusterNameError', '');
       this.set('invalidClusterName', false);
-      App.db.setClusterName(this.get('clusterName'));
+      db.setClusterName(this.get('clusterName'));
       return true;
     }
   }.observes('clusterName')

+ 1 - 3
ambari-web/app/controllers/installer/step2.js → ambari-web/app/controllers/installer/step2_controller.js

@@ -36,7 +36,7 @@ App.InstallerStep2Controller = Em.Controller.extend({
   localRepo: false,
   localRepoPath: '',
   softRepoLocalPathNullErr: false,
-  isSubmitDisabled: true,
+  isSubmitDisabled: false,
 
   installType: function () {
     if (this.get('manualInstall') === true) {
@@ -97,7 +97,6 @@ App.InstallerStep2Controller = Em.Controller.extend({
         this.set('sshKeyNullErr', false);
       }
     }
-
   }.observes('manualInstall', 'sshKey'),
 
   validatePassphrase: function () {
@@ -176,7 +175,6 @@ App.InstallerStep2Controller = Em.Controller.extend({
     //task9 = On success of the previous call, go to step 3
 
     console.log('TRACE: Entering controller:InstallerStep2:evaluateStep2 function');
-
     console.log('value of manual install is: ' + this.get('manualInstall'));
 
     var validateResult = this.validateStep2();

+ 24 - 8
ambari-web/app/utils/db.js

@@ -18,17 +18,32 @@
 var App = require('app');
 App.db = {};
 
+if (typeof Storage !== 'undefined') {
+  Storage.prototype.setObject = function(key,value) {
+    this.setItem(key, JSON.stringify(value));
+  }
 
-Storage.prototype.setObject = function(key,value) {
-  this.setItem(key, JSON.stringify(value));
-}
-
-Storage.prototype.getObject = function(key) {
-  var value = this.getItem(key);
-  return value && JSON.parse(value);
+  Storage.prototype.getObject = function(key) {
+    var value = this.getItem(key);
+    return value && JSON.parse(value);
+  }
+} else {
+  // stub for unit testing purposes
+  window.localStorage = {};
+  localStorage.setItem = function (key, val) {
+    this[key] = val;
+  }
+  localStorage.getItem = function (key) {
+    return this[key];
+  }
+  window.localStorage.setObject = function(key, value) {
+    this[key] = value;
+  };
+  window.localStorage.getObject = function(key, value) {
+    return this[key];
+  };
 }
 
-
 App.db.cleanUp = function() {
   console.log('TRACE: Entering db:cleanup function');
   App.db.data = {
@@ -208,3 +223,4 @@ App.db.getHosts = function(name,hostInfo) {
   return App.db.data[user].Installer.hostInfo;
 }
 
+module.exports = App.db;

+ 37 - 1
ambari-web/test/installer/step1_test.js

@@ -1 +1,37 @@
-// TODO
+var App = require('app');
+require('controllers/installer/step1_controller');
+
+describe('App.InstallerStep1Controller', function () {
+
+  describe('#validateStep1()', function () {
+    it('should return false and sets invalidClusterName to true if cluster name is empty', function () {
+      var controller = App.InstallerStep1Controller.create();
+      controller.set('clusterName', '');
+      expect(controller.validateStep1()).to.equal(false);
+      expect(controller.get('invalidClusterName')).to.equal(true);
+    })
+    it('should return false and sets invalidClusterName to true if cluster name has whitespaces', function () {
+      var controller = App.InstallerStep1Controller.create();
+      controller.set('clusterName', 'My Cluster');
+      expect(controller.validateStep1()).to.equal(false);
+      expect(controller.get('invalidClusterName')).to.equal(true);
+    })
+    it('should return false and sets invalidClusterName to true if cluster name has special characters', function () {
+      var controller = App.InstallerStep1Controller.create();
+      controller.set('clusterName', 'my-cluster');
+      expect(controller.validateStep1()).to.equal(false);
+      expect(controller.get('invalidClusterName')).to.equal(true);
+    })
+    it('should return true, sets invalidClusterName to false, and sets cluster name in db if cluster name is valid', function () {
+      var controller = App.InstallerStep1Controller.create();
+      var clusterName = 'mycluster1';
+      controller.set('clusterName', clusterName);
+      // fake login so clusterName is properly retrieved from App.db
+      App.db.setLoginName('myuser');
+      expect(controller.validateStep1()).to.equal(true);
+      expect(controller.get('invalidClusterName')).to.equal(false);
+      expect(App.db.getClusterName()).to.equal(clusterName);
+    })
+  })
+
+})