UNPKG

gaf-mobile

Version:

GAF mobile Web site

205 lines (168 loc) 6 kB
'use strict'; describe('PaymentVerificationCtrl', function() { var $q, $rootScope, $scope, $httpBackend; var DepositsMock, ThreatmetrixMock, FlInterFrameServiceMock; var $locationMock, $windowMock, $sceMock; var defaultVerifyData, gafBaseUrlMock; var createCtrl; beforeEach(module('gafMobileApp')); beforeEach(inject(function($controller, _$q_, _$rootScope_, _$httpBackend_) { $controller = $controller; $q = _$q_; $httpBackend = _$httpBackend_; $rootScope = _$rootScope_; $scope = $rootScope.$new(); $windowMock = { addEventListener: jasmine.createSpy() }; defaultVerifyData = { amount: 0.01, currency: { id: 1, code: 'USD' }, }; gafBaseUrlMock = 'domain.com'; createCtrl = function() { return $controller('PaymentVerificationCtrl', { $location: $locationMock, $q: $q, $rootScope: $rootScope, $scope: $scope, $sce: $sceMock, $window: $windowMock, Deposits: DepositsMock, Threatmetrix: ThreatmetrixMock, FlInterFrameService: FlInterFrameServiceMock, GAF_BASE_URL: gafBaseUrlMock }); }; })); beforeEach(function() { DepositsMock = jasmine.createSpyObj('Deposits', ['setupDeposit']); ThreatmetrixMock = jasmine.createSpyObj('Threatmetrix', ['getSession']); FlInterFrameServiceMock = jasmine.createSpyObj('FlInterFrameService', ['interFrameSubmit']); $locationMock = jasmine.createSpyObj('$location', ['url', 'search']); $sceMock = jasmine.createSpyObj('$sce', ['trustAsResourceUrl']); DepositsMock.setupDeposit.and.returnValue($q.when({ get: function() { return { url: 'newHref' }; } })); $locationMock.search.and.returnValue({}); $sceMock.trustAsResourceUrl.and.returnValue('trustedNewHref'); }); describe('Method: verifyPaymentMethod()', function() { it('should call interframe service', function() { var ctrl = createCtrl(); ctrl.verifyPaymentMethod(defaultVerifyData); expect(FlInterFrameServiceMock.interFrameSubmit).toHaveBeenCalledWith( 'iframe-payment-method-cc', defaultVerifyData.amount, defaultVerifyData.currency.code); expect(ctrl.errors.confirmError).toBeFalsy(); }); }); describe('Method: receiveMessage()', function() { it('should set go to URL if origin is == origin and return url exists', function() { $locationMock.search.and.returnValue({ return: '/memberships' }); $httpBackend.expectGET('/views/main.html').respond(200); var ctrl = createCtrl(); ctrl.receiveMessage({ origin: gafBaseUrlMock, data: { type: 'success' } }); expect($locationMock.url) .toHaveBeenCalledWith('/memberships?verified=true'); }); it('should set go to / if origin is == event origin and !return url', function() { $httpBackend.expectGET('/views/main.html').respond(200); var ctrl = createCtrl(); ctrl.receiveMessage({ origin: gafBaseUrlMock, data: { type: 'success' } }); expect($locationMock.url) .toHaveBeenCalledWith('/dashboard'); }); it('should set error to true if data type failed', function() { $httpBackend.expectGET('/views/main.html').respond(200); var ctrl = createCtrl(); ctrl.receiveMessage({ origin: gafBaseUrlMock, data: { type: 'failed' } }); expect(ctrl.errors.confirmError).toBeTruthy(); }); }); describe('init()', function() { it('should call Deposit.setupDeposit on init', function() { ThreatmetrixMock.getSession.and.returnValue('tm123'); createCtrl(); expect(DepositsMock.setupDeposit).toHaveBeenCalledWith({ amount: defaultVerifyData.amount, tracking_token: 'API|||gaf-mobile', threatmetrix_session: 'tm123', currency_id: defaultVerifyData.currency.id, deposit_method: 'fln_billing', action: 'verifyPayment', credit_card_gateway: 'gc' }); }); it('should return resolved url as iframe', function() { $httpBackend.expectGET('/views/main.html').respond(200); var ctrl = createCtrl(); $scope.$apply(); expect($sceMock.trustAsResourceUrl).toHaveBeenCalledWith('newHref'); expect(ctrl.iframe).toBe('trustedNewHref'); }); it('should set verifySetupFailure if DEPOSIT_API_FAIL is returned', function() { DepositsMock.setupDeposit.and.returnValue($q.reject({ code: 'DEPOSIT_API_FAIL' })); $httpBackend.expectGET('/views/main.html').respond(200); var ctrl = createCtrl(); $scope.$apply(); expect(ctrl.errors.verifySetupFailure).toBeTruthy(); }); it('should set unknownError if unknown code is returned', function() { DepositsMock.setupDeposit.and.returnValue($q.reject({ data: { message: 'This is an unknown error' }, code: 'UNKNOWN_ERROR' })); $httpBackend.expectGET('/views/main.html').respond(200); var ctrl = createCtrl(); $scope.$apply(); expect(ctrl.errors.unknownError).toBe('This is an unknown error'); }); }); describe('Attaching message event to handlers', function() { it('should call addEventListener function if addEventListener exists', function() { createCtrl(); expect($windowMock.addEventListener).toHaveBeenCalled(); }); it('should call attachEvent function if addEventListener does not exist', function() { $windowMock.addEventListener = undefined; $windowMock.attachEvent = jasmine.createSpy(); createCtrl(); expect($windowMock.attachEvent).toHaveBeenCalled(); }); }); });