diff --git a/assets/javascripts/overview.js b/assets/javascripts/overview.js index 003f65f6cbcd..8f1d5322aa11 100644 --- a/assets/javascripts/overview.js +++ b/assets/javascripts/overview.js @@ -287,12 +287,16 @@ function showAddCommentsDialog() { modal.show(); } -function addComments(form) { +function restartOrCommentJobs(form) { const text = form.elements.text.value; if (!text.length) { return window.alert("The comment text mustn't be empty."); } - const progressIndication = document.getElementById('add-comments-progress-indication'); + const actionBtn = form.clickedButton ? form.clickedButton.value : null; + console.log(actionBtn); + let reqUrl = form.clickedButton.getAttribute('formaction'); + console.log(form.clickedButton.getAttribute('formaction')); + const progressIndication = document.getElementById('add-comments-progress-indication'); const controls = document.getElementById('add-comments-controls'); progressIndication.style.display = 'flex'; controls.style.display = 'none'; @@ -301,17 +305,31 @@ function addComments(form) { controls.style.display = 'inline'; window.addCommentsModal.hide(); }; - fetchWithCSRF(form.action, {method: 'POST', body: new FormData(form)}) + + let infoText = + 'The comments have been created. Reload the page to show changes.'; + let errText = 'The comments could not be added:'; + if (actionBtn === 'restartAndCommentJobs') { + infoText = 'Reload the page to show restarted jobs.'; + errText = 'Failed to restart jobs: '; + } + fetchWithCSRF(reqUrl, {method: 'POST', body: new FormData(form)}) .then(response => { if (!response.ok) throw `Server returned ${response.status}: ${response.statusText}`; - addFlash( - 'info', - 'The comments have been created. Reload the page to show changes.' - ); + addFlash('info', infoText); done(); + return response.json(); + }) + .then(resData => { + console.log(resData); + if (resData.errors && resData.errors.length > 0) { + for (let i in resData.errors) { + addFlash('warning', 'Warning: Errors found in Response:\n' + resData.errors[i].trim()); + } + } }) .catch(error => { - addFlash('danger', `The comments could not be added: ${error}`); + addFlash('danger', `${errText} ${error}`); done(); }); } diff --git a/t/ui/10-tests_overview.t b/t/ui/10-tests_overview.t index e3dc27eb633a..9ba9199e1057 100644 --- a/t/ui/10-tests_overview.t +++ b/t/ui/10-tests_overview.t @@ -543,18 +543,34 @@ subtest 'filter by result and state' => sub { ok !$driver->find_element_by_id('filter-failed')->is_selected, 'other checkbox not checked'; }; +subtest "job template names displayed on 'Test result overview' page" => sub { + $driver->get('/group_overview/1002'); + is($driver->find_element('.progress-bar-unfinished')->get_text(), + '1 unfinished', 'The number of unfinished jobs is right'); + + $driver->get('/tests/overview?distri=opensuse&version=13.1&build=0091&groupid=1002'); + my @tds = $driver->find_elements('#results_DVD tbody tr .name'); + is($tds[0]->get_text(), 'kde_variant', 'job template name kde_variant displayed correctly'); + + my @descriptions = $driver->find_elements('td.name a', 'css'); + is(scalar @descriptions, 2, 'only test suites with description content are shown as links'); + disable_bootstrap_animations; + $descriptions[0]->click(); + is(wait_for_element(selector => '.popover-header')->get_text, 'kde_variant', 'description popover shows content'); +}; + subtest 'add comments' => sub { - my @buttons = $driver->find_elements('button[title="Add comments"]'); + my @buttons = $driver->find_elements('button[title="Restart or comment jobs"]'); is @buttons, 0, 'button for adding comments not present if not logged-in'; $driver->find_element_by_link_text('Login')->click; $driver->get('/tests/overview?state=done&result=failed'); disable_bootstrap_animations; - $driver->find_element('button[title="Add comments"]')->click; + $driver->find_element('button[title="Restart or comment jobs"]')->click; my $comment_text = 'comment via add-comments'; - my $submit_button = $driver->find_element('#add-comments-controls button[type="submit"]'); + my $submit_button = $driver->find_element('#add-comments-controls button[id="commentJobsBtn"]'); $driver->find_element_by_id('text')->send_keys($comment_text); - is $submit_button->get_text, 'Submit comment on all 2 jobs', 'submit button displayed with number of jobs'; + is $submit_button->get_text, 'Comment on all 2 jobs', 'submit button displayed with number of jobs'; $submit_button->click; wait_for_ajax msg => 'comments created'; like $driver->find_element_by_id('flash-messages')->get_text, qr/The comments have been created. Reload/, @@ -565,23 +581,25 @@ subtest 'add comments' => sub { 'comments created on all relevant jobs'; is $comments->search({job_id => {-not_in => \@failed_job_ids}, text => $comment_text})->count, 0, 'comments not created on other jobs'; -}; - -subtest "job template names displayed on 'Test result overview' page" => sub { - $driver->get('/group_overview/1002'); - is($driver->find_element('.progress-bar-failed')->get_text(), '1 failed', 'The number of failed jobs is right'); - is($driver->find_element('.progress-bar-unfinished')->get_text(), - '1 unfinished', 'The number of unfinished jobs is right'); - - $driver->get('/tests/overview?distri=opensuse&version=13.1&build=0091&groupid=1002'); - my @tds = $driver->find_elements('#results_DVD tbody tr .name'); - is($tds[0]->get_text(), 'kde_variant', 'job template name kde_variant displayed correctly'); - my @descriptions = $driver->find_elements('td.name a', 'css'); - is(scalar @descriptions, 2, 'only test suites with description content are shown as links'); - disable_bootstrap_animations; - $descriptions[0]->click(); - is(wait_for_element(selector => '.popover-header')->get_text, 'kde_variant', 'description popover shows content'); + subtest 'restart jobs with comment' => sub { + $driver->get('/tests/overview?state=done&result=failed'); + disable_bootstrap_animations; + $driver->find_element('button[title="Restart or comment jobs"]')->click; + my $comment_text = 'comment current jobs and restart'; + my $submit_button = $driver->find_element('#add-comments-controls button[id="restartAndCommentJobsBtn"]'); + $driver->find_element_by_id('text')->send_keys($comment_text); + is $submit_button->get_text, 'Restart and comment on 2 jobs', 'submit button displayed with number of jobs'; + $submit_button->click; + wait_for_ajax msg => 'comments created'; + like $driver->find_element_by_id('flash-messages')->get_text, qr/Reload the page to show restarted jobs/, + 'info about successful restart shown'; + my @failed_job_ids = map { $_->id } $jobs->search({result => FAILED})->all; + is $comments->search({job_id => {-not_in => \@failed_job_ids}, text => $comment_text})->count, 0, + 'comments not created on other jobs'; + my $running_job_ids = map { $_->id } $jobs->search({state => RUNNING})->all; + is $running_job_ids, 2, 'all relevant jobs restarted'; + }; }; subtest "job dependencies displayed on 'Test result overview' page" => sub { diff --git a/templates/webapi/test/overview.html.ep b/templates/webapi/test/overview.html.ep index 28b00a37b3e1..b0a9e10f6724 100644 --- a/templates/webapi/test/overview.html.ep +++ b/templates/webapi/test/overview.html.ep @@ -42,8 +42,12 @@