From eca7a6be6e534c0c990aeb6766e015adaee61a60 Mon Sep 17 00:00:00 2001 From: Showtim3 Date: Sun, 19 Jan 2020 23:03:03 +0530 Subject: [PATCH 1/4] Adding e2e test for one off job --- .../jobs-tab/admin-jobs-tab.directive.html | 19 +++--- .../protractor_desktop/adminTabFeatures.js | 23 ++++++- core/tests/protractor_utils/AdminPage.js | 65 +++++++++++++++++++ 3 files changed, 97 insertions(+), 10 deletions(-) diff --git a/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html b/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html index 503a10145d63c..53be689c569d6 100644 --- a/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html +++ b/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html @@ -34,12 +34,12 @@

Continuous computations

One-off jobs

Current time: <[$ctrl.HUMAN_READABLE_CURRENT_TIME]>

- - - +
<[job_spec.job_type]>
+ +
<[job_spec.job_type]> Current time: <[$ctrl.HUMAN_READABLE_CURRENT_TIME]> + class="oppia-page-card oppia-long-text protractor-test-unfinished-jobs-card" style="max-width: 900px">

Unfinished jobs

Note: This table may be stale; refresh to see the latest state. - + - - + + diff --git a/core/tests/protractor_desktop/adminTabFeatures.js b/core/tests/protractor_desktop/adminTabFeatures.js index eae77eb62d9af..f1199121455c7 100644 --- a/core/tests/protractor_desktop/adminTabFeatures.js +++ b/core/tests/protractor_desktop/adminTabFeatures.js @@ -20,7 +20,7 @@ var general = require('../protractor_utils/general.js'); var users = require('../protractor_utils/users.js'); var AdminPage = require('../protractor_utils/AdminPage.js'); -describe('Admin Tab', function() { +describe('Admin Page', function() { var adminPage = null; beforeAll(function() { @@ -49,6 +49,27 @@ describe('Admin Tab', function() { adminPage.updateRole('collectionEditor1', 'collection editor'); adminPage.getUsersAsssignedToRole('collection editor'); adminPage.expectUsernamesToMatch(['collectionEditor1']); + users.logout(); + }); + + it('should run,verify and stop one-off jobs', function() { + users.createAndLoginAdminUser('adminA@adminTab.com', 'alphaMan'); + adminPage.getJobsTab(); + + adminPage.startOneOffJob('FeedbackThreadCacheOneOffJob'); + adminPage.expectJobTobeRunning('FeedbackThreadCacheOneOffJob'); + adminPage.expectNumberOfRunningOneOffJobs(1); + + adminPage.startOneOffJob('ExplorationValidityJobManager'); + adminPage.expectJobTobeRunning('ExplorationValidityJobManager'); + adminPage.expectNumberOfRunningOneOffJobs(2); + + adminPage.stopOneOffJob('FeedbackThreadCacheOneOffJob'); + adminPage.expectJobTobeRunning('ExplorationValidityJobManager'); + adminPage.expectNumberOfRunningOneOffJobs(1); + + adminPage.stopOneOffJob('ExplorationValidityJobManager'); + adminPage.expectNumberOfRunningOneOffJobs(0); }); afterEach(function() { diff --git a/core/tests/protractor_utils/AdminPage.js b/core/tests/protractor_utils/AdminPage.js index 77c278ff0049f..aa2182128b584 100644 --- a/core/tests/protractor_utils/AdminPage.js +++ b/core/tests/protractor_utils/AdminPage.js @@ -40,6 +40,11 @@ var AdminPage = function() { var roleUsernameOption = element(by.css( '.protractor-test-username-value')); var viewRoleButton = element(by.css('.protractor-test-role-success')); + var oneOffJobRows = element.all(by.css('.protractor-test-one-off-jobs-rows')); + var unfinishedOneOffJobRows = element.all(by.css( + '.protractor-test-unfinished-one-off-jobs-rows')); + var unfinishedOffJobIDs = element.all(by.css( + '.protractor-test-unfinished-one-off-jobs-id')); // The reload functions are used for mobile testing // done via Browserstack. These functions may cause @@ -124,6 +129,11 @@ var AdminPage = function() { return waitFor.pageToFullyLoad(); }; + this.getJobsTab = function() { + browser.get(ADMIN_URL_SUFFIX + '#/jobs'); + return waitFor.pageToFullyLoad(); + }; + this.editConfigProperty = function( propertyName, objectType, editingInstructions) { this.get(); @@ -142,6 +152,61 @@ var AdminPage = function() { }); }; + this.startOneOffJob = function(jobName) { + this._startOneOffJob(jobName, 0); + }; + + this._startOneOffJob = function(jobName, i) { + waitFor.visibilityOf(oneOffJobRows.first(), + 'Starting one off jobs taking too long to appear.'); + oneOffJobRows.get(i).getText().then((text) => { + if (text.toLowerCase().startsWith(jobName.toLowerCase())) { + oneOffJobRows.get(i).element( + by.css('.protractor-test-one-off-jobs-start-btn')).click(); + } else { + this._startOneOffJob(jobName, ++i); + } + }); + }; + + this.stopOneOffJob = function(jobName) { + this._stopOneOffJob(jobName, 0); + }; + + this._stopOneOffJob = function(jobName, i) { + unfinishedOneOffJobRows.get(i).getText().then((text) => { + if (text.toLowerCase().startsWith(jobName.toLowerCase())) { + unfinishedOneOffJobRows.get(i).element( + by.css('.protractor-test-one-off-jobs-stop-btn')).click(); + } else { + this._stopOneOffJob(jobName, ++i); + } + }); + }; + + this.expectNumberOfRunningOneOffJobs = function(count) { + element.all(by.css( + '.protractor-test-unfinished-one-off-jobs-id')).count().then((len) =>{ + expect(len).toEqual(count); + }); + }; + + this.expectJobTobeRunning = function(jobName) { + browser.refresh(); + waitFor.pageToFullyLoad(); + waitFor.visibilityOf(element( + by.css('.protractor-test-unfinished-jobs-card')), + 'Unfinished Jobs taking too long to appear'); + let unfinishedJobs = unfinishedOffJobIDs.filter((element) => { + return element.getText().then((job) => { + return job.toLowerCase().startsWith(jobName.toLowerCase()); + }); + }); + unfinishedJobs.get(0).getText((job) => { + expect(job.toLowerCase().startsWith(jobName.toLowerCase())).toBeTrue(); + }); + }; + this.updateRole = function(name, newRole) { waitFor.elementToBeClickable( adminRolesTab, 'Admin Roles tab is not clickable'); From 599b1f35d29bea28bbf0c6e8dad741c137d4d674 Mon Sep 17 00:00:00 2001 From: Showtim3 Date: Mon, 20 Jan 2020 03:18:36 +0530 Subject: [PATCH 2/4] Removing unwanted changes --- .../pages/admin-page/jobs-tab/admin-jobs-tab.directive.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html b/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html index 53be689c569d6..aa9910ebd3a3a 100644 --- a/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html +++ b/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html @@ -34,7 +34,7 @@

Continuous computations

One-off jobs

Current time: <[$ctrl.HUMAN_READABLE_CURRENT_TIME]>

-
Job IDJob ID Status Time started Time finished
<[job.id]>
<[job.id]> <[job.status_code]> <[job.human_readable_time_started]> <[job.human_readable_time_finished]>
+
diff --git a/core/tests/protractor_desktop/adminTabFeatures.js b/core/tests/protractor_desktop/adminTabFeatures.js index ead5da531594b..db75dfebea6fd 100644 --- a/core/tests/protractor_desktop/adminTabFeatures.js +++ b/core/tests/protractor_desktop/adminTabFeatures.js @@ -56,6 +56,7 @@ describe('Admin Page', function() { users.createAndLoginAdminUser('adminA@adminTab.com', 'alphaMan'); adminPage.getJobsTab(); + // The following jobs are selected arbitrarily. adminPage.startOneOffJob('FeedbackThreadCacheOneOffJob'); adminPage.expectJobToBeRunning('FeedbackThreadCacheOneOffJob'); adminPage.expectNumberOfRunningOneOffJobs(1);
<[job_spec.job_type]> From 69374b04878c1441218046000b6678c3a11a9428 Mon Sep 17 00:00:00 2001 From: Showtim3 Date: Mon, 20 Jan 2020 14:24:08 +0530 Subject: [PATCH 3/4] Fixing typo --- core/tests/protractor_desktop/adminTabFeatures.js | 6 +++--- core/tests/protractor_utils/AdminPage.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/tests/protractor_desktop/adminTabFeatures.js b/core/tests/protractor_desktop/adminTabFeatures.js index f1199121455c7..ead5da531594b 100644 --- a/core/tests/protractor_desktop/adminTabFeatures.js +++ b/core/tests/protractor_desktop/adminTabFeatures.js @@ -57,15 +57,15 @@ describe('Admin Page', function() { adminPage.getJobsTab(); adminPage.startOneOffJob('FeedbackThreadCacheOneOffJob'); - adminPage.expectJobTobeRunning('FeedbackThreadCacheOneOffJob'); + adminPage.expectJobToBeRunning('FeedbackThreadCacheOneOffJob'); adminPage.expectNumberOfRunningOneOffJobs(1); adminPage.startOneOffJob('ExplorationValidityJobManager'); - adminPage.expectJobTobeRunning('ExplorationValidityJobManager'); + adminPage.expectJobToBeRunning('ExplorationValidityJobManager'); adminPage.expectNumberOfRunningOneOffJobs(2); adminPage.stopOneOffJob('FeedbackThreadCacheOneOffJob'); - adminPage.expectJobTobeRunning('ExplorationValidityJobManager'); + adminPage.expectJobToBeRunning('ExplorationValidityJobManager'); adminPage.expectNumberOfRunningOneOffJobs(1); adminPage.stopOneOffJob('ExplorationValidityJobManager'); diff --git a/core/tests/protractor_utils/AdminPage.js b/core/tests/protractor_utils/AdminPage.js index aa2182128b584..b59f5e32ccb04 100644 --- a/core/tests/protractor_utils/AdminPage.js +++ b/core/tests/protractor_utils/AdminPage.js @@ -191,7 +191,7 @@ var AdminPage = function() { }); }; - this.expectJobTobeRunning = function(jobName) { + this.expectJobToBeRunning = function(jobName) { browser.refresh(); waitFor.pageToFullyLoad(); waitFor.visibilityOf(element( From 743ae3b9e82c4ae7e8a96b9cdf8159605fc66ed5 Mon Sep 17 00:00:00 2001 From: Showtim3 Date: Thu, 23 Jan 2020 12:51:10 +0530 Subject: [PATCH 4/4] Removing float right and adding comment --- .../pages/admin-page/jobs-tab/admin-jobs-tab.directive.html | 2 +- core/tests/protractor_desktop/adminTabFeatures.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html b/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html index aa9910ebd3a3a..a265aa00f182a 100644 --- a/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html +++ b/core/templates/dev/head/pages/admin-page/jobs-tab/admin-jobs-tab.directive.html @@ -95,7 +95,7 @@

Unfinished jobs