Merge pull request #962 from DeterminateSystems/del-.jobsets

Project: delete the `.jobsets` jobset if project is no longer declarative
This commit is contained in:
Graham Christensen 2021-05-06 11:57:34 -04:00 committed by GitHub
commit 67b6f0d7ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 132 additions and 20 deletions

View file

@ -169,6 +169,12 @@ sub updateProject {
, emailoverride => "" , emailoverride => ""
, triggertime => time , triggertime => time
}); });
} else {
$project->jobsets->search({ name => ".jobsets" })->delete;
$project->update(
{ decltype => ""
, declvalue => ""
});
} }
} }

View file

@ -1,7 +1,7 @@
use feature 'unicode_strings'; use feature 'unicode_strings';
use strict; use strict;
use Setup; use Setup;
use JSON qw(decode_json); use JSON qw(decode_json encode_json);
my %ctx = test_init(); my %ctx = test_init();
@ -17,8 +17,25 @@ Catalyst::Test->import('Hydra');
my $db = Hydra::Model::DB->new; my $db = Hydra::Model::DB->new;
hydra_setup($db); hydra_setup($db);
my $project = $db->resultset('Projects')->create({name => "tests", displayname => "", owner => "root"}); # Create a user to log in to
my $user = $db->resultset('Users')->create({ username => 'alice', emailaddress => 'root@invalid.org', password => '!' });
$user->setPassword('foobar');
$user->userroles->update_or_create({ role => 'admin' });
my $project = $db->resultset('Projects')->create({name => "tests", displayname => "Tests", owner => "root"});
# Login and save cookie for future requests
my $req = request(POST '/login',
Referer => 'http://localhost/',
Content => {
username => 'alice',
password => 'foobar'
}
);
is($req->code, 302);
my $cookie = $req->header("set-cookie");
subtest "Read project 'tests'" => sub {
my $projectinfo = request(GET '/project/tests', my $projectinfo = request(GET '/project/tests',
Accept => 'application/json', Accept => 'application/json',
); );
@ -26,7 +43,7 @@ my $projectinfo = request(GET '/project/tests',
ok($projectinfo->is_success); ok($projectinfo->is_success);
is(decode_json($projectinfo->content), { is(decode_json($projectinfo->content), {
description => "", description => "",
displayname => "", displayname => "Tests",
enabled => JSON::true, enabled => JSON::true,
hidden => JSON::false, hidden => JSON::false,
homepage => "", homepage => "",
@ -39,5 +56,94 @@ is(decode_json($projectinfo->content), {
value => "" value => ""
} }
}); });
};
subtest "Transitioning from declarative project to normal" => sub {
subtest "Make project declarative" => sub {
my $projectupdate = request(PUT '/project/tests',
Accept => 'application/json',
Content_Type => 'application/json',
Cookie => $cookie,
Content => encode_json({
enabled => JSON::true,
visible => JSON::true,
name => "tests",
displayname => "Tests",
declarative => {
file => "bogus",
type => "boolean",
value => "false"
}
})
);
ok($projectupdate->is_success);
};
subtest "Project has '.jobsets' jobset" => sub {
my $projectinfo = request(GET '/project/tests',
Accept => 'application/json',
);
ok($projectinfo->is_success);
is(decode_json($projectinfo->content), {
description => "",
displayname => "Tests",
enabled => JSON::true,
hidden => JSON::false,
homepage => "",
jobsets => [".jobsets"],
name => "tests",
owner => "root",
declarative => {
file => "bogus",
type => "boolean",
value => "false"
}
});
};
subtest "Make project normal" => sub {
my $projectupdate = request(PUT '/project/tests',
Accept => 'application/json',
Content_Type => 'application/json',
Cookie => $cookie,
Content => encode_json({
enabled => JSON::true,
visible => JSON::true,
name => "tests",
displayname => "Tests",
declarative => {
file => "",
type => "boolean",
value => "false"
}
})
);
ok($projectupdate->is_success);
};
subtest "Project doesn't have '.jobsets' jobset" => sub {
my $projectinfo = request(GET '/project/tests',
Accept => 'application/json',
);
ok($projectinfo->is_success);
is(decode_json($projectinfo->content), {
description => "",
displayname => "Tests",
enabled => JSON::true,
hidden => JSON::false,
homepage => "",
jobsets => [],
name => "tests",
owner => "root",
declarative => {
file => "",
type => "",
value => ""
}
});
};
};
done_testing; done_testing;