package storage import ( "testing" "gardomatic.kleiax.de/internal/platform/validate" ) func TestValidateSpeciesDimensions(t *testing.T) { tests := []struct { name string species Species wantField string }{ {name: "valid ranges", species: Species{CommonName: "Rose", HeightCMFrom: intPointer(40), HeightCMTo: intPointer(80), WidthCMFrom: intPointer(30), WidthCMTo: intPointer(60)}}, {name: "height starts above end", species: Species{CommonName: "Rose", HeightCMFrom: intPointer(81), HeightCMTo: intPointer(80)}, wantField: "height_cm_from"}, {name: "width starts above end", species: Species{CommonName: "Rose", WidthCMFrom: intPointer(61), WidthCMTo: intPointer(60)}, wantField: "width_cm_from"}, {name: "non-positive height", species: Species{CommonName: "Rose", HeightCMTo: intPointer(0)}, wantField: "height_cm_to"}, {name: "deprecated height alias", species: Species{CommonName: "Rose", HeightCM: intPointer(80)}}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { v := validate.New() ValidateSpecies(v, tt.species) _, hasError := v.Errors[tt.wantField] if tt.wantField == "" && !v.Valid() { t.Fatalf("unexpected validation errors: %v", v.Errors) } if tt.wantField != "" && !hasError { t.Fatalf("expected validation error for %s, got %v", tt.wantField, v.Errors) } }) } } func intPointer(value int) *int { return &value }