Implement `yath`-test for the new Gitea plugin

[?]
Apr 2, 2021, 5:11 PM
T3HCJYPLFFHHCBYWWIMKRF5HHDTVVPCQ24XINGILY3HVDYCVDV5AC

Dependencies

  • [2] 2G37UFZF flake: add TestPostgreSQL for per-test DBs
  • [3] 2JJP7673 tests: move to t, allow `yath test` from root
  • [*] RWNXH3H2 lastModified -> lastModifiedDate
  • [*] IH26BRUJ Run tests with yath

Change contents

  • edit in flake.nix at line 58
    [2.907]
    [2.907]
    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
    [2.908]
    [2.908]
    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
    [5.2683]
    [5.2683]
    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;