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()) } }