From a8dfe31101ca36c41611ef239845879b302ebed6 Mon Sep 17 00:00:00 2001 From: Dominik Heidler Date: Fri, 3 Nov 2023 15:13:24 +0100 Subject: [PATCH] Perform comment carryover when comment has flag:carryover Ticket: https://progress.opensuse.org/issues/136244 --- lib/OpenQA/Schema/Result/Comments.pm | 13 ++++++++++++- lib/OpenQA/Schema/Result/Jobs.pm | 2 +- lib/OpenQA/Utils.pm | 7 +++++++ t/16-markdown.t | 4 ++++ t/17-labels_carry_over.t | 5 ++++- t/ui/14-dashboard.t | 2 +- 6 files changed, 29 insertions(+), 4 deletions(-) diff --git a/lib/OpenQA/Schema/Result/Comments.pm b/lib/OpenQA/Schema/Result/Comments.pm index 2b96a5e07baa..9c54da6d4a36 100644 --- a/lib/OpenQA/Schema/Result/Comments.pm +++ b/lib/OpenQA/Schema/Result/Comments.pm @@ -5,7 +5,7 @@ package OpenQA::Schema::Result::Comments; use Mojo::Base 'DBIx::Class::Core', -signatures; use OpenQA::Jobs::Constants; -use OpenQA::Utils qw(find_labels find_bugref find_bugrefs); +use OpenQA::Utils qw(find_labels find_flags find_bugref find_bugrefs); use OpenQA::Markdown qw(markdown_to_html); use List::Util qw(first); @@ -107,6 +107,17 @@ sub label ($self) { return find_labels($self->text)->[0]; } +=head2 text_flags + +Returns flag values if C<$self> has flags, e.g. 'flag:carryover flag:foobar' returns a hashref with the keys 'carryover' and 'foobar' +=cut +sub text_flags ($self) { + my $flags = find_flags($self->text); + my %flag_hash; + @flag_hash{@$flags} = (); + return \%flag_hash; +} + =head2 force_result Returns new result value if C<$self> is a special "force_result" label, e.g. diff --git a/lib/OpenQA/Schema/Result/Jobs.pm b/lib/OpenQA/Schema/Result/Jobs.pm index 0a5ce49a2c83..d8d1e6fbe587 100644 --- a/lib/OpenQA/Schema/Result/Jobs.pm +++ b/lib/OpenQA/Schema/Result/Jobs.pm @@ -1713,7 +1713,7 @@ sub carry_over_bugrefs ($self) { my $comments = $prev->comments->search({}, {order_by => {-desc => 'me.id'}}); for my $comment ($comments->all) { - next unless $comment->bugref; + next if !$comment->bugref && !exists($comment->text_flags->{carryover}); my $text = $comment->text; my $prev_id = $prev->id; $text .= "\n\n(Automatic takeover from t#$prev_id)" if $text !~ qr/Automatic takeover/; diff --git a/lib/OpenQA/Utils.pm b/lib/OpenQA/Utils.pm index 0881bd20be1a..4d8bf43c1a4e 100644 --- a/lib/OpenQA/Utils.pm +++ b/lib/OpenQA/Utils.pm @@ -103,6 +103,7 @@ our @EXPORT = qw( run_cmd_with_log_return_error parse_assets_from_settings find_labels + find_flags find_bugref find_bugrefs bugurl @@ -431,6 +432,12 @@ sub find_labels { return \@labels; } +sub find_flags ($text) { + my @flags; + push @flags, $+{match} while $text =~ /${\FLAG_REGEX}/g; + return \@flags; +} + sub find_bugref { my ($text) = @_; $text //= ''; diff --git a/t/16-markdown.t b/t/16-markdown.t index b915afaf0add..d4aa6cc09411 100644 --- a/t/16-markdown.t +++ b/t/16-markdown.t @@ -8,10 +8,14 @@ use Test::Warnings ':report_warnings'; use FindBin; use lib "$FindBin::Bin/lib", "$FindBin::Bin/../external/os-autoinst-common/lib"; +use OpenQA::Test::Case; use OpenQA::Test::TimeLimit '10'; use OpenQA::Markdown qw(bugref_to_html is_light_color markdown_to_html); +my $test_case = OpenQA::Test::Case->new; +my $schema = $test_case->init_data(fixtures_glob => '01-jobs.pl 03-users.pl 05-job_modules.pl'); my $t = Test::Mojo->new('OpenQA::WebAPI'); +$schema->txn_begin; subtest 'standard markdown' => sub { is markdown_to_html('Test'), "

Test

\n", 'HTML rendered'; diff --git a/t/17-labels_carry_over.t b/t/17-labels_carry_over.t index db85cd2e38d2..34af3b9f6f0c 100644 --- a/t/17-labels_carry_over.t +++ b/t/17-labels_carry_over.t @@ -15,6 +15,7 @@ use Test::Output 'combined_from'; use OpenQA::Test::Case; use OpenQA::Test::TimeLimit '10'; use OpenQA::Test::Utils qw(assume_all_assets_exist); +use Mojo::DOM; use Mojo::JSON qw(decode_json); my $test_case = OpenQA::Test::Case->new; @@ -26,7 +27,9 @@ $test_case->login($t, 'percival'); assume_all_assets_exist; my $comment_must - = 'bsc#1234(Automatic takeover from t#99962)'; + = Mojo::DOM->new( +' bsc#1234(Automatic takeover from t#99962)' +)->to_string; my $carry_over_note = "\n(The hook script will not be executed.)"; sub comments ($url) { $t->get_ok("$url/comments_ajax")->status_is(200)->tx->res->dom->find('.media-comment > p')->map('content'); diff --git a/t/ui/14-dashboard.t b/t/ui/14-dashboard.t index 4fbda889c1fc..1c1ff2ca694e 100644 --- a/t/ui/14-dashboard.t +++ b/t/ui/14-dashboard.t @@ -72,7 +72,7 @@ log_debug('build_url: ' . $build_url); is(scalar @{$driver->find_elements('.h4', 'css')}, 5, 'number of builds for opensuse'); is( $driver->find_element_by_id('group_description')->get_text(), - "Test description\nwith bugref bsc#1234", + "Test description\nwith bugref bsc#1234", # second space comes from using non-breaking space in bugref span 'description shown' ); is(