From f7e184650bd6fbdcac3de5f6f3f931929bdc9917 Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Fri, 18 Nov 2016 18:17:11 -0500 Subject: [PATCH 1/3] updated of stdout sections to include event --- .../src/job-results/job-results.controller.js | 20 +++++++++++++++- .../job-results.controller-test.js | 23 ++++++++++++++++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/awx/ui/client/src/job-results/job-results.controller.js b/awx/ui/client/src/job-results/job-results.controller.js index af1622c148..5e68cb1aa5 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -96,6 +96,8 @@ export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count' $scope.followTooltip = "Currently following standard out as it comes in. Click to unfollow."; } + $scope.events = {}; + // EVENT STUFF BELOW // This is where the async updates to the UI actually happen. @@ -145,10 +147,21 @@ export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count' if(change === 'stdout'){ // put stdout elements in stdout container + + // this scopes the event to that particular + // block of stdout. + // If you need to see the event a particular + // stdout block is from, you can: + // angular.element($0).scope().event + $scope.events[mungedEvent.counter] = $scope.$new(); + $scope.events[mungedEvent.counter] + .event = mungedEvent; + angular .element(".JobResultsStdOut-stdoutContainer") .append($compile(mungedEvent - .stdout)($scope)); + .stdout)($scope.events[mungedEvent + .counter])); // move the followAnchor to the bottom of the // container @@ -158,6 +171,11 @@ export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count' // if follow is engaged, // scroll down to the followAnchor if ($scope.followEngaged) { + if (!$scope.followScroll) { + $scope.followScroll = function() { + return null; + } + } $scope.followScroll(); } } diff --git a/awx/ui/tests/spec/job-results/job-results.controller-test.js b/awx/ui/tests/spec/job-results/job-results.controller-test.js index 11e5275cd2..bcb8c4f9f8 100644 --- a/awx/ui/tests/spec/job-results/job-results.controller-test.js +++ b/awx/ui/tests/spec/job-results/job-results.controller-test.js @@ -39,7 +39,6 @@ describe('Controller: jobResultsController', () => { 'populate', 'markProcessed' ]); - $compile = jasmine.createSpy('$compile'); $provide.value('jobData', jobData); $provide.value('jobDataOptions', jobDataOptions); @@ -50,7 +49,6 @@ describe('Controller: jobResultsController', () => { $provide.value('ParseVariableString', ParseVariableString); $provide.value('jobResultsService', jobResultsService); $provide.value('eventQueue', eventQueue); - $provide.value('$compile', $compile); }); }; @@ -554,6 +552,25 @@ describe('Controller: jobResultsController', () => { }); }); - // TODO: stdout change tests + describe('populate - stdout', () => { + beforeEach(() => { + + populateResolve = { + counter: 12, + stdout: "line", + changes: ['stdout'] + }; + + bootstrapTest(); + + $scope.followEngaged = true; + + $scope.$apply(); + }); + + it('creates new child scope for the event', () => { + expect($scope.events[12].event).toBe(populateResolve); + }); + }); }); }); From eb4ec5476469ba12c48c02468a2cf490066eee36 Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Mon, 21 Nov 2016 10:56:33 -0500 Subject: [PATCH 2/3] update controller to handle undefined followScroll function --- .../src/job-results/job-results.controller.js | 4 ++-- .../job-results/job-results.controller-test.js | 14 +++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/awx/ui/client/src/job-results/job-results.controller.js b/awx/ui/client/src/job-results/job-results.controller.js index 5e68cb1aa5..2d4df1803b 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -1,4 +1,4 @@ -export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count', '$scope', 'ParseTypeChange', 'ParseVariableString', 'jobResultsService', 'eventQueue', '$compile', function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile) { +export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count', '$scope', 'ParseTypeChange', 'ParseVariableString', 'jobResultsService', 'eventQueue', '$compile', '$log', function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, $log) { var getTowerLinks = function() { var getTowerLink = function(key) { if ($scope.job.related[key]) { @@ -173,7 +173,7 @@ export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count' if ($scope.followEngaged) { if (!$scope.followScroll) { $scope.followScroll = function() { - return null; + $log.error("follow scroll undefined, standard out directive not loaded yet?"); } } $scope.followScroll(); diff --git a/awx/ui/tests/spec/job-results/job-results.controller-test.js b/awx/ui/tests/spec/job-results/job-results.controller-test.js index bcb8c4f9f8..2f34a42803 100644 --- a/awx/ui/tests/spec/job-results/job-results.controller-test.js +++ b/awx/ui/tests/spec/job-results/job-results.controller-test.js @@ -4,7 +4,7 @@ describe('Controller: jobResultsController', () => { // Setup let jobResultsController; - let jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, eventResolve, populateResolve, $rScope, q; + let jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, eventResolve, populateResolve, $rScope, q, $log; jobData = { related: {} @@ -53,7 +53,7 @@ describe('Controller: jobResultsController', () => { }; let injectVals = () => { - angular.mock.inject((_jobData_, _jobDataOptions_, _jobLabels_, _jobFinished_, _count_, _ParseTypeChange_, _ParseVariableString_, _jobResultsService_, _eventQueue_, _$compile_, $rootScope, $controller, $q, $httpBackend) => { + angular.mock.inject((_jobData_, _jobDataOptions_, _jobLabels_, _jobFinished_, _count_, _ParseTypeChange_, _ParseVariableString_, _jobResultsService_, _eventQueue_, _$compile_, $rootScope, $controller, $q, $httpBackend, _$log_) => { // when you call $scope.$apply() (which you need to do to // to get inside of .then blocks to test), something is // causing a request for all static files. @@ -79,6 +79,7 @@ describe('Controller: jobResultsController', () => { ParseVariableString.and.returnValue(jobData.extra_vars); jobResultsService = _jobResultsService_; eventQueue = _eventQueue_; + $log = _$log_; jobResultsService.getEvents.and .returnValue($q.when(eventResolve)); @@ -97,7 +98,8 @@ describe('Controller: jobResultsController', () => { ParseTypeChange: ParseTypeChange, jobResultsService: jobResultsService, eventQueue: eventQueue, - $compile: $compile + $compile: $compile, + $log: $log }); }); }; @@ -563,6 +565,8 @@ describe('Controller: jobResultsController', () => { bootstrapTest(); + spyOn($log, 'error'); + $scope.followEngaged = true; $scope.$apply(); @@ -570,6 +574,10 @@ describe('Controller: jobResultsController', () => { it('creates new child scope for the event', () => { expect($scope.events[12].event).toBe(populateResolve); + + // in unit test, followScroll should not be defined as + // directive has not been instantiated + expect($log.error).toHaveBeenCalledWith("follow scroll undefined, standard out directive not loaded yet?"); }); }); }); From 857be6dce544593f0a4a7a605c50fd93f3514b0b Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Mon, 21 Nov 2016 16:41:57 -0500 Subject: [PATCH 3/3] fix jshint error --- awx/ui/client/src/job-results/job-results.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/ui/client/src/job-results/job-results.controller.js b/awx/ui/client/src/job-results/job-results.controller.js index 2d4df1803b..0f4ccb81a4 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -174,7 +174,7 @@ export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count' if (!$scope.followScroll) { $scope.followScroll = function() { $log.error("follow scroll undefined, standard out directive not loaded yet?"); - } + }; } $scope.followScroll(); }