Implement `yath`-test for the new Gitea plugin
[?]
Apr 2, 2021, 5:11 PM
T3HCJYPLFFHHCBYWWIMKRF5HHDTVVPCQ24XINGILY3HVDYCVDV5ACDependencies
- [2]
2G37UFZFflake: add TestPostgreSQL for per-test DBs - [3]
2JJP7673tests: move to t, allow `yath test` from root - [*]
RWNXH3H2lastModified -> lastModifiedDate - [*]
IH26BRUJRun tests with yath
Change contents
- edit in flake.nix at line 58
HTTPParser = final.perlPackages.buildPerlPackage {pname = "HTTP-Parser";version = "0.06";src = final.fetchurl {url = "mirror://cpan/authors/id/E/ED/EDECA/HTTP-Parser-0.06.tar.gz";sha256 = "sha256-+MWh4cvY8ndb09HOX6zIQx8FkQi/V1oMjb2kMuXAvEU=";}; - edit in flake.nix at line 67
buildInputs = with final.perlPackages; [ TestMore URI HTTPMessage ];meta = {homepage = https://metacpan.org/pod/HTTP::Parser;description = "HTTP::Parser - parse HTTP/1.1 request into HTTP::Request/Response object";license = final.lib.licenses.artistic1;};};TestHTTPMockServer = final.perlPackages.buildPerlModule {pname = "Test-HTTP-MockServer";version = "0.0.1";src = final.fetchurl {url = "mirror://cpan/authors/id/D/DR/DRUOSO/Test-HTTP-MockServer-v0.0.1.tar.gz";sha256 = "sha256-cnVjaKGgOxA0IcJiuzk/a2nxQGbhKD3vpaLFWIqINDg=";};buildInputs = with final.perlPackages; [ JSONXS LWP HTTPMessage HTTPParser ];doCheck = false;meta = {homepage = https://metacpan.org/pod/Test::HTTP::MockServer;description = "Implement a mock HTTP server for use in tests";license = final.lib.licenses.asl20;};}; - edit in flake.nix at line 302[6.26][5.2233]
HTTPParser - edit in flake.nix at line 320
TestHTTPMockServer - file addition: gitea.t[3.2547]
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|<gitea_authorization>root=d7f16a3412e01a43a414535b16007c6931d3a9c7</gitea_authorization>|);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;