diff --git a/awx/ui/client/src/app.js b/awx/ui/client/src/app.js index fbade9490f..f3d665fafe 100644 --- a/awx/ui/client/src/app.js +++ b/awx/ui/client/src/app.js @@ -74,7 +74,6 @@ import './shared/Modal'; import './shared/prompt-dialog'; import './shared/directives'; import './shared/filters'; -import socket from './shared/socket/main'; import './shared/features/main'; import config from './shared/config/main'; import './login/authenticationServices/pendo/ng-pendo'; @@ -195,7 +194,6 @@ var tower = angular.module('Tower', [ 'StandardOutHelper', 'LogViewerOptionsDefinition', 'JobDetailHelper', - socket.name, 'lrInfiniteScroll', 'LoadConfigHelper', 'PortalJobsListDefinition', diff --git a/awx/ui/client/src/shared/main.js b/awx/ui/client/src/shared/main.js index fca72b91e1..dbe34cfa1e 100644 --- a/awx/ui/client/src/shared/main.js +++ b/awx/ui/client/src/shared/main.js @@ -11,6 +11,7 @@ import stringFilters from './string-filters/main'; import truncatedText from './truncated-text.directive'; import stateExtender from './stateExtender.provider'; import rbacUiControl from './rbacUiControl'; +import socket from './socket/main'; export default angular.module('shared', [listGenerator.name, @@ -18,6 +19,7 @@ angular.module('shared', [listGenerator.name, stringFilters.name, 'ui.router', rbacUiControl.name + socket.name ]) .factory('lodashAsPromised', lodashAsPromised) .directive('truncatedText', truncatedText) diff --git a/awx/ui/client/src/shared/socket/socket.service.js b/awx/ui/client/src/shared/socket/socket.service.js index f9bfb1ea0d..e94045cb21 100644 --- a/awx/ui/client/src/shared/socket/socket.service.js +++ b/awx/ui/client/src/shared/socket/socket.service.js @@ -5,8 +5,8 @@ *************************************************/ import ReconnectingWebSocket from 'reconnectingwebsocket'; export default -['$rootScope', '$location', '$log', 'Authorization','$state', - function ($rootScope, $location, $log, Authorization, $state) { +['$rootScope', '$location', '$log','$state', + function ($rootScope, $location, $log, $state) { return { init: function() { var self = this, @@ -35,36 +35,9 @@ export default self.checkStatus(); }; - self.socket.onmessage = function (e) { - $log.debug('Received From Server: ' + e.data); - var data = JSON.parse(e.data), str = ""; - if(data.group_name==="jobs" && !('status' in data)){ - // we know that this must have been a - // summary complete message - $log.debug('Job summary_complete ' + data.unified_job_id); - $rootScope.$emit('ws-jobs-summary', data); - } - else if(data.group_name==="job_events"){ - str = `ws-${data.group_name}-${data.job}`; - } - else if(data.group_name==="ad_hoc_command_events"){ - str = `ws-${data.group_name}-${data.ad_hoc_command}`; - } - else if(data.group_name==="control"){ - $log.debug(data.reason); - $rootScope.sessionTimer.expireSession('session_limit'); - $state.go('signOut'); - } - else { - // The naming scheme is "ws" then a - // dash (-) and the group_name. - // ex: 'ws-jobs' - str = `ws-${data.group_name}`; - } - $rootScope.$emit(str, data); - return self.socket; - }; + self.socket.onmessage = this.onMessage; + return self.socket; } else { // encountered expired token, redirect to login page @@ -77,6 +50,35 @@ export default $log.debug('socket status: ' + $rootScope.socketStatus); }, 2000); }, + onMessage: function(e){ + $log.debug('Received From Server: ' + e.data); + var data = JSON.parse(e.data), str = ""; + if(data.group_name==="jobs" && !('status' in data)){ + // we know that this must have been a + // summary complete message b/c status is missing + $log.debug('Job summary_complete ' + data.unified_job_id); + $rootScope.$emit('ws-jobs-summary', data); + return; + } + else if(data.group_name==="job_events"){ + str = `ws-${data.group_name}-${data.job}`; + } + else if(data.group_name==="ad_hoc_command_events"){ + str = `ws-${data.group_name}-${data.ad_hoc_command}`; + } + else if(data.group_name==="control"){ + $log.debug(data.reason); + $rootScope.sessionTimer.expireSession('session_limit'); + $state.go('signOut'); + } + else { + // The naming scheme is "ws" then a + // dash (-) and the group_name. + // ex: 'ws-jobs' + str = `ws-${data.group_name}`; + } + $rootScope.$emit(str, data); + }, disconnect: function(){ if(this.socket){ this.socket.close(); diff --git a/awx/ui/tests/spec/socket/socket.service-test.js b/awx/ui/tests/spec/socket/socket.service-test.js new file mode 100644 index 0000000000..c2f4d1c0b4 --- /dev/null +++ b/awx/ui/tests/spec/socket/socket.service-test.js @@ -0,0 +1,31 @@ +'use strict'; + +describe('Service: SocketService', () => { + + let SocketService, + rootScope, + event; + + beforeEach(angular.mock.module('shared')); + beforeEach(angular.mock.module('socket', function($provide){ + $provide.value('$rootScope', rootScope); + $provide.value('$location', {url: function(){}}); + })); + beforeEach(angular.mock.inject(($rootScope, _SocketService_) => { + rootScope = $rootScope.$new(); + rootScope.$emit = jasmine.createSpy('$emit'); + SocketService = _SocketService_; + })); + + describe('socket onmessage() should broadcast to correct event listener', function(){ + + it('should send to ws-jobs-summary', function(){ + event = {data : {group_name: "jobs"}}; + event.data = JSON.stringify(event.data); + console.log(event); + SocketService.onMessage(event); + expect(rootScope.$emit).toHaveBeenCalledWith('ws-jobs-summary', event.data); + }); + }); + +});