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;
							 |