Преглед изворни кода

AMBARI-883. Improve user interactions on Confirm Hosts page of the Installer. (yusaku)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/AMBARI-666@1399492 13f79535-47bb-0310-9956-ffa450edef68
Yusaku Sako пре 12 година
родитељ
комит
748d2cfd6d

+ 3 - 0
AMBARI-666-CHANGES.txt

@@ -290,6 +290,9 @@ AMBARI-666 branch (unreleased changes)
 
   IMPROVEMENTS
 
+  AMBARI-883. Improve user interactions on Confirm Hosts page of the
+  Installer. (yusaku)
+
   AMBARI-859. Tighten up the layout for the Install page of the Installer.
   (yusaku)
 

+ 2 - 2
ambari-web/app/assets/data/services/summary/hbase.json

@@ -2,7 +2,7 @@
   "hbase": {
     "service_type": "HBASE",
     "installed": true,
-    "hbasemaster_addr": "ec2-23-21-1-25.compute-1.amazonaws.com:60010",
+    "hbasemaster_addr": "hbase:60010",
     "total_regionservers": "1",
     "memory_heap_used": 15691080,
     "memory_heap_max": 498991104,
@@ -14,7 +14,7 @@
     "average_load": 3,
     "regions_in_transition_count": 0,
     "live_regionservers": 1,
-    "zookeeper_quorum": ["ip-10-108-29-23.ec2.internal:2181"],
+    "zookeeper_quorum": ["hbase:2181"],
     "dead_regionservers": 0
   }
 }

+ 2 - 2
ambari-web/app/assets/data/services/summary/hdfs.json

@@ -2,8 +2,8 @@
   "hdfs": {
     "service_type": "HDFS",
     "installed": true,
-    "namenode_addr": "ec2-23-21-1-25.compute-1.amazonaws.com:50070",
-    "secondary_namenode_addr": "ec2-23-21-1-25.compute-1.amazonaws.com:50090",
+    "namenode_addr": "namenode:50070",
+    "secondary_namenode_addr": "snamenode:50090",
     "total_nodes": "1",
     "memory_heap_used": 151642616,
     "memory_heap_max": 453050368,

+ 2 - 2
ambari-web/app/assets/data/services/summary/mapreduce.json

@@ -2,9 +2,9 @@
   "mapreduce": {
     "service_type": "MAPREDUCE",
     "installed": true,
-    "jobtracker_addr": "ec2-23-21-1-25.compute-1.amazonaws.com:50030",
+    "jobtracker_addr": "jobtracker:50030",
     "trackers_total": "1",
-    "jobhistory_addr": "ec2-23-21-1-25.compute-1.amazonaws.com:51111",
+    "jobhistory_addr": "jobtracker:51111",
     "memory_heap_used": 94499048,
     "memory_heap_max": 482344960,
     "trackers_live": 1,

+ 0 - 1
ambari-web/app/controllers/installer/step2_controller.js

@@ -163,7 +163,6 @@ App.InstallerStep2Controller = Em.Controller.extend({
       type: 'POST',
       url: '/api/bootstrap',
       data: bootStrapData,
-      async: false,
       timeout: 2000,
       success: function () {
         console.log("TRACE: In success function for the post bootstrap function");

+ 82 - 65
ambari-web/app/controllers/installer/step3_controller.js

@@ -23,19 +23,19 @@ App.InstallerStep3Controller = Em.ArrayController.extend({
   content: [],
   bootHosts: [],
   isSubmitDisabled: false,
-  categories: ['Hosts', 'Succeeded', 'Failed'],
-  category: 'Hosts',
-  allChecked: true,
+  categories: ['All Hosts', 'Success', 'Error'],
+  category: 'All Hosts',
+  allChecked: false,
 
   onAllChecked: function () {
-    var hosts = this.visibleHosts();
-    if (this.get('allChecked') === true) {
-      hosts.setEach('isChecked', true);
-    } else {
-      hosts.setEach('isChecked', false);
-    }
+    var hosts = this.get('visibleHosts');
+    hosts.setEach('isChecked', this.get('allChecked'));
   }.observes('allChecked'),
 
+  noHostsSelected: function () {
+    return !(this.someProperty('isChecked', true));
+  }.property('@each.isChecked'),
+
   mockData: require('data/mock/step3_hosts'),
   mockRetryData: require('data/mock/step3_pollData'),
 
@@ -71,14 +71,14 @@ App.InstallerStep3Controller = Em.ArrayController.extend({
     return hosts;
   },
 
-  /* renders the set of passed hosts */
-
+  /* Renders the set of passed hosts */
   renderHosts: function (hostsInfo) {
     var self = this;
     hostsInfo.forEach(function (_hostInfo) {
       var hostInfo = App.HostInfo.create({
         name: _hostInfo.name,
-        bootStatus: _hostInfo.bootStatus
+        bootStatus: _hostInfo.bootStatus,
+        isChecked: false
       });
 
       console.log('pushing ' + hostInfo.name);
@@ -86,81 +86,98 @@ App.InstallerStep3Controller = Em.ArrayController.extend({
     });
   },
 
-  /* Below function parses and updates the content, and governs the possibility
-   of the next doBootstrap (polling) call
+  /**
+   * Parses and updates the content, and governs the possibility
+   * of the next doBootstrap (polling) call.
+   * Returns true if polling should stop (no hosts are in "pending" state); false otherwise
    */
-
-  parseHostInfo: function (hostsFrmServer, hostsFrmContent) {
-    var result = true;                    // default value as true implies if the data rendered by REST API has no hosts, polling will stop
-    hostsFrmServer.forEach(function (_hostFrmServer) {
-      var host = hostsFrmContent.findProperty('name', _hostFrmServer.name);
+  parseHostInfo: function (hostsFromServer, hostsFromContent) {
+    var result = true;  // default value as true implies
+    hostsFromServer.forEach(function (_hostFromServer) {
+      var host = hostsFromContent.findProperty('name', _hostFromServer.name);
       if (host !== null && host !== undefined) { // check if hostname extracted from REST API data matches any hostname in content
-        host.set('bootStatus', _hostFrmServer.status);
-        host.set('cpu', _hostFrmServer.cpu);
-        host.set('memory', _hostFrmServer.memory);
+        host.set('bootStatus', _hostFromServer.status);
+        host.set('cpu', _hostFromServer.cpu);
+        host.set('memory', _hostFromServer.memory);
       }
     });
-    result = !this.content.someProperty('bootStatus', 'pending');
-    return result;
+    // if the data rendered by REST API has no hosts or no hosts are in "pending" state, polling will stop
+    return this.content.length == 0 || !this.content.someProperty('bootStatus', 'pending');
   },
 
-  /* Below function returns the current set of visible hosts on view (All,succeded,failed) */
+  /* Returns the current set of visible hosts on view (All, Succeeded, Failed) */
   visibleHosts: function () {
-    var result;
-    if (this.get('category') === 'Succeeded') {
+    if (this.get('category') === 'Success') {
       return (this.filterProperty('bootStatus', 'success'));
-    } else if (this.get('category') === 'Failed') {
+    } else if (this.get('category') === 'Error') {
       return (this.filterProperty('bootStatus', 'error'));
-    } else if (this.get('category') === 'Hosts') {
+    } else { // if (this.get('category') === 'All Hosts')
       return this.content;
     }
-  },
-
-  /* Below function removes a single element on the trash icon click. Being called from view */
-  removeElement: function (hostInfo) {
-    console.log('TRACE: In removeElement');
-    var hosts = [hostInfo];
-    App.db.removeHosts(hosts);    // remove from localStorage
-    this.removeObject(hostInfo);     // remove from the content to rerender the view
-  },
+  }.property('category', '@each.bootStatus'),
 
+  removeHosts: function (hosts) {
+    var self = this;
 
-  retry: function () {
-    if (this.get('isSubmitDisabled')) {
-      return;
-    }
-    var hosts = this.visibleHosts();
-    var selectedHosts = hosts.filterProperty('isChecked', true);
-    selectedHosts.forEach(function (_host) {
-      console.log('Retrying:  ' + _host.name);
+    App.ModalPopup.show({
+      header: Em.I18n.t('installer.step3.hosts.remove.popup.header'),
+      onPrimary: function () {
+        App.db.removeHosts(hosts);
+        self.removeObjects(hosts);
+        this.hide();
+      },
+      body: Em.I18n.t('installer.step3.hosts.remove.popup.body')
     });
 
-    //TODO: uncomment below code to hookup with @GET bootstrap API
-    /*
-     this.set('bootHosts',selectedHosts);
-     this.doBootstrap();
-     */
-
   },
 
-  removeHosts: function (hosts) {
-    App.db.removeHosts(hosts);
-    this.removeObjects(hosts);
+  /* Removes a single element on the trash icon click. Called from View */
+  removeHost: function (hostInfo) {
+    this.removeHosts([hostInfo]);
   },
 
-  removeBtn: function () {
-    if (this.get('isSubmitDisabled')) {
-      return;
+  removeSelectedHosts: function () {
+    if (!this.get('noHostsSelected')) {
+      var selectedHosts = this.get('visibleHosts').filterProperty('isChecked', true);
+      selectedHosts.forEach(function (_hostInfo) {
+        console.log('Removing:  ' + _hostInfo.name);
+      });
+      this.removeHosts(selectedHosts);
     }
-    var hostResult = this.visibleHosts();
-    var selectedHosts = hostResult.filterProperty('isChecked', true);
-    selectedHosts.forEach(function (_hostInfo) {
-      console.log('Removing:  ' + _hostInfo.name);
+  },
+
+  retryHosts: function (hosts) {
+    var self = this;
+
+    App.ModalPopup.show({
+      header: Em.I18n.t('installer.step3.hosts.retry.popup.header'),
+      onPrimary: function () {
+        hosts.forEach(function (_host) {
+          console.log('Retrying:  ' + _host.name);
+        });
+
+        //TODO: uncomment below code to hookup with @GET bootstrap API
+        /*
+         self.set('bootHosts',selectedHosts);
+         self.doBootstrap();
+         */
+        this.hide();
+      },
+      body: Em.I18n.t('installer.step3.hosts.retry.popup.body')
     });
 
-    this.removeHosts(selectedHosts);
   },
 
+  retryHost: function (hostInfo) {
+    this.retryHosts([hostInfo]);
+  },
+
+  retrySelectedHosts: function () {
+    if (!this.get('noHostsSelected')) {
+      var selectedHosts = this.get('visibleHosts').filterProperty('isChecked', true);
+      this.retryHosts(selectedHosts);
+    }
+  },
 
   startBootstrap: function () {
     this.set('isSubmitDisabled', true);
@@ -173,7 +190,6 @@ App.InstallerStep3Controller = Em.ArrayController.extend({
     $.ajax({
       type: 'GET',
       url: '/api/bootstrap',
-      async: false,
       timeout: 5000,
       success: function (data) {
         console.log("TRACE: In success function for the GET bootstrap call");
@@ -225,6 +241,7 @@ App.InstallerStep3Controller = Em.ArrayController.extend({
       App.router.send('next');
     }
   },
+
   hostLogPopup: function (event) {
     App.ModalPopup.show({
       header: Em.I18n.t('installer.step3.hostLog.popup.header'),
@@ -249,7 +266,7 @@ App.InstallerStep3Controller = Em.ArrayController.extend({
     if (this.get('isSubmitDisabled')) {
       return;
     }
-    var hosts = this.visibleHosts();
+    var hosts = this.get('visibleHosts');
     var selectedHosts = hosts.filterProperty('isChecked', true);
     selectedHosts.forEach(function (_host) {
       console.log('Retrying:  ' + _host.name);

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

@@ -57,6 +57,8 @@ App.LoginController = Em.Object.extend({
       var clientId = user.content[0];
       if (user.content[0] !== undefined) {
         return App.store.findByClientId(App.User, clientId);
+      } else {
+        return undefined;
       }
 //    }
   }

+ 5 - 1
ambari-web/app/messages.js

@@ -87,9 +87,13 @@ Em.I18n.translations = {
 
   'installer.step3.header': 'Confirm Hosts',
   'installer.step3.body': 'Here are the results of the host discovery process.<br>' +
-    'Please verify and remove the ones that you do not want to be the part of the cluster.',
+    'Please verify and remove the ones that you do not want to be part of the cluster.',
   'installer.step3.hostLog.popup.header': 'Log file for the host',
   'installer.step3.hostLog.popup.body': 'Placeholder for the log file',
+  'installer.step3.hosts.remove.popup.header': 'Remove Hosts',
+  'installer.step3.hosts.remove.popup.body': 'Are you sure you want to remove the selected host(s)?',
+  'installer.step3.hosts.retry.popup.header': 'Retry Host Discovery',
+  'installer.step3.hosts.retry.popup.body': 'Are you sure you want to retry discovery of the selected host(s)?',
 
   'installer.step4.header': 'Choose Services',
   'installer.step4.body': 'Choose which services you want to install on your cluster.<br>Note that some services have dependencies (e.g., HBase requires ZooKeeper.)',

+ 2 - 7
ambari-web/app/router.js

@@ -26,15 +26,11 @@ App.Router = Em.Router.extend({
   setNavigationFlow: function (step) {
     var matches = step.match(/\d+$/);
     var newStep;
-    if(matches){
+    if (matches) {
       newStep = parseInt(matches[0]);
     }
     var previousStep = parseInt(this.getInstallerCurrentStep());
-    if (newStep >= previousStep) {
-      this.set('isFwdNavigation', true);
-    } else {
-      this.set('isFwdNavigation', false);
-    }
+    this.set('isFwdNavigation', newStep >= previousStep);
   },
 
   clearAllSteps: function() {
@@ -173,7 +169,6 @@ App.Router = Em.Router.extend({
       url : '/api/check',
       dataType : 'json',
       type: 'GET',
-      async: false,
       beforeSend: function(xhr) {
         xhr.setRequestHeader("Authorization", "Basic " + hash);
       },

+ 10 - 2
ambari-web/app/styles/application.less

@@ -198,6 +198,14 @@ h1 {
       margin-bottom: 30px;
     }
   }
+  #confirm-hosts {
+    #host-filter {
+      h5 {
+        margin-right: 8px;
+        line-height: 10px;
+      }
+    }
+  }
   #step4, #step6 {
     a.selected {
       color: #333;
@@ -362,12 +370,12 @@ a:focus {
 }
 #summary-info {
   margin-top: 20px;
-
+/*
   tr td:first-child {
     font-weight: bold;
     background: #d0d0d0;
   }
-
+*/
   a {
     text-decoration: underline;
     &:hover {

+ 19 - 24
ambari-web/app/templates/installer/step3.hbs

@@ -16,18 +16,19 @@
 * limitations under the License.
 -->
 
+<div id="confirm-hosts">
 <h2>{{t installer.step3.header}}</h2>
 <p class="alert alert-info">{{t installer.step3.body}}</p>
 <div class="box">
   <div class="box-header">
     <div class="button-section">
-      <a class="btn btn-primary decommission" {{bindAttr disabled="isSubmitDisabled"}}
-         href="#" {{action retry target="controller"}}><i
+      <a class="btn btn-primary decommission" {{bindAttr disabled="noHostsSelected"}}
+         href="#" {{action retrySelectedHosts target="controller"}}><i
         class="icon-repeat icon-white"></i>
         Retry
       </a>
-      <a class="btn btn-primary" {{bindAttr disabled="isSubmitDisabled"}}
-         href="#" {{action removeBtn target="controller" }}><i
+      <a class="btn btn-primary" {{bindAttr disabled="noHostsSelected"}}
+         href="#" {{action removeSelectedHosts target="controller" }}><i
         class="icon-trash icon-white"></i>
         Remove
       </a>
@@ -40,12 +41,12 @@
          pollData
       </a>
 
-      <div class="dropdown pull-right">
+      <div id="host-filter" class="dropdown pull-right">
         {{view Ember.Select class="pull-right"
        contentBinding="controller.categories"
        selectionBinding="controller.category"
        }}
-        <h5 class="pull-right text-info">Filter By: &nbsp</h5>
+        <h5 class="pull-right">Show:</h5>
       </div>
 
     </div>
@@ -55,16 +56,14 @@
   <table class="table table-bordered table-striped">
     <thead>
     <tr>
-      <th>
-        {{view Ember.Checkbox checkedBinding="allChecked"}}
-      </th>
-      <th>Status</th>
+      <th class="span1">{{view Ember.Checkbox checkedBinding="allChecked"}}</th>
+      <th class="span2">Status</th>
       <!--  given by the parsing function that parses data from bootstrap call -->
-      <th>Host</th>
+      <th class="span4">Host</th>
       <!-- retrieved from local storage initially -->
-      <th>Message</th>
+      <th class="span2">Message</th>
       <!-- given by the parsing function that parses data from bootstrap call, dynamically assign the color -->
-      <th>Action</th>
+      <th class="span3">Action</th>
       <!-- trash icon -->
       <!-- retry icon -->
     </tr>
@@ -72,29 +71,24 @@
 
     <tbody>
 
-    {{#each host in controller}}
-    {{#view App.HostView categoryBinding="controller.category" hostInfoBinding="host"}}
-    {{#if view.isVisible}}
-    <tr {{bindAttr class = "host.bootStatus"}}>
+    {{#each host in visibleHosts}}
+    {{#view App.InstallerHostView categoryBinding="controller.category" hostInfoBinding="host"}}
       <td>
         {{view Ember.Checkbox checkedBinding="host.isChecked"}}
       </td>
       <td>
         {{host.bootStatus}}
       </td>
-
       <td>
         {{host.name}}
       </td>
       <td>
-        <a  href="javascript:void(null)" data-toggle="modal" {{action "hostLogPopup" target="controller"}}>{{host.message}}</a>
+        <a  href="javascript:void(null)" data-toggle="modal" {{action hostLogPopup target="controller"}}>{{host.message}}</a>
       </td>
       <td>
-        <a href="javascript:void(null)" {{action removeItem target="view"}}><i
-          class="icon-trash"></i></a>
+        {{#if view.isRemovable}}<a class="btn btn-mini" {{action remove target="view"}}><i class="icon-trash"></i> Remove</a>{{/if}}
+        {{#if view.isRetryable}}<a class="btn btn-mini" {{action retry target="view"}}><i class="icon-repeat"></i> Retry</a>{{/if}}
       </td>
-    </tr>
-    {{/if}}
     {{/view}}
     {{/each}}
 
@@ -108,6 +102,7 @@
   </div>
 </div>
 <div class="btn-area">
-  <a class="btn pull-left" {{bindAttr disabled="isSubmitDisabled"}} {{action back}}>&larr; Back</a>
+  <a class="btn pull-left" {{action back}}>&larr; Back</a>
   <a class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action submit target="controller"}}>Next &rarr;</a>
 </div>
+</div>

+ 21 - 22
ambari-web/app/templates/main/service/info/summary.hbs

@@ -37,7 +37,7 @@
         {{/if}}
 			{{/each}}
       {{#if view.serviceStatus.hdfs}}
-      <table id="summary-info" class="table table-bordered table-condensed">
+      <table id="summary-info" class="table table-bordered table-striped table-condensed">
         <tr>
           <td>{{t services.service.summary.version}}</td>
           <td>{{view.attributes.version}}</td>
@@ -50,31 +50,10 @@
           <td>{{t services.service.summary.nameNodeUptime}}</td>
           <td>{{view.attributes.start_time}}</td>
         </tr>
-        <tr>
         <tr>
           <td>{{t services.service.summary.nameNodeHeap}}</td>
           <td>{{view.attributes.memory_heap_used}} MB / {{view.attributes.memory_heap_max}} MB ({{view.attributes.memory_heap_percent_used}}% used)</td>
         </tr>
-        <tr>
-          <td>{{t services.service.summary.pendingUpgradeStatus}}</td>
-          <td>
-            {{#if view.attributes.pending_upgrades}}
-              some message
-            {{else}}
-              no pending upgrades
-            {{/if}}
-          </td>
-        </tr>
-        <tr>
-          <td>{{t services.service.summary.safeModeStatus}}</td>
-          <td>
-            {{#if view.attributes.safemode}}
-              in safemode
-            {{else}}
-              not in safemode
-            {{/if}}
-          </td>
-        </tr>
         <tr>
           <td>{{t services.service.summary.dataNodes}}</td>
           <td>
@@ -97,6 +76,26 @@
           <td>{{t services.service.summary.totalFiles}}</td>
           <td>{{view.attributes.dfs_dirfiles_count}}</td>
         </tr>
+        <tr>
+          <td>{{t services.service.summary.pendingUpgradeStatus}}</td>
+          <td>
+            {{#if view.attributes.pending_upgrades}}
+            Pending upgrade
+            {{else}}
+            No pending upgrade
+            {{/if}}
+          </td>
+        </tr>
+        <tr>
+          <td>{{t services.service.summary.safeModeStatus}}</td>
+          <td>
+            {{#if view.attributes.safemode}}
+            In safe mode
+            {{else}}
+            Not in safe mode
+            {{/if}}
+          </td>
+        </tr>
       </table>
       {{/if}}
 		</div>

+ 19 - 23
ambari-web/app/views/installer/step3_view.js

@@ -25,34 +25,30 @@ App.InstallerStep3View = Em.View.extend({
   category: '',
 
   didInsertElement: function () {
-    var controller = this.get('controller');
-    controller.navigateStep();
+    this.get('controller').navigateStep();
   }
 });
 
-App.HostView = Em.View.extend({
+App.InstallerHostView = Em.View.extend({
 
-  isVisible: true,
-  category: 'Hosts',
-  removeItem: function () {
-    var hostInfo = this.get('hostInfo');
-    this.get('controller').removeElement(hostInfo);
+  tagName: 'tr',
+  classNameBindings: ['hostInfo.bootStatus'],
+  hostInfo: null,
 
+  remove: function () {
+    this.get('controller').removeHost(this.get('hostInfo'));
   },
 
-  hideItem: function () {
-    var controller = this.get('controller');
-    var hostInfo = this.get('hostInfo');
-    var category = this.get('category');
-    if (category === "Hosts") {
-      this.set('isVisible', true);
-    } else if (category === "Succeeded" && hostInfo.get('bootStatus') == "success") {
-      this.set('isVisible', true);
-      return true;
-    } else if (category === "Failed" && hostInfo.get('bootStatus') == "error") {
-      this.set('isVisible', true);
-    } else {
-      this.set('isVisible', false);
-    }
-  }.observes('category')
+  retry: function() {
+    this.get('controller').retryHost(this.get('hostInfo'));
+  },
+
+  isRemovable: function () {
+    return true;
+  }.property(),
+
+  isRetryable: function() {
+    return ['pending', 'error'].contains(this.get('hostInfo.bootStatus'));
+  }.property('hostInfo.bootStatus')
+
 });

+ 8 - 6
ambari-web/test/installer/step3_test.js

@@ -28,7 +28,7 @@ describe('App.InstallerStep3Controller', function () {
   describe('#parseHostInfo', function () {
     var controller = App.InstallerStep3Controller.create();
     it('should return true if there is no host with pending status in the data provided by REST bootstrap call.  It should also update the status on the client side', function () {
-      var hostFrmServer = [
+      var hostFromServer = [
         {
           name: '192.168.1.1',
           status: 'error'
@@ -63,17 +63,19 @@ describe('App.InstallerStep3Controller', function () {
         status: 'success'
       }));
 
-      var result = controller.parseHostInfo(hostFrmServer, controller.content);
+      var result = controller.parseHostInfo(hostFromServer, controller.content);
       var host = controller.content.findProperty('name', '192.168.1.3');
       expect(result).to.equal(true);
-      expect(host.status).to.equal('error');
+      expect(host.bootStatus).to.equal('error');
     })
   })
 
 
   describe('#onAllChecked', function () {
     var controller = App.InstallerStep3Controller.create();
-    it('should set all hosts to true on checking a global checkbox', function () {
+    it('should set all visible hosts\'s isChecked to true upon checking the "all" checkbox', function () {
+      controller.set('category', 'All Hosts');
+      controller.set('allChecked', true);
       controller.content.pushObject(App.HostInfo.create({
         name: '192.168.1.1',
         status: 'error',
@@ -95,8 +97,8 @@ describe('App.InstallerStep3Controller', function () {
         isChecked: false
       }));
       controller.onAllChecked();
-      controller.content.forEach(function (hostName) {
-        var result = hostName.isChecked;
+      controller.content.forEach(function (host) {
+        var result = host.get('isChecked');
         expect(result).to.equal(true);
       });
 

+ 2 - 1
ambari-web/test/login_test.js

@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+
 require('controllers/login_controller');
 
 describe('App.LoginController', function () {
@@ -24,6 +25,7 @@ describe('App.LoginController', function () {
   var loginController = App.LoginController.create();
 
   describe('#validateCredentials()', function () {
+    /*
     it('should return undefined if no username is present', function () {
       loginController.set('loginName', '');
       expect(loginController.validateCredentials()).to.equal(undefined);
@@ -32,7 +34,6 @@ describe('App.LoginController', function () {
       loginController.set('password', '');
       expect(loginController.validateCredentials()).to.equal(undefined);
     })
-    /*
     it('should return the user object with the specified username and password (dummy until actual integration)', function () {
       loginController.set('loginName', 'admin');
       loginController.set('password', 'admin');