107 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
use strict;
 | 
						|
use warnings;
 | 
						|
use Setup;
 | 
						|
use Test2::V0;
 | 
						|
 | 
						|
require Catalyst::Test;
 | 
						|
use HTTP::Request::Common qw(POST PUT GET DELETE);
 | 
						|
use JSON::MaybeXS qw(decode_json encode_json);
 | 
						|
 | 
						|
my $ctx = test_context(
 | 
						|
    hydra_config => q|
 | 
						|
    <dynamicruncommand>
 | 
						|
    enable = 1
 | 
						|
    </dynamicruncommand>
 | 
						|
    |
 | 
						|
);
 | 
						|
Catalyst::Test->import('Hydra');
 | 
						|
 | 
						|
# Create a user to log in to
 | 
						|
my $user = $ctx->db->resultset('Users')->create({ username => 'alice', emailaddress => 'root@invalid.org', password => '!' });
 | 
						|
$user->setPassword('foobar');
 | 
						|
$user->userroles->update_or_create({ role => 'admin' });
 | 
						|
 | 
						|
subtest "can enable dynamic RunCommand when enabled by server" => sub {
 | 
						|
    my $builds = $ctx->makeAndEvaluateJobset(
 | 
						|
        expression => "runcommand-dynamic.nix",
 | 
						|
        build => 1
 | 
						|
    );
 | 
						|
 | 
						|
    my $build = $builds->{"runCommandHook.example"};
 | 
						|
    my $project = $build->project;
 | 
						|
    my $project_name = $project->name;
 | 
						|
    my $jobset = $build->jobset;
 | 
						|
    my $jobset_name = $jobset->name;
 | 
						|
 | 
						|
    is($project->enable_dynamic_run_command, 0, "dynamic RunCommand is disabled on projects by default");
 | 
						|
    is($jobset->enable_dynamic_run_command, 0, "dynamic RunCommand is disabled on jobsets by default");
 | 
						|
 | 
						|
    my $req = request(POST '/login',
 | 
						|
        Referer => 'http://localhost/',
 | 
						|
        Content => {
 | 
						|
            username => 'alice',
 | 
						|
            password => 'foobar'
 | 
						|
        }
 | 
						|
    );
 | 
						|
    is($req->code, 302, "logged in successfully");
 | 
						|
    my $cookie = $req->header("set-cookie");
 | 
						|
 | 
						|
    subtest "can enable dynamic RunCommand on project" => sub {
 | 
						|
        my $projectresponse = request(GET "/project/$project_name",
 | 
						|
            Accept => 'application/json',
 | 
						|
            Content_Type => 'application/json',
 | 
						|
            Cookie => $cookie,
 | 
						|
        );
 | 
						|
 | 
						|
        my $projectjson = decode_json($projectresponse->content);
 | 
						|
        $projectjson->{enable_dynamic_run_command} = 1;
 | 
						|
 | 
						|
        my $projectupdate = request(PUT "/project/$project_name",
 | 
						|
            Accept => 'application/json',
 | 
						|
            Content_Type => 'application/json',
 | 
						|
            Cookie => $cookie,
 | 
						|
            Content => encode_json($projectjson)
 | 
						|
        );
 | 
						|
 | 
						|
        $projectresponse = request(GET "/project/$project_name",
 | 
						|
            Accept => 'application/json',
 | 
						|
            Content_Type => 'application/json',
 | 
						|
            Cookie => $cookie,
 | 
						|
        );
 | 
						|
        $projectjson = decode_json($projectresponse->content);
 | 
						|
 | 
						|
        is($projectupdate->code, 200);
 | 
						|
        is($projectjson->{enable_dynamic_run_command}, JSON::MaybeXS::true);
 | 
						|
    };
 | 
						|
 | 
						|
    subtest "can enable dynamic RunCommand on jobset" => sub {
 | 
						|
        my $jobsetresponse = request(GET "/jobset/$project_name/$jobset_name",
 | 
						|
            Accept => 'application/json',
 | 
						|
            Content_Type => 'application/json',
 | 
						|
            Cookie => $cookie,
 | 
						|
        );
 | 
						|
 | 
						|
        my $jobsetjson = decode_json($jobsetresponse->content);
 | 
						|
        $jobsetjson->{enable_dynamic_run_command} = 1;
 | 
						|
 | 
						|
        my $jobsetupdate = request(PUT "/jobset/$project_name/$jobset_name",
 | 
						|
            Accept => 'application/json',
 | 
						|
            Content_Type => 'application/json',
 | 
						|
            Cookie => $cookie,
 | 
						|
            Content => encode_json($jobsetjson)
 | 
						|
        );
 | 
						|
 | 
						|
        $jobsetresponse = request(GET "/jobset/$project_name/$jobset_name",
 | 
						|
            Accept => 'application/json',
 | 
						|
            Content_Type => 'application/json',
 | 
						|
            Cookie => $cookie,
 | 
						|
        );
 | 
						|
        $jobsetjson = decode_json($jobsetresponse->content);
 | 
						|
 | 
						|
        is($jobsetupdate->code, 200);
 | 
						|
        is($jobsetjson->{enable_dynamic_run_command}, JSON::MaybeXS::true);
 | 
						|
    };
 | 
						|
};
 | 
						|
 | 
						|
done_testing;
 |