You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/12/02 21:25:00 UTC

[19/24] ambari git commit: AMBARI-19064 Refactor widgets on Dashboard page. (atkach)

http://git-wip-us.apache.org/repos/asf/ambari/blob/9348725b/ambari-web/test/views/main/dashboard/widget_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widget_test.js b/ambari-web/test/views/main/dashboard/widget_test.js
index 0544ff6..63da712 100644
--- a/ambari-web/test/views/main/dashboard/widget_test.js
+++ b/ambari-web/test/views/main/dashboard/widget_test.js
@@ -21,178 +21,84 @@ require('views/main/dashboard/widget');
 
 describe('App.DashboardWidgetView', function () {
 
-  var dashboardWidgetView = App.DashboardWidgetView.create({
+  var dashboardWidgetView;
+
+  dashboardWidgetView = App.DashboardWidgetView.create({
     parentView: Em.Object.create({
       widgetsMapper: Em.K,
-      getUserPref: function () {return {complete: Em.K}},
+      getUserPref: function () {
+        return {complete: Em.K}
+      },
       postUserPref: Em.K,
       translateToReal: Em.K,
       visibleWidgets: [],
       hiddenWidgets: []
+    }),
+    widget: Em.Object.create({
+      id: 5,
+      sourceName: 'HDFS',
+      title: 'Widget'
     })
   });
 
   describe('#viewID', function () {
     it('viewID is computed with id', function () {
-      dashboardWidgetView.set('id', 5);
       expect(dashboardWidgetView.get('viewID')).to.equal('widget-5');
     });
   });
 
   describe('#model', function () {
-    it('model_type is null', function () {
-      dashboardWidgetView.set('model_type', null);
+
+    beforeEach(function() {
+      sinon.stub(dashboardWidgetView, 'findModelBySource').returns(Em.Object.create({serviceName: 'HDFS'}));
+    });
+
+    afterEach(function() {
+      dashboardWidgetView.findModelBySource.restore();
+    });
+
+    it('sourceName is null', function () {
+      dashboardWidgetView.set('widget.sourceName', null);
       dashboardWidgetView.propertyDidChange('model');
-      expect(dashboardWidgetView.get('model')).to.eql({});
+      expect(dashboardWidgetView.get('model')).to.be.an.object;
     });
-    it('model_type is valid', function () {
-      dashboardWidgetView.set('model_type', 's');
+    it('sourceName is valid', function () {
+      dashboardWidgetView.set('widget.sourceName', 'HDFS');
       dashboardWidgetView.propertyDidChange('model');
-      dashboardWidgetView.set('parentView.s_model', {'s': {}});
-      expect(dashboardWidgetView.get('model')).to.eql({'s': {}});
+      expect(dashboardWidgetView.get('model')).to.eql(Em.Object.create({serviceName: 'HDFS'}));
     });
   });
 
   describe("#didInsertElement()", function () {
-    before(function () {
+
+    beforeEach(function () {
       sinon.stub(App, 'tooltip', Em.K);
     });
-    after(function () {
+    afterEach(function () {
       App.tooltip.restore();
     });
+
     it("call App.tooltip", function () {
       dashboardWidgetView.didInsertElement();
       expect(App.tooltip.calledOnce).to.be.true;
     });
   });
 
-  describe("#deleteWidget()", function () {
-    beforeEach(function () {
-      sinon.stub(dashboardWidgetView.get('parentView'), 'widgetsMapper').returns({});
-      sinon.stub(dashboardWidgetView.get('parentView'), 'getUserPref').returns({
-        complete: Em.K
-      });
-    });
-
-    afterEach(function () {
-      dashboardWidgetView.get('parentView').widgetsMapper.restore();
-      dashboardWidgetView.get('parentView').getUserPref.restore();
-    });
-
-    it("testMode is off", function () {
-      dashboardWidgetView.set('parentView.persistKey', 'key');
-      dashboardWidgetView.deleteWidget();
-      expect(dashboardWidgetView.get('parentView').getUserPref.calledWith('key')).to.be.true;
-    });
-  });
+  describe("#editWidget()", function () {
 
-  describe("#deleteWidgetComplete()", function () {
     beforeEach(function () {
-      sinon.spy(dashboardWidgetView.get('parentView'), 'postUserPref');
-      sinon.spy(dashboardWidgetView.get('parentView'), 'translateToReal');
-      dashboardWidgetView.set('parentView.currentPrefObject', {
-        dashboardVersion: 'new',
-        visible: ['1', '2'],
-        hidden: [],
-        threshold: 'threshold'
-      });
-      dashboardWidgetView.set('parentView.persistKey', 'key');
-      dashboardWidgetView.deleteWidgetComplete();
-    });
-    afterEach(function () {
-      dashboardWidgetView.get('parentView').postUserPref.restore();
-      dashboardWidgetView.get('parentView').translateToReal.restore();
-    });
-    it("postUserPref is called with correct data", function () {
-      var arg = JSON.parse(JSON.stringify(dashboardWidgetView.get('parentView').postUserPref.args[0][1]));
-      expect(arg).to.be.eql({
-        dashboardVersion: 'new',
-        visible: ['1', '2'],
-        hidden: [[5, null]],
-        threshold: 'threshold'
-      });
-    });
-    it("translateToReal is called with valid data", function () {
-      var arg = JSON.parse(JSON.stringify(dashboardWidgetView.get('parentView').translateToReal.args[0][0]));
-      expect(arg).to.be.eql({
-        dashboardVersion: 'new',
-        visible: ['1', '2'],
-        hidden: [[5, null]],
-        threshold: 'threshold'
-      });
-    });
-  });
-
-  describe("#editWidget()", function () {
-    before(function () {
       sinon.stub(dashboardWidgetView, 'showEditDialog', Em.K);
     });
-    after(function () {
+    afterEach(function () {
       dashboardWidgetView.showEditDialog.restore();
     });
+
     it("call showEditDialog", function () {
       dashboardWidgetView.editWidget();
       expect(dashboardWidgetView.showEditDialog.calledOnce).to.be.true;
     });
   });
 
-  describe("#showEditDialog()", function () {
-    var obj = Em.Object.create({
-      observeThresh1Value: Em.K,
-      observeThresh2Value: Em.K,
-      thresh1: '1',
-      thresh2: '2'
-    });
-    beforeEach(function () {
-      sinon.spy(obj, 'observeThresh1Value');
-      sinon.spy(obj, 'observeThresh2Value');
-      sinon.stub(dashboardWidgetView.get('parentView'), 'getUserPref').returns({
-        complete: Em.K
-      });
-      var popup = dashboardWidgetView.showEditDialog(obj);
-      popup.onPrimary();
-    });
-    afterEach(function () {
-      obj.observeThresh1Value.restore();
-      obj.observeThresh2Value.restore();
-      dashboardWidgetView.get('parentView').getUserPref.restore();
-    });
-
-    it("observeThresh1Value is called once", function () {
-      expect(obj.observeThresh1Value.calledOnce).to.be.true;
-    });
-
-    it("observeThresh2Value is called once", function () {
-      expect(obj.observeThresh2Value.calledOnce).to.be.true;
-    });
-
-    it("thresh1 = 1", function () {
-      expect(dashboardWidgetView.get('thresh1')).to.equal(1);
-    });
-
-    it("thresh2 = 2", function () {
-      expect(dashboardWidgetView.get('thresh2')).to.equal(2);
-    });
-
-    it("getUserPref is called once", function () {
-      expect(dashboardWidgetView.get('parentView').getUserPref.calledOnce).to.be.true;
-    });
-  });
-
-  describe('#model', function () {
-    it('model_type is null', function () {
-      dashboardWidgetView.set('model_type', null);
-      dashboardWidgetView.propertyDidChange('model');
-      expect(dashboardWidgetView.get('model')).to.eql({});
-    });
-    it('model_type is valid', function () {
-      dashboardWidgetView.set('model_type', 's');
-      dashboardWidgetView.propertyDidChange('model');
-      dashboardWidgetView.set('parentView.s_model', {'s': {}});
-      expect(dashboardWidgetView.get('model')).to.eql({'s': {}});
-    });
-  });
-
   describe('#hoverContentTopClass', function () {
     var tests = [
       {
@@ -258,7 +164,7 @@ describe('App.DashboardWidgetView', function () {
       var testCases = [
         {
           data: {
-            thresh1: '',
+            thresholdMin: '',
             maxValue: 0
           },
           result: {
@@ -268,7 +174,7 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh1: 'NaN',
+            thresholdMin: 'NaN',
             maxValue: 0
           },
           result: {
@@ -278,7 +184,7 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh1: '-1',
+            thresholdMin: '-1',
             maxValue: 0
           },
           result: {
@@ -288,7 +194,7 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh1: '2',
+            thresholdMin: '2',
             maxValue: 1
           },
           result: {
@@ -298,8 +204,8 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh1: '1',
-            thresh2: '1',
+            thresholdMin: '1',
+            thresholdMax: '1',
             maxValue: 2
           },
           result: {
@@ -309,8 +215,8 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh1: '1',
-            thresh2: '0',
+            thresholdMin: '1',
+            thresholdMax: '0',
             maxValue: 2
           },
           result: {
@@ -320,8 +226,8 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh1: '1',
-            thresh2: '2',
+            thresholdMin: '1',
+            thresholdMax: '2',
             maxValue: 2
           },
           result: {
@@ -331,12 +237,12 @@ describe('App.DashboardWidgetView', function () {
         }
       ];
       testCases.forEach(function (test) {
-        describe("thresh1 - " + test.data.thresh1 + ', maxValue - ' + test.data.maxValue, function () {
+        describe("thresholdMin - " + test.data.thresholdMin + ', maxValue - ' + test.data.maxValue, function () {
 
           beforeEach(function () {
             widget.set('isThresh2Error', false);
-            widget.set('thresh2', test.data.thresh2 || "");
-            widget.set('thresh1', test.data.thresh1);
+            widget.set('thresholdMax', test.data.thresholdMax || "");
+            widget.set('thresholdMin', test.data.thresholdMin);
             widget.set('maxValue', test.data.maxValue);
             widget.observeThresh1Value();
           });
@@ -367,7 +273,7 @@ describe('App.DashboardWidgetView', function () {
       var testCases = [
         {
           data: {
-            thresh2: '',
+            thresholdMax: '',
             maxValue: 0
           },
           result: {
@@ -377,7 +283,7 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh2: 'NaN',
+            thresholdMax: 'NaN',
             maxValue: 0
           },
           result: {
@@ -387,7 +293,7 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh2: '-1',
+            thresholdMax: '-1',
             maxValue: 0
           },
           result: {
@@ -397,7 +303,7 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh2: '2',
+            thresholdMax: '2',
             maxValue: 1
           },
           result: {
@@ -407,7 +313,7 @@ describe('App.DashboardWidgetView', function () {
         },
         {
           data: {
-            thresh2: '2',
+            thresholdMax: '2',
             maxValue: 2
           },
           result: {
@@ -417,10 +323,10 @@ describe('App.DashboardWidgetView', function () {
         }
       ];
       testCases.forEach(function (test) {
-        describe("thresh2 - " + test.data.thresh2 + ', maxValue - ' + test.data.maxValue, function () {
+        describe("thresholdMax - " + test.data.thresholdMax + ', maxValue - ' + test.data.maxValue, function () {
 
           beforeEach(function () {
-            widget.set('thresh2', test.data.thresh2 || "");
+            widget.set('thresholdMax', test.data.thresholdMax || "");
             widget.set('maxValue', test.data.maxValue);
             widget.observeThresh2Value();
           });

http://git-wip-us.apache.org/repos/asf/ambari/blob/9348725b/ambari-web/test/views/main/dashboard/widgets/hbase_average_load_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets/hbase_average_load_test.js b/ambari-web/test/views/main/dashboard/widgets/hbase_average_load_test.js
index e3a08c9..8cb3246 100644
--- a/ambari-web/test/views/main/dashboard/widgets/hbase_average_load_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets/hbase_average_load_test.js
@@ -82,8 +82,8 @@ describe('App.HBaseAverageLoadView', function() {
 
   App.TestAliases.testAsComputedAlias(getView(), 'data', 'model.averageLoad', 'number');
 
-  App.TestAliases.testAsComputedGtProperties(getView(), 'isRed', 'data', 'thresh2');
+  App.TestAliases.testAsComputedGtProperties(getView(), 'isRed', 'data', 'thresholdMax');
 
-  App.TestAliases.testAsComputedLteProperties(getView(), 'isGreen', 'data', 'thresh1');
+  App.TestAliases.testAsComputedLteProperties(getView(), 'isGreen', 'data', 'thresholdMin');
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/9348725b/ambari-web/test/views/main/dashboard/widgets/hbase_regions_in_transition_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets/hbase_regions_in_transition_test.js b/ambari-web/test/views/main/dashboard/widgets/hbase_regions_in_transition_test.js
index 8ad1531..4366ab6 100644
--- a/ambari-web/test/views/main/dashboard/widgets/hbase_regions_in_transition_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets/hbase_regions_in_transition_test.js
@@ -23,7 +23,7 @@ require('views/main/dashboard/widgets/text_widget');
 require('views/main/dashboard/widget');
 
 function getView() {
-  return App.HBaseRegionsInTransitionView.create({model_type:null});
+  return App.HBaseRegionsInTransitionView.create({});
 }
 
 describe('App.HBaseRegionsInTransitionView', function() {
@@ -81,9 +81,9 @@ describe('App.HBaseRegionsInTransitionView', function() {
 
   App.TestAliases.testAsComputedAlias(getView(), 'data', 'model.regionsInTransition', 'number');
 
-  App.TestAliases.testAsComputedGtProperties(getView(), 'isRed', 'data', 'thresh2');
+  App.TestAliases.testAsComputedGtProperties(getView(), 'isRed', 'data', 'thresholdMax');
 
-  App.TestAliases.testAsComputedLteProperties(getView(), 'isGreen', 'data', 'thresh1');
+  App.TestAliases.testAsComputedLteProperties(getView(), 'isGreen', 'data', 'thresholdMin');
 
   App.TestAliases.testAsComputedAnd(getView(), 'isOrange', ['!isGreen', '!isRed']);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/9348725b/ambari-web/test/views/main/dashboard/widgets/namenode_rpc_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets/namenode_rpc_test.js b/ambari-web/test/views/main/dashboard/widgets/namenode_rpc_test.js
index 474d099..15b7503 100644
--- a/ambari-web/test/views/main/dashboard/widgets/namenode_rpc_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets/namenode_rpc_test.js
@@ -35,7 +35,6 @@ describe('App.NameNodeRpcView', function() {
         nameNodeRpc: 1
       },
       e: {
-        isOrange: true,
         isNA: false,
         content: '1.00 ms',
         data: '1.00'
@@ -46,7 +45,6 @@ describe('App.NameNodeRpcView', function() {
         nameNodeRpc: 10
       },
       e: {
-        isOrange: false,
         isNA: false,
         content: '10.00 ms',
         data: '10.00'
@@ -57,7 +55,6 @@ describe('App.NameNodeRpcView', function() {
         nameNodeRpc: 0
       },
       e: {
-        isOrange: false,
         isNA: false,
         content: '0 ms',
         data: 0
@@ -68,7 +65,6 @@ describe('App.NameNodeRpcView', function() {
         nameNodeRpc: null
       },
       e: {
-        isOrange: false,
         isNA: true,
         content: Em.I18n.t('services.service.summary.notAvailable'),
         data: null
@@ -78,24 +74,21 @@ describe('App.NameNodeRpcView', function() {
 
   tests.forEach(function(test) {
     describe('nameNodeRpc - ' + test.model.nameNodeRpc, function() {
-      var jobTrackerRpcView = App.NameNodeRpcView.create({model_type:null, model: test.model});
+      var jobTrackerRpcView = App.NameNodeRpcView.create({model: test.model});
       it('content', function() {
         expect(jobTrackerRpcView.get('content')).to.equal(test.e.content);
       });
       it('data', function() {
         expect(jobTrackerRpcView.get('data')).to.equal(test.e.data);
       });
-      it('isOrange', function() {
-        expect(jobTrackerRpcView.get('isOrange')).to.equal(test.e.isOrange);
-      });
       it('isNA', function() {
         expect(jobTrackerRpcView.get('isNA')).to.equal(test.e.isNA);
       });
     });
   });
 
-  App.TestAliases.testAsComputedGtProperties(getView(), 'isRed', 'data', 'thresh2');
+  App.TestAliases.testAsComputedGtProperties(getView(), 'isRed', 'data', 'thresholdMax');
 
-  App.TestAliases.testAsComputedLteProperties(getView(), 'isGreen', 'data', 'thresh1');
+  App.TestAliases.testAsComputedLteProperties(getView(), 'isGreen', 'data', 'thresholdMin');
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/9348725b/ambari-web/test/views/main/dashboard/widgets/text_widget_single_threshold_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets/text_widget_single_threshold_test.js b/ambari-web/test/views/main/dashboard/widgets/text_widget_single_threshold_test.js
index e564922..3136c35 100644
--- a/ambari-web/test/views/main/dashboard/widgets/text_widget_single_threshold_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets/text_widget_single_threshold_test.js
@@ -22,7 +22,7 @@ require('views/main/dashboard/widget');
 require('views/main/dashboard/widgets/text_widget_single_threshold');
 
 function getView() {
-  return App.TextDashboardSingleThresholdWidgetView.create({thresh1:0});
+  return App.TextDashboardSingleThresholdWidgetView.create({thresholdMin:0});
 }
 
 describe('App.TextDashboardSingleThresholdWidgetView', function() {
@@ -43,8 +43,8 @@ describe('App.TextDashboardSingleThresholdWidgetView', function() {
   ];
 
   tests.forEach(function(test) {
-    describe('data - ' + test.data + ' | thresh1 - 0', function() {
-      var textDashboardWidgetSingleThresholdView = App.TextDashboardSingleThresholdWidgetView.create({thresh1:0});
+    describe('data - ' + test.data + ' | thresholdMin - 0', function() {
+      var textDashboardWidgetSingleThresholdView = App.TextDashboardSingleThresholdWidgetView.create({thresholdMin:0});
       textDashboardWidgetSingleThresholdView.set('data', test.data);
       it('isNA', function() {
         expect(textDashboardWidgetSingleThresholdView.get('isNA')).to.equal(test.e.isNA);
@@ -52,6 +52,6 @@ describe('App.TextDashboardSingleThresholdWidgetView', function() {
     });
   });
 
-  App.TestAliases.testAsComputedGtProperties(getView(), 'isRed', 'data', 'thresh1');
-  App.TestAliases.testAsComputedLteProperties(getView(), 'isGreen', 'data', 'thresh1');
+  App.TestAliases.testAsComputedGtProperties(getView(), 'isRed', 'data', 'thresholdMin');
+  App.TestAliases.testAsComputedLteProperties(getView(), 'isGreen', 'data', 'thresholdMin');
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/9348725b/ambari-web/test/views/main/dashboard/widgets/text_widget_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets/text_widget_test.js b/ambari-web/test/views/main/dashboard/widgets/text_widget_test.js
index 730e209..096d782 100644
--- a/ambari-web/test/views/main/dashboard/widgets/text_widget_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets/text_widget_test.js
@@ -22,7 +22,7 @@ require('views/main/dashboard/widget');
 require('views/main/dashboard/widgets/text_widget');
 
 function getView() {
-  return App.TextDashboardWidgetView.create({thresh1:40, thresh2:70});
+  return App.TextDashboardWidgetView.create({thresholdMin:40, thresholdMax:70});
 }
 
 describe('App.TextDashboardWidgetView', function() {
@@ -43,8 +43,8 @@ describe('App.TextDashboardWidgetView', function() {
   ];
 
   tests.forEach(function(test) {
-    describe('data - ' + test.data + ' | thresh1 - 40 | thresh2 - 70', function() {
-      var textDashboardWidgetView = App.TextDashboardWidgetView.create({thresh1:40, thresh2:70});
+    describe('data - ' + test.data + ' | thresholdMin - 40 | thresholdMax - 70', function() {
+      var textDashboardWidgetView = App.TextDashboardWidgetView.create({thresholdMin:40, thresholdMax:70});
       textDashboardWidgetView.set('data', test.data);
       it('isNA', function() {
         expect(textDashboardWidgetView.get('isNA')).to.equal(test.e.isNA);
@@ -52,9 +52,9 @@ describe('App.TextDashboardWidgetView', function() {
     });
   });
 
-  App.TestAliases.testAsComputedGtProperties(getView(), 'isGreen', 'data', 'thresh2');
+  App.TestAliases.testAsComputedGtProperties(getView(), 'isGreen', 'data', 'thresholdMax');
 
-  App.TestAliases.testAsComputedLteProperties(getView(), 'isRed', 'data', 'thresh1');
+  App.TestAliases.testAsComputedLteProperties(getView(), 'isRed', 'data', 'thresholdMin');
 
   App.TestAliases.testAsComputedAnd(getView(), 'isOrange', ['!isGreen', '!isRed']);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/9348725b/ambari-web/test/views/main/dashboard/widgets/uptime_text_widget_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets/uptime_text_widget_test.js b/ambari-web/test/views/main/dashboard/widgets/uptime_text_widget_test.js
index fbe2694..fa20593 100644
--- a/ambari-web/test/views/main/dashboard/widgets/uptime_text_widget_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets/uptime_text_widget_test.js
@@ -25,7 +25,7 @@ var uptimeTextDashboardWidgetView;
 describe('App.UptimeTextDashboardWidgetView', function() {
 
   beforeEach(function () {
-    uptimeTextDashboardWidgetView = App.UptimeTextDashboardWidgetView.create({thresh1:40, thresh2:70});
+    uptimeTextDashboardWidgetView = App.UptimeTextDashboardWidgetView.create({thresholdMin:40, thresholdMax:70});
   });
 
   describe('#timeConverter', function() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/9348725b/ambari-web/test/views/main/dashboard/widgets_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets_test.js b/ambari-web/test/views/main/dashboard/widgets_test.js
index 0781c79..707087a 100644
--- a/ambari-web/test/views/main/dashboard/widgets_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets_test.js
@@ -25,526 +25,325 @@ require('views/main/dashboard/widgets');
 
 describe('App.MainDashboardWidgetsView', function () {
 
-  var view = App.MainDashboardWidgetsView.create();
-
-  describe('#setInitPrefObject', function () {
-    var hostMetricsWidgetsCount = 4;
-    var hdfsWidgetsCount = 7;
-    var hbaseWidgetsCount = 4;
-    var yarnWidgetsCount = 4;
-    var totalWidgetsCount = 20;
-    var tests = Em.A([
-      {
-        models: {
-          host_metrics_model: null,
-          hdfs_model: null,
-          hbase_model: null,
-          yarn_model: null
-        },
-        e: {
-          visibleL: totalWidgetsCount - hostMetricsWidgetsCount - hdfsWidgetsCount - hbaseWidgetsCount - yarnWidgetsCount - 1,
-          hiddenL: 0
-        },
-        m: 'All models are null'
-      },
-      {
-        models: {
-          host_metrics_model: {},
-          hdfs_model: null,
-          hbase_model: null,
-          yarn_model: null
-        },
-        e: {
-          visibleL: totalWidgetsCount - hdfsWidgetsCount - hbaseWidgetsCount - yarnWidgetsCount - 1,
-          hiddenL: 0
-        },
-        m: 'hdfs_model, hbase_model, yarn_model are null'
-      },
-      {
-        models: {
-          host_metrics_model: {},
-          hdfs_model: {},
-          hbase_model: null,
-          yarn_model: null
-        },
-        e: {
-          visibleL: totalWidgetsCount - hbaseWidgetsCount - yarnWidgetsCount - 1,
-          hiddenL: 0
-        },
-        m: 'hbase_model, yarn_model are null'
-      },
-      {
-        models: {
-          host_metrics_model: {},
-          hdfs_model: {},
-          hbase_model: null,
-          yarn_model: null
-        },
-        e: {
-          visibleL: totalWidgetsCount - hbaseWidgetsCount - yarnWidgetsCount - 1,
-          hiddenL: 0
-        },
-        m: 'hbase_model and yarn_model are null'
-      },
-      {
-        models: {
-          host_metrics_model: {},
-          hdfs_model: {},
-          hbase_model: {},
-          yarn_model: null
-        },
-        e: {
-          visibleL: totalWidgetsCount - yarnWidgetsCount - 1,
-          hiddenL: 1
-        },
-        m: 'yarn_model is null'
-      },
-      {
-        models: {
-          host_metrics_model: {},
-          hdfs_model: {},
-          hbase_model: {},
-          yarn_model: {}
-        },
-        e: {
-          visibleL: totalWidgetsCount - 1,
-          hiddenL: 1
-        },
-        m: 'All models are not null'
-      }
-    ]);
+  var view;
+
+  beforeEach(function() {
+    view = App.MainDashboardWidgetsView.create({
+      getUserPref: Em.K,
+      postUserPref: Em.K,
+      setDBProperty: Em.K,
+      persistKey: 'key'
+    });
+  });
+
+  describe('#didInsertElement()', function() {
 
     beforeEach(function() {
-      sinon.stub(view, 'resolveConfigDependencies');
+      sinon.stub(view, 'loadWidgetsSettings').returns({
+        complete: Em.clb
+      });
+      sinon.stub(view, 'checkServicesChange');
+      sinon.stub(view, 'renderWidgets');
+      sinon.stub(Em.run, 'next');
+      view.didInsertElement();
     });
 
     afterEach(function() {
-      view.resolveConfigDependencies.restore();
+      view.loadWidgetsSettings.restore();
+      view.checkServicesChange.restore();
+      view.renderWidgets.restore();
+      Em.run.next.restore();
     });
 
-    tests.forEach(function (test) {
-      describe(test.m, function () {
-
-        beforeEach(function () {
-          view.set('host_metrics_model', test.models.host_metrics_model);
-          view.set('hdfs_model', test.models.hdfs_model);
-          view.set('hbase_model', test.models.hbase_model);
-          view.set('yarn_model', test.models.yarn_model);
-          view.setInitPrefObject();
-        });
-
-        it('visible.length is ' + test.e.visibleL, function () {
-          expect(view.get('initPrefObject.visible.length')).to.equal(test.e.visibleL);
-        });
-
-        it('hidden.length is ' + test.e.hiddenL, function () {
-          expect(view.get('initPrefObject.hidden.length')).to.equal(test.e.hiddenL);
-        });
-
-      });
+    it('checkServicesChange should be called', function() {
+      expect(view.checkServicesChange).to.be.calledOnce;
     });
-  });
 
-  describe('#persistKey', function () {
-    beforeEach(function () {
-      sinon.stub(App, 'get').withArgs('router.loginName').returns('tdk');
+    it('renderWidgets should be called', function() {
+      expect(view.renderWidgets).to.be.calledOnce;
     });
-    afterEach(function () {
-      App.get.restore();
+
+    it('isDataLoaded should be true', function() {
+      expect(view.get('isDataLoaded')).to.be.true;
     });
-    it('Check it', function () {
-      expect(view.get('persistKey')).to.equal('user-pref-tdk-dashboard');
+
+    it('Em.run.next should be called', function() {
+      expect(Em.run.next.calledWith(view, 'makeSortable')).to.be.true;
     });
   });
 
-  describe("#didInsertElement()", function () {
-    beforeEach(function () {
-      sinon.stub(view, 'setWidgetsDataModel', Em.K);
-      sinon.stub(view, 'setInitPrefObject', Em.K);
-      sinon.stub(view, 'setOnLoadVisibleWidgets', Em.K);
-      sinon.stub(Em.run, 'next', Em.K);
-      view.didInsertElement();
-    });
-    afterEach(function () {
-      view.setWidgetsDataModel.restore();
-      view.setInitPrefObject.restore();
-      view.setOnLoadVisibleWidgets.restore();
-      Em.run.next.restore();
-    });
-    it("setWidgetsDataModel is called once", function () {
-      expect(view.setWidgetsDataModel.calledOnce).to.be.true;
-    });
-    it("setInitPrefObject is called once", function () {
-      expect(view.setInitPrefObject.calledOnce).to.be.true;
-    });
-    it("setOnLoadVisibleWidgets is called once", function () {
-      expect(view.setOnLoadVisibleWidgets.calledOnce).to.be.true;
+  describe('#loadWidgetsSettings()', function() {
+
+    beforeEach(function() {
+      sinon.spy(view, 'getUserPref');
     });
-    it("makeSortable is called in the next loop", function () {
-      expect(Em.run.next.calledWith(view, 'makeSortable')).to.be.true;
+
+    afterEach(function() {
+      view.getUserPref.restore();
     });
-    it("isDataLoaded is true", function () {
-      expect(view.get('isDataLoaded')).to.be.true
+
+    it('getUserPref should be called', function() {
+      view.loadWidgetsSettings();
+      expect(view.getUserPref.calledWith('key')).to.be.true;
     });
   });
 
-  describe("#setWidgetsDataModel()", function () {
-    beforeEach(function () {
-      this.model = sinon.stub(App.Service, 'find');
-      this.get = sinon.stub(App, 'get');
-    });
-    afterEach(function () {
-      this.model.restore();
-      this.get.restore();
+  describe('#saveWidgetsSettings()', function() {
+
+    beforeEach(function() {
+      sinon.stub(view, 'setDBProperty');
+      sinon.stub(view, 'postUserPref');
+      view.saveWidgetsSettings({settings:{}});
     });
-    it("No host_metrics_model", function () {
-      this.get.returns([]);
-      this.model.returns([Em.Object.create({
-        serviceName: 'S1',
-        id: 'S1'
-      })]);
-      view.set('host_metrics_model', null);
-      view.setWidgetsDataModel();
-      expect(view.get('host_metrics_model')).to.be.null;
-      expect(view.get('s1_model')).to.eql(Em.Object.create({
-        serviceName: 'S1',
-        id: 'S1'
-      }));
+
+    afterEach(function() {
+      view.setDBProperty.restore();
+      view.postUserPref.restore();
     });
-    it("host_metrics_model is present", function () {
-      this.get.returns([1]);
-      this.model.returns([Em.Object.create({
-        serviceName: 'HDFS',
-        id: 'HDFS'
-      })]);
-      view.set('host_metrics_model', null);
-      view.setWidgetsDataModel();
-      expect(view.get('host_metrics_model')).to.eql([1]);
-      expect(view.get('hdfs_model.id')).to.equal('HDFS');
+
+    it('setDBProperty should be called', function() {
+      expect(view.setDBProperty.calledWith('key', {settings:{}})).to.be.true;
     });
-  });
 
-  describe("#plusButtonFilterView", function () {
-    var plusButtonFilterView = view.get('plusButtonFilterView').create({
-      parentView: view
+    it('postUserPref should be called', function() {
+      expect(view.postUserPref.calledWith('key', {settings:{}})).to.be.true;
     });
-    plusButtonFilterView.reopen({
-      visibleWidgets: [],
-      hiddenWidgets: []
+
+    it('userPreferences should be set', function() {
+      expect(view.get('userPreferences')).to.be.eql({settings:{}});
     });
+  });
 
-    describe("#applyFilter()", function () {
-      var widget = {checked: true};
-      beforeEach(function () {
-        sinon.stub(view, 'getUserPref').returns({
-          complete: Em.K
-        });
-        sinon.stub(view, 'widgetsMapper').returns(widget);
-      });
+  describe('#getUserPrefSuccessCallback()', function() {
 
-      afterEach(function () {
-        view.getUserPref.restore();
-        view.widgetsMapper.restore();
-      });
+    beforeEach(function() {
+      sinon.stub(view, 'getUserPrefErrorCallback');
+    });
 
-      it("testMode is off", function () {
-        plusButtonFilterView.applyFilter();
-        expect(view.getUserPref.calledOnce).to.be.true;
-      });
+    afterEach(function() {
+      view.getUserPrefErrorCallback.restore();
     });
 
-    describe("#applyFilterComplete()", function () {
-      beforeEach(function () {
-        sinon.stub(view, 'postUserPref');
-        sinon.stub(view, 'translateToReal');
-        sinon.stub(App.router, 'get', function (k) {
-          if ('loginName' === k) return 'tdk';
-          return Em.get(App.router, k);
-        });
-        plusButtonFilterView.set('hiddenWidgets', [
-          Em.Object.create({
-            checked: true,
-            id: 1,
-            displayName: 'i1'
-          }),
-          Em.Object.create({
-            checked: false,
-            id: 2,
-            displayName: 'i2'
-          })
-        ]);
-        view.set('currentPrefObject', Em.Object.create({
-          dashboardVersion: 'new',
-          visible: [],
-          hidden: [],
-          threshold: 'threshold'
-        }));
-        view.set('persistKey', 'key');
-        plusButtonFilterView.applyFilterComplete();
-      });
-      afterEach(function () {
-        view.postUserPref.restore();
-        view.translateToReal.restore();
-        App.router.get.restore();
-      });
-      it("postUserPref is called once", function () {
-        expect(view.postUserPref.calledOnce).to.be.true;
-      });
-      it("translateToReal is called with correct data", function () {
-        expect(view.translateToReal.getCall(0).args[0]).to.eql(Em.Object.create({
-          dashboardVersion: 'new',
-          visible: [1],
-          hidden: [
-            [2, 'i2']
-          ],
-          threshold: 'threshold'
-        }));
-      });
-      it("1 hidden widget", function () {
-        expect(plusButtonFilterView.get('hiddenWidgets.length')).to.equal(1);
-      });
+    it('getUserPrefErrorCallback should be called', function() {
+      view.getUserPrefSuccessCallback(null);
+      expect(view.getUserPrefErrorCallback).to.be.calledOnce;
     });
-  });
 
-  describe("#translateToReal()", function () {
-    beforeEach(function () {
-      sinon.stub(view, 'widgetsMapper').returns(Em.Object.create());
-      view.set('visibleWidgets', []);
-      view.set('hiddenWidgets', []);
-    });
-    afterEach(function () {
-      view.widgetsMapper.restore();
-    });
-    it("version is not new", function () {
-      var data = {
-        dashboardVersion: null,
-        visible: [],
-        hidden: [],
-        threshold: []
-      };
-      view.translateToReal(data);
-      expect(view.get('visibleWidgets')).to.be.empty;
-      expect(view.get('hiddenWidgets')).to.be.empty;
-    });
-    it("version is new", function () {
-      var data = {
-        dashboardVersion: 'new',
-        visible: [1],
-        hidden: [
-          ['id', 'title']
-        ],
-        threshold: [
-          [],
-          [
-            ['tresh1'],
-            ['tresh2']
-          ]
-        ]
-      };
-      view.translateToReal(data);
-      expect(view.get('visibleWidgets')).to.not.be.empty;
-      expect(view.get('hiddenWidgets')).to.not.be.empty;
+    it('userPreferences should be set', function() {
+      view.getUserPrefSuccessCallback({settings:{}});
+      expect(view.get('userPreferences')).to.be.eql({settings:{}});
     });
   });
 
-  describe("#setOnLoadVisibleWidgets()", function () {
-    beforeEach(function () {
-      sinon.stub(view, 'translateToReal', Em.K);
-      sinon.stub(view, 'getUserPref').returns({complete: Em.K});
-    });
+  describe('#getUserPrefErrorCallback()', function() {
 
-    afterEach(function () {
-      view.translateToReal.restore();
-      view.getUserPref.restore();
+    beforeEach(function() {
+      sinon.stub(view, 'generateDefaultUserPreferences').returns({settings:{}});
+      sinon.stub(view, 'saveWidgetsSettings');
     });
 
-    it("testMode is false", function () {
-      view.setOnLoadVisibleWidgets();
-      expect(view.getUserPref.calledOnce).to.be.true;
+    afterEach(function() {
+      view.generateDefaultUserPreferences.restore();
+      view.saveWidgetsSettings.restore();
     });
-  });
 
-  describe("#removeWidget()", function () {
-    var widget;
-    var value;
-    beforeEach(function () {
-      widget = {};
-      value = {
-        visible: [widget],
-        hidden: [
-          [widget]
-        ]
-      };
-      value = view.removeWidget(value, widget);
-    });
-    it("value.visible is empty", function () {
-      expect(value.visible).to.be.empty;
-    });
-    it("value.hidden is empty", function () {
-      expect(value.hidden).to.be.empty;
+    it('saveWidgetsSettings should be called', function() {
+      view.getUserPrefErrorCallback();
+      expect(view.saveWidgetsSettings.calledWith({settings:{}})).to.be.true;
     });
   });
 
-  describe("#containsWidget()", function () {
-    it("widget visible", function () {
-      var widget = {};
-      var value = {
-        visible: [widget],
-        hidden: [
-          [widget]
-        ]
-      };
-      expect(view.containsWidget(value, widget)).to.be.true;
-    });
-    it("widget absent", function () {
-      var widget = {};
-      var value = {
-        visible: [],
-        hidden: []
-      };
-      expect(view.containsWidget(value, widget)).to.be.false;
-    });
-    it("widget hidden", function () {
-      var widget = {};
-      var value = {
-        visible: [],
-        hidden: [
-          [widget]
-        ]
-      };
-      expect(view.containsWidget(value, widget)).to.be.true;
+  describe('#resolveConfigDependencies()', function() {
+
+    beforeEach(function() {
+      this.mock = sinon.stub(App.router, 'get');
     });
-  });
 
-  describe("#persistKey", function () {
-    before(function () {
-      sinon.stub(App, 'get').withArgs('router.loginName').returns('user');
+    afterEach(function() {
+      App.router.get.restore();
     });
-    after(function () {
-      App.get.restore();
+
+    it('isHiddenByDefault should be undefined', function() {
+      var widgets = [{id: 20}];
+      this.mock.returns({properties: {'hide_yarn_memory_widget': 'false'}});
+      view.resolveConfigDependencies(widgets);
+      expect(widgets[0].isHiddenByDefault).to.be.undefined;
     });
-    it("depends on router.loginName", function () {
-      view.propertyDidChange('persistKey');
-      expect(view.get('persistKey')).to.equal('user-pref-user-dashboard');
+
+    it('isHiddenByDefault should be true', function() {
+      var widgets = [{id: 20}];
+      this.mock.returns({properties: {'hide_yarn_memory_widget': 'true'}});
+      view.resolveConfigDependencies(widgets);
+      expect(widgets[0].isHiddenByDefault).to.be.true;
     });
   });
 
-  describe("#getUserPrefSuccessCallback()", function () {
+  describe('#generateDefaultUserPreferences', function() {
 
-    it("response is null", function () {
-      view.set('currentPrefObject', null);
-      view.getUserPrefSuccessCallback(null, {}, {});
-      expect(view.get('currentPrefObject')).to.be.null;
+    beforeEach(function() {
+      sinon.stub(view, 'resolveConfigDependencies');
+      sinon.stub(App.Service, 'find').returns(Em.Object.create());
+      view.set('widgetsDefinition', [
+        Em.Object.create({sourceName: 'S1', id: 1}),
+        Em.Object.create({sourceName: 'HOST_METRICS', id: 2, isHiddenByDefault: true, threshold: []}),
+        Em.Object.create({sourceName: 'HOST_METRICS', id: 3, threshold: [1, 2]})
+      ]);
     });
 
-    it("response is correct", function () {
-      view.set('currentPrefObject', null);
-      view.getUserPrefSuccessCallback({}, {}, {});
-      expect(view.get('currentPrefObject')).to.eql({});
+    afterEach(function() {
+      view.resolveConfigDependencies.restore();
+      App.Service.find.restore();
     });
 
-    it('should update missing thresholds', function () {
+    it('should generate default preferences', function() {
+      expect(JSON.stringify(view.generateDefaultUserPreferences())).to.be.eql(JSON.stringify({
+        "visible": [3],
+        "hidden": [2],
+        "threshold": {
+          "2": [],
+          "3": [1,2]
+        }
+      }));
+      expect(view.resolveConfigDependencies).to.be.calledOnce;
+    });
+  });
+
+  describe('#renderWidgets()', function() {
 
-      view.set('currentPrefObject', null);
-      view.getUserPrefSuccessCallback({
+    it('should set visibleWidgets and hiddenWidgets', function() {
+      view.set('userPreferences', {
+        visible: [1],
+        hidden: [2],
         threshold: {
-          17: []
+          1: [],
+          2: [1,2]
         }
-      }, {}, {});
-      expect(view.get('currentPrefObject.threshold')['17']).to.eql([70, 90]);
+      });
+      view.renderWidgets();
+      expect(view.get('visibleWidgets')).to.be.eql([Em.Object.create({
+        id: 1,
+        threshold: [],
+        viewClass: App['NameNodeHeapPieChartView'],
+        sourceName: 'HDFS',
+        title: Em.I18n.t('dashboard.widgets.NameNodeHeap')
+      })]);
+      expect(view.get('hiddenWidgets')).to.be.eql([
+        Em.Object.create({
+          id: 2,
+          title: Em.I18n.t('dashboard.widgets.HDFSDiskUsage'),
+          checked: false
+        })
+      ]);
+    });
+  });
+
+  describe('#checkServicesChange()', function() {
+
+    beforeEach(function() {
+      sinon.stub(view, 'generateDefaultUserPreferences').returns({
+        visible: [1, 2],
+        hidden: [3, 4]
+      });
+      sinon.stub(view, 'saveWidgetsSettings');
+    });
 
+    afterEach(function() {
+      view.generateDefaultUserPreferences.restore();
+      view.saveWidgetsSettings.restore();
     });
 
+    it('userPreferences should be updated', function() {
+      view.set('userPreferences', {
+        visible: [3],
+        hidden: [1],
+        threshold: {}
+      });
+      view.checkServicesChange();
+      expect(view.saveWidgetsSettings.getCall(0).args[0]).to.be.eql({
+        visible: [3, 2],
+        hidden: [1, 4],
+        threshold: {}
+      });
+    });
   });
 
-  describe("#resetAllWidgets()", function () {
+  describe('#resetAllWidgets()', function() {
 
-    beforeEach(function () {
+    beforeEach(function() {
       sinon.stub(App, 'showConfirmationPopup', Em.clb);
-      sinon.stub(view, 'postUserPref', Em.K);
-      sinon.stub(view, 'setDBProperty', Em.K);
-      sinon.stub(view, 'translateToReal', Em.K);
-      view.setProperties({
-        currentTimeRangeIndex: 1,
-        customStartTime: 1000,
-        customEndTime: 2000
-      });
+      sinon.stub(view, 'generateDefaultUserPreferences').returns({settings: {}});
+      sinon.stub(view, 'saveWidgetsSettings');
+      sinon.stub(view, 'renderWidgets');
       view.resetAllWidgets();
     });
 
-    afterEach(function () {
+    afterEach(function() {
       App.showConfirmationPopup.restore();
-      view.postUserPref.restore();
-      view.setDBProperty.restore();
-      view.translateToReal.restore();
+      view.generateDefaultUserPreferences.restore();
+      view.saveWidgetsSettings.restore();
+      view.renderWidgets.restore();
     });
 
-    it('persist reset', function () {
-      expect(view.postUserPref.calledOnce).to.be.true;
-    });
-    it('local storage reset', function () {
-      expect(view.setDBProperty.calledOnce).to.be.true;
+    it('saveWidgetsSettings should be called', function() {
+      expect(view.saveWidgetsSettings.calledWith({settings: {}})).to.be.true;
     });
-    it('time range reset', function () {
-      expect(view.get('currentTimeRangeIndex')).to.equal(0);
+
+    it('renderWidgets should be called', function() {
+      expect(view.renderWidgets).to.be.calledOnce;
     });
-    it('custom start time reset', function () {
+
+    it('properties should be reset', function() {
+      expect(view.get('currentTimeRangeIndex')).to.be.equal(0);
       expect(view.get('customStartTime')).to.be.null;
-    });
-    it('custom end time reset', function () {
       expect(view.get('customEndTime')).to.be.null;
     });
-    it('default settings application', function () {
-      expect(view.translateToReal.calledOnce).to.be.true;
-    });
-
   });
 
-  describe('#checkServicesChange', function () {
+  describe('#plusButtonFilterView', function() {
+    var plusButtonFilterView;
 
-    var emptyCurrentPref = {
-        visible: [],
-        hidden: [],
-        threshold: {}
-      },
-      widgetsMap = {
-        hdfs_model: ['1', '2', '3', '4', '5', '10', '11'],
-        host_metrics_model: ['6', '7', '8', '9'],
-        hbase_model: ['12', '13', '14', '15', '16'],
-        yarn_model: ['17', '18', '19', '20', '23'],
-        storm_model: ['21'],
-        flume_model: ['22']
-      },
-      emptyModelTitle = '{0} absent',
-      notEmptyModelTitle = '{0} present';
-
-    Em.keys(widgetsMap).forEach(function (item, index, array) {
-      it(notEmptyModelTitle.format(item), function () {
-        array.forEach(function (modelName) {
-          view.set(modelName, modelName === item ? {} : null);
-        });
-        expect(view.checkServicesChange(emptyCurrentPref).visible).to.eql(widgetsMap[item]);
+    beforeEach(function() {
+      plusButtonFilterView = view.get('plusButtonFilterView').create({
+        parentView: Em.Object.create({
+          saveWidgetsSettings: Em.K,
+          renderWidgets: Em.K
+        })
       });
     });
 
-    Em.keys(widgetsMap).forEach(function (item, index, array) {
-      it(emptyModelTitle.format(item), function () {
-        var expected = [];
-        array.forEach(function (modelName) {
-          if (modelName === item) {
-            view.set(modelName, null);
-          } else {
-            view.set(modelName, {});
-            expected = expected.concat(widgetsMap[modelName]);
-          }
+    describe('#applyFilter()', function() {
+
+      beforeEach(function() {
+        sinon.spy(plusButtonFilterView.get('parentView'), 'renderWidgets');
+        sinon.spy(plusButtonFilterView.get('parentView'), 'saveWidgetsSettings');
+        plusButtonFilterView.set('parentView.userPreferences', {
+          visible: [2],
+          hidden: [1, 3],
+          threshold: {}
         });
-        expect(view.checkServicesChange({
-          visible: widgetsMap[item],
-          hidden: [],
+        plusButtonFilterView.set('hiddenWidgets', [
+          Em.Object.create({checked: true, id: 1})
+        ]);
+        plusButtonFilterView.applyFilter();
+      });
+
+      afterEach(function() {
+        plusButtonFilterView.get('parentView').renderWidgets.restore();
+        plusButtonFilterView.get('parentView').saveWidgetsSettings.restore();
+      });
+
+      it('saveWidgetsSettings should be called', function() {
+        expect(plusButtonFilterView.get('parentView').saveWidgetsSettings.getCall(0).args[0]).to.be.eql({
+          visible: [2, 1],
+          hidden: [3],
           threshold: {}
-        }).visible).to.eql(expected);
+        });
       });
-    });
 
+      it('renderWidgets should be called', function() {
+        expect(plusButtonFilterView.get('parentView').renderWidgets).to.be.calledOnce;
+      });
+    });
   });
+
 });