gaf-mobile
Version:
GAF mobile Web site
205 lines (168 loc) • 6 kB
JavaScript
'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();
});
});
});