From 5ad47d1cda231d172d7b56eaae2e013bbb22c3cb Mon Sep 17 00:00:00 2001 From: Alexis Poyen <apoyen@mail.apoyen.fr> Date: Fri, 29 May 2020 15:37:40 +0200 Subject: [PATCH] Feat : delete deskRounds linked to a Desk on deletion --- internal/models/desk.go | 7 ++++++- internal/models/deskRound.go | 1 - internal/rootmux/rootmux_test.go | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/models/desk.go b/internal/models/desk.go index 45bdfa2..301f416 100644 --- a/internal/models/desk.go +++ b/internal/models/desk.go @@ -110,10 +110,15 @@ func (d *DataHandler) putDesk(w http.ResponseWriter, r *http.Request, id int) { func (d *DataHandler) deleteDesk(w http.ResponseWriter, r *http.Request, id int) { if id != 0 { var o Desk - if err := d.db.First(&o, id).Error; err != nil { + if err := d.db.Preload("DeskRounds").First(&o, id).Error; err != nil { http.Error(w, ErrorIDIsMissing, http.StatusNotFound) return } + + for _, deskRound := range o.DeskRounds { + d.deleteDeskRound(deskRound) + } + d.db.Delete(&o) } else { http.Error(w, ErrorIDIsMissing, http.StatusNotFound) diff --git a/internal/models/deskRound.go b/internal/models/deskRound.go index 73a4542..231b3b0 100644 --- a/internal/models/deskRound.go +++ b/internal/models/deskRound.go @@ -79,6 +79,5 @@ func (d *DataHandler) createDeskRound(roundID uint, deskID uint) { } func (d *DataHandler) deleteDeskRound(deskRound DeskRound) { - d.db.Delete(&deskRound) } diff --git a/internal/rootmux/rootmux_test.go b/internal/rootmux/rootmux_test.go index 88cba30..1a5d922 100644 --- a/internal/rootmux/rootmux_test.go +++ b/internal/rootmux/rootmux_test.go @@ -98,6 +98,11 @@ func appTests(t *testing.T) { do("GET", "/api/Round/1", xsrfHeader, ``, 200, `{"ID":1,"ElectionID":1,"Parameter":{"ID":0,"CountBlankAndNull":false,"ShowOnlyCompleted":false,"ShowMap":false},"Date":"2020-06-28","Round":1,"DeskRounds":[{"ID":1,"RoundID":1,"DeskID":1,"Capturers":null,"Completed":false,"DateCompletion":"0001-01-01T00:00:00Z","Validated":false,"Votes":null}],"CandidateLists":[]}`) do("GET", "/api/Desk/1", xsrfHeader, ``, 200, `{"ID":1,"SectionID":1,"Name":"Desk 1","WitnessDesk":true,"Subscribed":9587,"DeskRounds":[{"ID":1,"RoundID":1,"DeskID":1,"Capturers":null,"Completed":false,"DateCompletion":"0001-01-01T00:00:00Z","Validated":false,"Votes":null}]}`) + // Verify that on Desk deletion deskRounds are deleted + do("GET", "/api/Desk/1", xsrfHeader, ``, 200, `{"ID":1,"SectionID":1,"Name":"Desk 1","WitnessDesk":true,"Subscribed":9587,"DeskRounds":[{"ID":1,"RoundID":1,"DeskID":1,"Capturers":null,"Completed":false,"DateCompletion":"0001-01-01T00:00:00Z","Validated":false,"Votes":null}]}`) + do("DELETE", "/api/Desk/1", xsrfHeader, ``, 200, ``) + do("GET", "/api/DeskRound/1", xsrfHeader, ``, 404, `id is missing`) + } // Do an OAuth2 login with an known admin do("GET", "/OAuth2Login", noH, "", 200, "<!DOCTYPE html>") -- GitLab