diff --git a/ambari-web/test/utils/date/timezone_test.js b/ambari-web/test/utils/date/timezone_test.js
index ebf5e68..285412f 100644
--- a/ambari-web/test/utils/date/timezone_test.js
+++ b/ambari-web/test/utils/date/timezone_test.js
@@ -118,54 +118,4 @@
 
   });
 
-  describe('#detectUserTimezone', function () {
-
-    var getTimezoneOffset = Date.prototype.getTimezoneOffset;
-
-    function mockTimezoneOffset(jan, jul) {
-      Date.prototype.getTimezoneOffset = function () {
-        var month = this.getMonth();
-        if (month > 3 && month < 9) {
-          return -jul;
-        }
-        return -jan;
-      };
-    }
-
-    afterEach(function () {
-      Date.prototype.getTimezoneOffset = getTimezoneOffset;
-    });
-
-    it('Detect UTC+1', function () {
-      mockTimezoneOffset(0, 60);
-      var tz = timezoneUtils.detectUserTimezone();
-      expect(tz).to.contain('0-60|Africa');
-    });
-
-    it('Detect UTC+1 for Europe', function () {
-      mockTimezoneOffset(0, 60);
-      var tz = timezoneUtils.detectUserTimezone('Europe');
-      expect(tz).to.contain('0-60|Europe');
-    });
-
-    it('Detect UTC-4', function () {
-      mockTimezoneOffset(-300, -240);
-      var tz = timezoneUtils.detectUserTimezone();
-      expect(tz).to.contain('300240|America');
-    });
-
-    it('Detect UTC+3 for Asia', function () {
-      mockTimezoneOffset(120, 180);
-      var tz = timezoneUtils.detectUserTimezone();
-      expect(tz).to.contain('-120-180|Asia');
-    });
-
-    it('Detect UTC-7', function () {
-      mockTimezoneOffset(-480, -420);
-      var tz = timezoneUtils.detectUserTimezone();
-      expect(tz).to.contain('480420|America');
-    });
-
-  });
-
 });
\ No newline at end of file
