Fix test, improve error handling

This commit is contained in:
Andrea Fazzi 2020-01-27 13:15:51 +01:00
parent f35410e0ae
commit f9164034dd
8 changed files with 40 additions and 20 deletions

View file

@ -24,6 +24,11 @@ var (
TemplateName: "error_school_exists", TemplateName: "error_school_exists",
Err: errors.New(i18n.Errors["schoolExists"]["it"]), Err: errors.New(i18n.Errors["schoolExists"]["it"]),
} }
ParticipantExists = &Error{
TemplateName: "error_participant_exists",
Err: errors.New(i18n.Errors["participantExists"]["it"]),
}
CategoryExists = &Error{ CategoryExists = &Error{
TemplateName: "error_category_exists", TemplateName: "error_category_exists",

View file

@ -376,16 +376,23 @@ func respondWithError(h *Handlers, w http.ResponseWriter, r *http.Request, err e
} }
func (h *Handlers) Create(model interface{}) http.Handler { func (h *Handlers) Create(model interface{}) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) { fn := func(w http.ResponseWriter, r *http.Request) error {
switch r.Method { switch r.Method {
case "GET": case "GET":
h.get(w, r, reflect.ModelNameLowerPlural(model), h.Config.CreatePattern()) err := h.get(w, r, reflect.ModelNameLowerPlural(model), h.Config.CreatePattern())
if err != nil {
return err
}
case "POST": case "POST":
h.post(w, r, reflect.ModelNameLowerPlural(model), h.Config.CreatePattern()) err := h.post(w, r, reflect.ModelNameLowerPlural(model), h.Config.CreatePattern())
if err != nil {
return err
}
} }
return nil
} }
return http.HandlerFunc(fn) return newRootMiddleware(h, fn)
} }
func (h *Handlers) ReadAll(model interface{}) http.Handler { func (h *Handlers) ReadAll(model interface{}) http.Handler {
@ -493,7 +500,9 @@ func (m *rootMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return return
} }
// This is where our error handling logic starts. // This is where our error handling logic starts.
log.Printf("An error accured: %v", err) // Log the error. if m.h.Config.LogLevel > config.LOG_LEVEL_OFF {
log.Printf("An error accured: %v", err) // Log the error.
}
respondWithError(m.h, w, r, err) respondWithError(m.h, w, r, err)
} }

View file

@ -175,7 +175,8 @@ func (t *testSuite) BeforeAll() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
// conf.LogLevel = config.LOG_LEVEL_OFF
conf.LogLevel = config.LOG_LEVEL_OFF
// Initialize the ORM // Initialize the ORM
@ -371,8 +372,10 @@ func (t *testSuite) TestSchoolSubscription() {
t.Equal(http.StatusSeeOther, rr.Code) t.Equal(http.StatusSeeOther, rr.Code)
log.Println(rr.Header())
schoolId, err := getIdFromPath(rr.Header()["Location"][0]) schoolId, err := getIdFromPath(rr.Header()["Location"][0])
if err != nil {
panic(err)
}
if !t.Failed() { if !t.Failed() {
doc, err := goquery.NewDocumentFromReader(rr.Body) doc, err := goquery.NewDocumentFromReader(rr.Body)
if err != nil { if err != nil {
@ -425,8 +428,13 @@ func (t *testSuite) TestSchoolSubscription() {
router.ServeHTTP(rr, req) router.ServeHTTP(rr, req)
t.Equal(http.StatusSeeOther, rr.Code) t.Equal(http.StatusSeeOther, rr.Code)
if !t.Failed() {
t.Equal(http.StatusOK, deleteParticipant(1001)) participantId, err := getIdFromPath(rr.Header()["Location"][0])
if err != nil {
panic(err)
}
t.Equal(http.StatusOK, deleteParticipant(participantId))
}
} }
@ -455,12 +463,11 @@ func (t *testSuite) TestUserModifier() {
t.Equal(http.StatusOK, rr.Code) t.Equal(http.StatusOK, rr.Code)
if !t.Failed() { if !t.Failed() {
fmt.Println(rr.Body)
doc, err := goquery.NewDocumentFromReader(rr.Body) doc, err := goquery.NewDocumentFromReader(rr.Body)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
expected := "admin[administrator]" expected := "subscriber[subscriber]"
ok := false ok := false
doc.Find("dd").Each(func(i int, s *goquery.Selection) { doc.Find("dd").Each(func(i int, s *goquery.Selection) {
if strings.Contains(s.Text(), expected) { if strings.Contains(s.Text(), expected) {

View file

@ -47,6 +47,9 @@ var (
"schoolExists": map[string]string{ "schoolExists": map[string]string{
"it": "Una scuola con questo codice meccanografico è già presente nella base dati!", "it": "Una scuola con questo codice meccanografico è già presente nella base dati!",
}, },
"participantExists": map[string]string{
"it": "Un partecipante con questo codice fiscale è già presente nella base dati!",
},
"contestHasZeroQuestions": map[string]string{ "contestHasZeroQuestions": map[string]string{
"it": "La gara a cui il partecipante è iscritto non contiene alcuna domanda.", "it": "La gara a cui il partecipante è iscritto non contiene alcuna domanda.",
}, },

View file

@ -203,11 +203,7 @@ func (model *Participant) Create(db *Database, args map[string]string, w http.Re
if err := db._db.Where("user_id = ?", user.ID).Find(&participant).Error; err != nil { if err := db._db.Where("user_id = ?", user.ID).Find(&participant).Error; err != nil {
return nil, err return nil, err
} }
// err := setFlashMessage(w, r, "participantExists") return nil, errors.ParticipantExists
// if err != nil {
// return nil, err
// }
return participant, nil
} else if err != nil { } else if err != nil {
return nil, err return nil, err
} }

View file

@ -58,7 +58,7 @@ type School struct {
Region *Region Region *Region
User *User User *User
Participants []*Participant Participants []*Participant `gorm:"PRELOAD:false"`
SelectedRegion map[uint]string `gorm:"-"` SelectedRegion map[uint]string `gorm:"-"`
AllRegions []*Region `gorm:"-"` AllRegions []*Region `gorm:"-"`
@ -211,7 +211,7 @@ func (model *School) Read(db *Database, args map[string]string, w http.ResponseW
return nil, errors.NotAuthorized return nil, errors.NotAuthorized
} }
if err := db._db.Set("gorm:auto_preload", true).First(&school, id).Error; err != nil { if err := db._db.Set("gorm:auto_preload", true).Preload("Participants").First(&school, id).Error; err != nil {
return nil, err return nil, err
} }

View file

@ -5,7 +5,7 @@
Si è verificato un errore durante la creazione o l'aggiornamento di un partecipante: <strong>{{.Data}}</strong> Si è verificato un errore durante la creazione o l'aggiornamento di un partecipante: <strong>{{.Data}}</strong>
</p> </p>
<p> <p>
Clicca {{all "Participant"|anchor "qui"}} per tornare all'elenco dei partecipanti. Clicca {{create "Participant"|anchor "qui"}} per tornare al modulo di creazione del partecipante.
</p> </p>
</div> </div>
{{ end }} {{ end }}

View file

@ -2,7 +2,7 @@
<div class="container"> <div class="container">
<h1 class="border-bottom">Errore</h1> <h1 class="border-bottom">Errore</h1>
<p> <p>
Si è verificato un errore durante la creazione o l'aggiornamento di un partecipante: <strong>{{.Data}}</strong> Si è verificato un errore durante la creazione o l'aggiornamento di una scuola: <strong>{{.Data}}</strong>
</p> </p>
<p> <p>
Clicca {{create "School"|anchor "qui"}} per tornare al modulo di iscrizione. Clicca {{create "School"|anchor "qui"}} per tornare al modulo di iscrizione.