Skip to content

Commit

Permalink
Add test for delete_needles
Browse files Browse the repository at this point in the history
Issues:
* https://progress.opensuse.org/issues/164898
* https://progress.opensuse.org/issues/165393

This tests different failures and also adds coverage for the git part
in OpenQA::Schema::Result::Needles.
  • Loading branch information
perlpunk committed Oct 1, 2024
1 parent d621070 commit c6b2720
Showing 1 changed file with 54 additions and 1 deletion.
55 changes: 54 additions & 1 deletion t/14-grutasks-git.t
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ use Test::Warnings qw(:report_warnings);
use Mojo::Util qw(dumper scope_guard);
use Mojo::File qw(path tempdir);
use Time::Seconds;
use File::Copy::Recursive qw(dircopy);

# Avoid tampering with git checkout
my $workdir = tempdir("$FindBin::Script-XXXX", TMPDIR => 1);
Expand All @@ -27,6 +28,8 @@ path('t/data/openqa/db')->make_path;
my $git_clones = "$workdir/git-clones";
mkdir $git_clones;
mkdir "$git_clones/$_" for qw(default branch dirty-error dirty-status nodefault wrong-url);
mkdir 't';
dircopy "$FindBin::Bin/$_", "$workdir/t/$_" or BAIL_OUT($!) for qw(data);

my $schema = OpenQA::Test::Database->new->create();
my $t = Test::Mojo->new('OpenQA::WebAPI');
Expand Down Expand Up @@ -212,7 +215,7 @@ subtest 'git clone' => sub {
};

subtest 'git_update_all' => sub {
OpenQA::App->singleton->config->{'scm git'}->{git_auto_update} = 'yes';
$t->app->config->{'scm git'}->{git_auto_update} = 'yes';
my $testdir = $workdir->child('openqa/share/tests');
$testdir->make_path;
my @clones;
Expand All @@ -228,6 +231,56 @@ subtest 'git_update_all' => sub {
is_deeply [sort keys %$args], \@clones, 'job args as expected';
};

subtest 'delete_needles' => sub {
my $needledirs = $schema->resultset('NeedleDirs');
my $needles = $schema->resultset('Needles');
$needledirs->create({id => 1, path => 't/data/openqa/share/tests/archlinux/needles', 'name' => 'test'});
$needledirs->create({id => 2, path => 't/data/openqa/share/tests/fedora/needles', 'name' => 'test'});
$needles->create({dir_id => 1, filename => 'test-rootneedle.json'});
$needles->create({dir_id => 2, filename => 'test-duplicate-needle.json'});
$needles->create({dir_id => 2, filename => 'test-rootneedle.json'});
$needles->create({dir_id => 2, filename => 'test-nestedneedle-1.json'});

my %args = (
needle_ids => [1, 2],
user_id => 1,
);
my @gru_args = ($t->app, 'delete_needles', \%args, {priority => 10});
my $res = run_gru_job(@gru_args);
is $res->{state}, 'finished', 'success';
is $#{$res->{result}->{errors}}, -1, 'no errors';
is_deeply $res->{result}->{removed_ids}, [1, 2], 'removed expected ids';

unlink 't/data/openqa/share/tests/fedora/needles/test-rootneedle.png';
$args{needle_ids} = [3];
@gru_args = ($t->app, 'delete_needles', \%args, {priority => 10});
$res = run_gru_job(@gru_args);
my $error = $res->{result}->{errors}->[0];
is $error->{display_name}, 'test-rootneedle.json', 'expected error for missing png';

$args{needle_ids} = [99];
@gru_args = ($t->app, 'delete_needles', \%args, {priority => 10});
$res = run_gru_job(@gru_args);
$error = $res->{result}->{errors}->[0];
like $error->{message}, qr{Unable to find needle.*99}, 'expected error for not existing needle';

$t->app->config->{global}->{scm} = 'git';
my $openqa_git = Test::MockModule->new('OpenQA::Git');
my @cmds;
$openqa_git->redefine(
run_cmd_with_log_return_error => sub ($cmd) {
push @cmds, "@$cmd";
return {status => 1};
});
$args{needle_ids} = [4];
@gru_args = ($t->app, 'delete_needles', \%args, {priority => 10});
$res = run_gru_job(@gru_args);
is $res->{state}, 'finished', 'git success';
like $cmds[0], qr{git.*rm.*test-nestedneedle-1.json}, 'git add was executed';
like $cmds[1], qr{git.*commit.*Remove.*test-nestedneedle-1.json}, 'git commit was executed';
};


done_testing();

# clear gru task queue at end of execution so no 'dangling' tasks
Expand Down

0 comments on commit c6b2720

Please sign in to comment.