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