feat(api): lowercase project identifier before by-index lookup
Normalises the input side so GitHub-style references like "TEST1-42" and "test1-42" resolve to the same project. The SQL comparison itself remains case-sensitive for now; case-insensitive matching on the column will be addressed separately.
This commit is contained in:
parent
466d39e6de
commit
04148e14db
|
|
@ -19,6 +19,7 @@ package routes
|
|||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"code.vikunja.io/api/pkg/db"
|
||||
"code.vikunja.io/api/pkg/models"
|
||||
|
|
@ -44,7 +45,7 @@ func ResolveProjectIdentifier() echo.MiddlewareFunc {
|
|||
|
||||
s := db.NewSession()
|
||||
project := &models.Project{}
|
||||
has, err := s.Where("identifier = ?", raw).Get(project)
|
||||
has, err := s.Where("identifier = ?", strings.ToLower(raw)).Get(project)
|
||||
_ = s.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -57,6 +57,12 @@ func TestTaskByProjectIndex(t *testing.T) {
|
|||
assert.Contains(t, rec.Body.String(), `"id":1`)
|
||||
})
|
||||
|
||||
t.Run("identifier match is case-insensitive on the input", func(t *testing.T) {
|
||||
rec := do("/api/v1/projects/TEST1/tasks/by-index/1")
|
||||
assert.Equal(t, http.StatusOK, rec.Code)
|
||||
assert.Contains(t, rec.Body.String(), `"id":1`)
|
||||
})
|
||||
|
||||
t.Run("unknown project identifier returns 404", func(t *testing.T) {
|
||||
rec := do("/api/v1/projects/does-not-exist/tasks/by-index/1")
|
||||
assert.Equal(t, http.StatusNotFound, rec.Code)
|
||||
|
|
|
|||
Loading…
Reference in New Issue