Also split into subtests.
K4B5ECOH33HAFDGRBRHK2KV7254HZUI3WA3VYWMMXTXLJIWTYESAC my $project = $db->resultset('Projects')->create({name => "tests", displayname => "", owner => "root"});
# Create a user to log in tomy $user = $db->resultset('Users')->create({ username => 'alice', emailaddress => 'root@invalid.org', password => '!' });$user->setPassword('foobar');$user->userroles->update_or_create({ role => 'admin' });
my $projectinfo = request(GET '/project/tests',Accept => 'application/json',
my $project = $db->resultset('Projects')->create({name => "tests", displayname => "Tests", owner => "root"});# Login and save cookie for future requestsmy $req = request(POST '/login',Referer => 'http://localhost/',Content => {username => 'alice',password => 'foobar'}
ok($projectinfo->is_success);is(decode_json($projectinfo->content), {description => "",displayname => "",enabled => JSON::true,hidden => JSON::false,homepage => "",jobsets => [],name => "tests",owner => "root",declarative => {file => "",type => "",value => ""}});
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::true,hidden => JSON::false,homepage => "",jobsets => [],name => "tests",owner => "root",declarative => {file => "",type => "",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 => ""}});};};