Files
Gardomatic/internal/api/species_task_templates_test.go
kleiax 904d14b64c
CI / test (push) Canceled after 0s
Initial commit
2026-09-12 22:22:17 +02:00

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