mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: support 'me' as the username for template author (#19204)
`author:me` to find my templates. Much nicer than knowing my own username
This commit is contained in:
@@ -263,7 +263,7 @@ func Workspaces(ctx context.Context, db database.Store, query string, page coder
|
|||||||
return filter, parser.Errors
|
return filter, parser.Errors
|
||||||
}
|
}
|
||||||
|
|
||||||
func Templates(ctx context.Context, db database.Store, query string) (database.GetTemplatesWithFilterParams, []codersdk.ValidationError) {
|
func Templates(ctx context.Context, db database.Store, actorID uuid.UUID, query string) (database.GetTemplatesWithFilterParams, []codersdk.ValidationError) {
|
||||||
// Always lowercase for all searches.
|
// Always lowercase for all searches.
|
||||||
query = strings.ToLower(query)
|
query = strings.ToLower(query)
|
||||||
values, errors := searchTerms(query, func(term string, values url.Values) error {
|
values, errors := searchTerms(query, func(term string, values url.Values) error {
|
||||||
@@ -288,6 +288,11 @@ func Templates(ctx context.Context, db database.Store, query string) (database.G
|
|||||||
AuthorUsername: parser.String(values, "", "author"),
|
AuthorUsername: parser.String(values, "", "author"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if filter.AuthorUsername == codersdk.Me {
|
||||||
|
filter.AuthorID = actorID
|
||||||
|
filter.AuthorUsername = ""
|
||||||
|
}
|
||||||
|
|
||||||
parser.ErrorExcessParams(values)
|
parser.ErrorExcessParams(values)
|
||||||
return filter, parser.Errors
|
return filter, parser.Errors
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -640,6 +640,7 @@ func TestSearchUsers(t *testing.T) {
|
|||||||
|
|
||||||
func TestSearchTemplates(t *testing.T) {
|
func TestSearchTemplates(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
userID := uuid.New()
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
Name string
|
Name string
|
||||||
Query string
|
Query string
|
||||||
@@ -688,6 +689,14 @@ func TestSearchTemplates(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "MyTemplates",
|
||||||
|
Query: "author:me",
|
||||||
|
Expected: database.GetTemplatesWithFilterParams{
|
||||||
|
AuthorUsername: "",
|
||||||
|
AuthorID: userID,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range testCases {
|
for _, c := range testCases {
|
||||||
@@ -696,7 +705,7 @@ func TestSearchTemplates(t *testing.T) {
|
|||||||
// Do not use a real database, this is only used for an
|
// Do not use a real database, this is only used for an
|
||||||
// organization lookup.
|
// organization lookup.
|
||||||
db, _ := dbtestutil.NewDB(t)
|
db, _ := dbtestutil.NewDB(t)
|
||||||
values, errs := searchquery.Templates(context.Background(), db, c.Query)
|
values, errs := searchquery.Templates(context.Background(), db, userID, c.Query)
|
||||||
if c.ExpectedErrorContains != "" {
|
if c.ExpectedErrorContains != "" {
|
||||||
require.True(t, len(errs) > 0, "expect some errors")
|
require.True(t, len(errs) > 0, "expect some errors")
|
||||||
var s strings.Builder
|
var s strings.Builder
|
||||||
|
|||||||
+2
-1
@@ -544,9 +544,10 @@ func (api *API) templatesByOrganization() http.HandlerFunc {
|
|||||||
func (api *API) fetchTemplates(mutate func(r *http.Request, arg *database.GetTemplatesWithFilterParams)) http.HandlerFunc {
|
func (api *API) fetchTemplates(mutate func(r *http.Request, arg *database.GetTemplatesWithFilterParams)) http.HandlerFunc {
|
||||||
return func(rw http.ResponseWriter, r *http.Request) {
|
return func(rw http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
key := httpmw.APIKey(r)
|
||||||
|
|
||||||
queryStr := r.URL.Query().Get("q")
|
queryStr := r.URL.Query().Get("q")
|
||||||
filter, errs := searchquery.Templates(ctx, api.Database, queryStr)
|
filter, errs := searchquery.Templates(ctx, api.Database, key.UserID, queryStr)
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
|
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
|
||||||
Message: "Invalid template search query.",
|
Message: "Invalid template search query.",
|
||||||
|
|||||||
@@ -820,7 +820,7 @@ func TestTemplatesByOrganization(t *testing.T) {
|
|||||||
client := coderdtest.New(t, nil)
|
client := coderdtest.New(t, nil)
|
||||||
owner := coderdtest.CreateFirstUser(t, client)
|
owner := coderdtest.CreateFirstUser(t, client)
|
||||||
adminAlpha, adminAlphaData := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
|
adminAlpha, adminAlphaData := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
|
||||||
adminBravo, adminBravoData := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
|
adminBravo, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
|
||||||
adminCharlie, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
|
adminCharlie, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.RoleTemplateAdmin())
|
||||||
|
|
||||||
versionA := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil)
|
versionA := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil)
|
||||||
@@ -847,8 +847,8 @@ func TestTemplatesByOrganization(t *testing.T) {
|
|||||||
require.Equal(t, foo.ID, alpha[0].ID)
|
require.Equal(t, foo.ID, alpha[0].ID)
|
||||||
|
|
||||||
// List bravo
|
// List bravo
|
||||||
bravo, err := client.Templates(ctx, codersdk.TemplateFilter{
|
bravo, err := adminBravo.Templates(ctx, codersdk.TemplateFilter{
|
||||||
AuthorUsername: adminBravoData.Username,
|
AuthorUsername: codersdk.Me,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, bravo, 1)
|
require.Len(t, bravo, 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user