From 0347cb5bda490f9e801db133ed547412a152f01b Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Thu, 19 Jun 2014 15:07:20 -0300 Subject: [PATCH] add isMobile service and tests --- js/controllers/send.js | 25 +---------------------- js/services/isMobile.js | 26 ++++++++++++++++++++++++ test/unit/controllers/controllersSpec.js | 14 +++++++++++++ test/unit/services/servicesSpec.js | 16 +++++++++++++++ 4 files changed, 57 insertions(+), 24 deletions(-) create mode 100644 js/services/isMobile.js diff --git a/js/controllers/send.js b/js/controllers/send.js index 8320e9f2d..49a5506c8 100644 --- a/js/controllers/send.js +++ b/js/controllers/send.js @@ -2,7 +2,7 @@ var bitcore = require('bitcore'); angular.module('copayApp.controllers').controller('SendController', - function($scope, $rootScope, $window, $location, $timeout, $anchorScroll, $modal) { + function($scope, $rootScope, $window, $location, $timeout, $anchorScroll, $modal, isMobile) { $scope.title = 'Send'; $scope.loading = false; var satToUnit = 1 / config.unitToSatoshi; @@ -23,29 +23,6 @@ angular.module('copayApp.controllers').controller('SendController', return flag; }; - // TODO this shouldnt be on a particular controller. - // Detect mobile devices - var isMobile = { - Android: function() { - return navigator.userAgent.match(/Android/i); - }, - BlackBerry: function() { - return navigator.userAgent.match(/BlackBerry/i); - }, - iOS: function() { - return navigator.userAgent.match(/iPhone|iPad|iPod/i); - }, - Opera: function() { - return navigator.userAgent.match(/Opera Mini/i); - }, - Windows: function() { - return navigator.userAgent.match(/IEMobile/i); - }, - any: function() { - return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); - } - }; - // Detect protocol $scope.isHttp = ($window.location.protocol.indexOf('http') === 0); diff --git a/js/services/isMobile.js b/js/services/isMobile.js new file mode 100644 index 000000000..de0150070 --- /dev/null +++ b/js/services/isMobile.js @@ -0,0 +1,26 @@ +'use strict'; + +// Detect mobile devices +var isMobile = { + Android: function() { + return !! navigator.userAgent.match(/Android/i); + }, + BlackBerry: function() { + return !! navigator.userAgent.match(/BlackBerry/i); + }, + iOS: function() { + return !! navigator.userAgent.match(/iPhone|iPad|iPod/i); + }, + Opera: function() { + return !! navigator.userAgent.match(/Opera Mini/i); + }, + Windows: function() { + return !! navigator.userAgent.match(/IEMobile/i); + }, + any: function() { + return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); + } +}; + + +angular.module('copayApp.services').value('isMobile', isMobile); diff --git a/test/unit/controllers/controllersSpec.js b/test/unit/controllers/controllersSpec.js index 736cb2cac..c01b7ce9b 100644 --- a/test/unit/controllers/controllersSpec.js +++ b/test/unit/controllers/controllersSpec.js @@ -214,4 +214,18 @@ describe("Unit: Controllers", function() { }); + describe('Send Controller', function() { + var sendCtrl; + beforeEach(inject(function($controller, $rootScope) { + scope = $rootScope.$new(); + sendCtrl = $controller('SendController', { + $scope: scope, + }); + })); + + it('should have a SendController', function() { + expect(scope.isMobile).not.to.equal(null); + }); + }); + }); diff --git a/test/unit/services/servicesSpec.js b/test/unit/services/servicesSpec.js index b515e6bf7..8940bb70a 100644 --- a/test/unit/services/servicesSpec.js +++ b/test/unit/services/servicesSpec.js @@ -108,3 +108,19 @@ describe("Unit: Backup Service", function() { expectation.once(); })); }); + +describe("Unit: isMobile Service", function() { + beforeEach(angular.mock.module('copayApp.services')); + it('should contain a isMobile service', inject(function(isMobile) { + expect(isMobile).not.to.equal(null); + })); + it('should not detect mobile by default', inject(function(isMobile) { + isMobile.any().should.equal(false); + })); + it('should detect mobile if user agent is Android', inject(function(isMobile) { + navigator.__defineGetter__('userAgent', function(){ + return 'Android 2.2.3'; + }); + isMobile.any().should.equal(true); + })); +});