From f4c4b496d8c4887e7c81164b88f99bf2bd2ae278 Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Sun, 9 Jan 2022 10:14:03 -0500 Subject: [PATCH] Projects: delete: delete all builds first Deleting jobsets first would fail because buildmetrics has an FK to the jobset. However, the jobset / project relationship is not marked as CASCADE. Deleting all the builds automatically cascades to delete buildmetrics, so deleting the relevant builds first, then deleting the jobset solves it. --- src/lib/Hydra/Controller/Project.pm | 2 +- t/Hydra/Controller/Project/delete.t | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/lib/Hydra/Controller/Project.pm b/src/lib/Hydra/Controller/Project.pm index c38ff6ad..c7e64544 100644 --- a/src/lib/Hydra/Controller/Project.pm +++ b/src/lib/Hydra/Controller/Project.pm @@ -78,8 +78,8 @@ sub project_DELETE { requireProjectOwner($c, $c->stash->{project}); $c->model('DB')->schema->txn_do(sub { - $c->stash->{project}->jobsets->delete; $c->stash->{project}->builds->delete; + $c->stash->{project}->jobsets->delete; $c->stash->{project}->delete; }); diff --git a/t/Hydra/Controller/Project/delete.t b/t/Hydra/Controller/Project/delete.t index 203fe106..f162a0f6 100644 --- a/t/Hydra/Controller/Project/delete.t +++ b/t/Hydra/Controller/Project/delete.t @@ -55,4 +55,21 @@ subtest "Deleting a simple project" => sub { ); }; -done_testing; \ No newline at end of file +subtest "Deleting a project with metrics" => sub { + my $builds = $ctx->makeAndEvaluateJobset( + expression => "runcommand.nix", + build => 1 + ); + my $project = $builds->{"metrics"}->project; + + my $responseAuthed = request(DELETE "/project/${\$project->name}", + Cookie => $cookie, + Accept => "application/json" + ); + is($responseAuthed->code, 200, "Deleting a project with auth returns a 200"); + + my $response = request(GET "/project/${\$project->name}"); + is($response->code, 404, "Then getting the project returns a 404"); +}; + +done_testing;