37 lines
1.7 KiB
Go
37 lines
1.7 KiB
Go
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())
|
|
}
|
|
}
|