@@ -0,0 +1,36 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"gardomatic.kleiax.de/internal/storage"
|
||||
)
|
||||
|
||||
func TestSpeciesTaskTemplatesRequireWritePermission(t *testing.T) {
|
||||
app, _, members := newGardenTestApplication()
|
||||
user := storage.User{ID: 14, Activated: true}
|
||||
members.members[[2]int{3, user.ID}] = storage.GardenMember{GardenID: 3, UserID: user.ID, Role: storage.GardenRoleAdmin}
|
||||
gardenID := 3
|
||||
app.models.Species = &speciesTestModel{items: map[int]storage.Species{1: {ID: 1, CommonName: "Global"}, 2: {ID: 2, GardenID: &gardenID, CommonName: "Rose"}}}
|
||||
templates := &templateTestModel{items: map[int]storage.SpeciesTaskTemplate{}, nextID: 10}
|
||||
app.models.SpeciesTaskTemplates = templates
|
||||
body := []byte(`{"title":"Schneiden","trigger_type":"month_of_year","month_from":2,"day_from":15,"duration":2,"duration_unit":"week","active":true}`)
|
||||
global := serveResourceRequest(app, user, http.MethodPost, "/v1/gardens/3/species/1/task-templates", body)
|
||||
if global.Code != http.StatusForbidden {
|
||||
t.Fatalf("global write status=%d", global.Code)
|
||||
}
|
||||
created := serveResourceRequest(app, user, http.MethodPost, "/v1/gardens/3/species/2/task-templates", body)
|
||||
if created.Code != http.StatusCreated {
|
||||
t.Fatalf("create status=%d body=%s", created.Code, created.Body.String())
|
||||
}
|
||||
listed := serveResourceRequest(app, user, http.MethodGet, "/v1/gardens/3/species/2/task-templates", nil)
|
||||
if listed.Code != http.StatusOK {
|
||||
t.Fatalf("list status=%d body=%s", listed.Code, listed.Body.String())
|
||||
}
|
||||
user.Role = storage.ApplicationRoleAdmin
|
||||
global = serveResourceRequest(app, user, http.MethodPost, "/v1/gardens/3/species/1/task-templates", body)
|
||||
if global.Code != http.StatusCreated {
|
||||
t.Fatalf("global admin write status=%d body=%s", global.Code, global.Body.String())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user