From af370a1d0287b8e677bf85e0684a6b72b7203807 Mon Sep 17 00:00:00 2001 From: Marius Kittler Date: Thu, 16 Nov 2023 16:50:34 +0100 Subject: [PATCH 1/2] Simplify code for setting up restart buttons Avoid the syntactic noise from using jQuery and just use the regular DOM API directly. --- assets/javascripts/tests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/javascripts/tests.js b/assets/javascripts/tests.js index 3088492b549..8a194ad9d48 100644 --- a/assets/javascripts/tests.js +++ b/assets/javascripts/tests.js @@ -488,7 +488,7 @@ function setupTestButtons() { function setupResultButtons() { $('.restart-result').click(function (event) { event.preventDefault(); - restartJob($(this).attr('href'), $(this).data('jobid')); + restartJob(this.href, this.dataset.jobid); // prevent posting twice by clicking #restart-result return false; }); From 7353782b82543f43cbb6e1db763567ec320f6265 Mon Sep 17 00:00:00 2001 From: Marius Kittler Date: Thu, 16 Nov 2023 16:52:53 +0100 Subject: [PATCH 2/2] Fix force-restarting jobs when an advanced restarting option was chosen Appending the force-parameter doesn't work that easily when the URL already contains other parameters. So we need to take that case into account when adding the force-parameter. I made this fix in the context of working on https://progress.opensuse.org/issues/150917. --- assets/javascripts/openqa.js | 26 ++++++++++++++++++++++---- t/ui/26-jobs_restart.t | 5 +++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/assets/javascripts/openqa.js b/assets/javascripts/openqa.js index a1948985945..17a21cc68a2 100644 --- a/assets/javascripts/openqa.js +++ b/assets/javascripts/openqa.js @@ -213,10 +213,22 @@ function showJobRestartResults(responseJSON, newJobUrl, retryFunction, targetEle return true; } -function forceJobRestartViaRestartLink(restartLink) { - if (!restartLink.href.endsWith('?force=1')) { - restartLink.href += '?force=1'; +function addParam(path, key, value) { + const paramsStart = path.indexOf('?'); + let params; + if (paramsStart === -1) { + params = new URLSearchParams(); + path = path + '?'; + } else { + params = new URLSearchParams(path.substr(paramsStart + 1)); + path = path.substr(0, paramsStart + 1); } + params.set(key, value); + return path + params.toString(); +} + +function forceJobRestartViaRestartLink(restartLink) { + restartLink.href = addParam(restartLink.href, 'force', '1'); restartLink.click(); } @@ -242,7 +254,13 @@ function restartJob(ajaxUrl, jobId) { } catch { // Intentionally ignore all errors } - if (showJobRestartResults(responseJSON, newJobUrl, restartJob.bind(undefined, ajaxUrl + '?force=1', jobId))) { + if ( + showJobRestartResults( + responseJSON, + newJobUrl, + restartJob.bind(undefined, addParam(ajaxUrl, 'force', '1'), jobId) + ) + ) { return; } if (newJobUrl) { diff --git a/t/ui/26-jobs_restart.t b/t/ui/26-jobs_restart.t index 7ff22552420..3e2120c4872 100644 --- a/t/ui/26-jobs_restart.t +++ b/t/ui/26-jobs_restart.t @@ -146,6 +146,11 @@ subtest 'restart job from info panel in test results' => sub { expected_job_id_regex(2), 'warning with link to new job appears' ); + + my $test = "return addParam('/api/v1/jobs/123/restart?skip_ok_result_children=1', 'force', '1')"; + my $path = $driver->execute_script($test); + is $path, '/api/v1/jobs/123/restart?skip_ok_result_children=1&force=1', + 'advanced restarting parameter preserved when adding force parameter'; }; subtest 'successful restart' => sub { is($driver->get('/tests/99946'), 1, 'go to job 99946');