use feature 'unicode_strings'; use strict; use warnings; use JSON; use Setup; use Test::HTTP::MockServer; my $server = Test::HTTP::MockServer->new(); my $url = $server->url_base(); my %ctx = test_init( hydra_config => q| root=d7f16a3412e01a43a414535b16007c6931d3a9c7 |); require Hydra::Schema; require Hydra::Model::DB; use Test2::V0; my $db = Hydra::Model::DB->new; hydra_setup($db); my $scratch = "$ctx{tmpdir}/scratch"; mkdir $scratch; my $uri = "file://$scratch/git-repo"; my $jobset = createJobsetWithOneInput('gitea', 'git-input.nix', 'src', 'git', $uri, $ctx{jobsdir}); sub addStringInput { my ($jobset, $name, $value) = @_; my $input = $jobset->jobsetinputs->create({name => $name, type => "string"}); $input->jobsetinputalts->create({value => $value, altnr => 0}); } addStringInput($jobset, "gitea_repo_owner", "root"); addStringInput($jobset, "gitea_repo_name", "foo"); addStringInput($jobset, "gitea_status_repo", "src"); addStringInput($jobset, "gitea_http_url", "$url/gitea"); updateRepository('gitea', "$ctx{testdir}/jobs/git-update.sh", $scratch); ok(evalSucceeds($jobset), "Evaluating nix expression"); is(nrQueuedBuildsForJobset($jobset), 1, "Evaluating jobs/runcommand.nix should result in 1 build1"); (my $build) = queuedBuildsForJobset($jobset); ok(runBuild($build), "Build should succeed with exit code 0"); my $filename = $ENV{'HYDRA_DATA'} . "/giteaout.json"; my $handle = sub { my ($request, $response) = @_; open(FH, ">", $filename) or die("Can't open(): $!\n"); print FH $request->uri . "\n"; print FH $request->content . "\n"; close(FH); return $response; }; $server->start_mock_server($handle); 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(), "Sent notifications"); $server->stop_mock_server(); open my $fh, $filename or die ("Can't open(): $!\n"); my $i = 0; my $uri = <$fh>; my $data = <$fh>; ok(index($uri, "gitea/api/v1/repos/root/foo/statuses") != -1, "Correct URL"); my $json = JSON->new; my $content; $content = $json->decode($data); is($content->{state}, "success", "Success notification"); done_testing;