diff --git a/internal/models/desk.go b/internal/models/desk.go index 45bdfa28baf403a57b73c29de114990da07ae6ad..301f4167ccca0e690b99aad1f21ce6f582701da1 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 73a45424f22093b66c171794318f364f5c7db04b..231b3b06adf0746f064c4154db4379af52c607a3 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 88cba30f5630f4bbb5262f4bef03b543b6abf349..1a5d922fe6f510bfb5b57e2c9612736f7b892c0f 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>")