use feature 'unicode_strings'; use strict; use warnings; use Setup; use JSON::MaybeXS qw(decode_json encode_json); my %ctx = test_init(); require Hydra::Schema; require Hydra::Model::DB; require Hydra::Helper::Nix; use HTTP::Request::Common; use Test2::V0; require Catalyst::Test; Catalyst::Test->import('Hydra'); my $db = Hydra::Model::DB->new; hydra_setup($db); # 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', Accept => 'application/json', ); ok($projectinfo->is_success); is(decode_json($projectinfo->content), { description => "", displayname => "Tests", enabled => JSON::MaybeXS::true, enable_dynamic_run_command => JSON::MaybeXS::false, hidden => JSON::MaybeXS::false, homepage => "", jobsets => [], name => "tests", owner => "root" }); }; 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::MaybeXS::true, visible => JSON::MaybeXS::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::MaybeXS::true, enable_dynamic_run_command => JSON::MaybeXS::false, hidden => JSON::MaybeXS::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::MaybeXS::true, visible => JSON::MaybeXS::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::MaybeXS::true, enable_dynamic_run_command => JSON::MaybeXS::false, hidden => JSON::MaybeXS::false, homepage => "", jobsets => [], name => "tests", owner => "root" }); }; }; done_testing;