64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
use feature 'unicode_strings';
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
use Test2::V0;
 | 
						|
use Setup;
 | 
						|
 | 
						|
my $ctx = test_context();
 | 
						|
my $db = $ctx->db;
 | 
						|
 | 
						|
my $project = $db->resultset('Projects')->create({
 | 
						|
    name => "tests",
 | 
						|
    displayname => "",
 | 
						|
    owner => "root",
 | 
						|
    declfile => "declarative/project.json",
 | 
						|
    decltype => "path",
 | 
						|
    declvalue => $ctx->jobsdir,
 | 
						|
});
 | 
						|
 | 
						|
subtest "Evaluating and building the top .jobsets jobset" => sub {
 | 
						|
    # This logic lives in the Project controller.
 | 
						|
    # Not great to duplicate it here.
 | 
						|
    # TODO: refactor and deduplicate.
 | 
						|
    my $jobset = $project->jobsets->create({
 | 
						|
        name=> ".jobsets",
 | 
						|
        nixexprinput => "",
 | 
						|
        nixexprpath => "",
 | 
						|
        emailoverride => "",
 | 
						|
        triggertime => time,
 | 
						|
    });
 | 
						|
 | 
						|
    ok(evalSucceeds($jobset), "Evaluating the declarative jobsets with return code 0");
 | 
						|
    is(nrQueuedBuildsForJobset($jobset), 1, "We should have exactly 1 build queued, to build the jobsets data");
 | 
						|
 | 
						|
    (my $build) = queuedBuildsForJobset($jobset);
 | 
						|
 | 
						|
    is($build->job, "jobsets", "The only job should be jobsets");
 | 
						|
    ok(runBuild($build), "Build should exit with return code 0");
 | 
						|
    my $newbuild = $db->resultset('Builds')->find($build->id);
 | 
						|
    is($newbuild->finished, 1, "Build should be finished.");
 | 
						|
    is($newbuild->buildstatus, 0, "Build should have buildstatus 0.");
 | 
						|
 | 
						|
    ok(sendNotifications(), "Notifications execute successfully.");
 | 
						|
};
 | 
						|
 | 
						|
subtest "Validating a new jobset appears" => sub {
 | 
						|
    my $jobset = $project->jobsets->find({ name => "my-jobset" });
 | 
						|
    ok($jobset, "We have a jobset");
 | 
						|
    is($jobset->description, "my-declarative-jobset", "The jobset's description matches");
 | 
						|
 | 
						|
    subtest "Evaluating and building that jobset works" => sub {
 | 
						|
        ok(evalSucceeds($jobset), "Evaluating the new jobset with return code 0");
 | 
						|
        is(nrQueuedBuildsForJobset($jobset), 1, "We should have exactly 1 build queued");
 | 
						|
 | 
						|
        (my $build) = queuedBuildsForJobset($jobset);
 | 
						|
 | 
						|
        is($build->job, "one_job", "The only job should be jobsets");
 | 
						|
        ok(runBuild($build), "Build should exit with return code 0");
 | 
						|
        my $newbuild = $db->resultset('Builds')->find($build->id);
 | 
						|
        is($newbuild->finished, 1, "Build should be finished.");
 | 
						|
        is($newbuild->buildstatus, 0, "Build should have buildstatus 0.");
 | 
						|
    };
 | 
						|
};
 | 
						|
done_testing;
 |