use strict;
use warnings;
use Setup;
use Test2::V0;

my $ctx = test_context();

my $builds = $ctx->makeAndEvaluateJobset(
    expression => 'constituents.nix',
);

my $constituentBuildA = $builds->{"constituentA"};
my $constituentBuildB = $builds->{"constituentB"};

my $eval = $constituentBuildA->jobsetevals->first();
is($eval->evaluationerror->has_error, 0);

subtest "Verifying the direct aggregate" => sub {
    my $aggBuild = $builds->{"direct_aggregate"};
    is($aggBuild->constituents->first()->id, $constituentBuildA->id, "The ID of the constituent is correct");
};

subtest "Verifying the indirect aggregate" => sub {
    my $indirectBuild = $builds->{"indirect_aggregate"};
    is($indirectBuild->constituents->first()->id, $constituentBuildA->id, "The ID of the constituent is correct");
};

subtest "Verifying a mix of direct and indirect aggregate references" => sub {
    my $mixedBuild = $builds->{"mixed_aggregate"};
    my ($constituentA, $constituentB) = $mixedBuild->constituents()->search({}, {order_by => { -asc => "job"} });
    is($constituentA->id, $constituentBuildA->id, "The ID of the constituent is correct");
    is($constituentB->id, $constituentBuildB->id, "The ID of the constituent is correct");
};

done_testing;
