fix: support substring search on workspace name (#2096)

This commit is contained in:
Garrett Delfosse
2022-06-06 19:43:16 +00:00
committed by GitHub
parent 66cf59bbe1
commit a860b86256
4 changed files with 41 additions and 5 deletions
+1 -1
View File
@@ -330,7 +330,7 @@ func (q *fakeQuerier) GetWorkspacesWithFilter(_ context.Context, arg database.Ge
if !arg.Deleted && workspace.Deleted {
continue
}
if arg.Name != "" && workspace.Name != arg.Name {
if arg.Name != "" && !strings.Contains(workspace.Name, arg.Name) {
continue
}
workspaces = append(workspaces, workspace)
+2 -2
View File
@@ -3658,10 +3658,10 @@ WHERE
owner_id = $3
ELSE true
END
-- Filter by name
-- Filter by name, matching on substring
AND CASE
WHEN $4 :: text != '' THEN
LOWER(name) = LOWER($4)
LOWER(name) LIKE '%' || LOWER($4) || '%'
ELSE true
END
`
+2 -2
View File
@@ -28,10 +28,10 @@ WHERE
owner_id = @owner_id
ELSE true
END
-- Filter by name
-- Filter by name, matching on substring
AND CASE
WHEN @name :: text != '' THEN
LOWER(name) = LOWER(@name)
LOWER(name) LIKE '%' || LOWER(@name) || '%'
ELSE true
END
;
+36
View File
@@ -232,6 +232,42 @@ func TestWorkspaceByOwnerAndName(t *testing.T) {
})
}
func TestWorkspaceFilter(t *testing.T) {
t.Parallel()
t.Run("Name", func(t *testing.T) {
t.Parallel()
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
user := coderdtest.CreateFirstUser(t, client)
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
// full match
ws, err := client.Workspaces(context.Background(), codersdk.WorkspaceFilter{
Name: workspace.Name,
})
require.NoError(t, err)
require.Len(t, ws, 1, workspace.Name)
require.Equal(t, workspace.ID, ws[0].ID)
// partial match
ws, err = client.Workspaces(context.Background(), codersdk.WorkspaceFilter{
Name: workspace.Name[1 : len(workspace.Name)-2],
})
require.NoError(t, err)
require.Len(t, ws, 1)
require.Equal(t, workspace.ID, ws[0].ID)
// no match
ws, err = client.Workspaces(context.Background(), codersdk.WorkspaceFilter{
Name: "$$$$",
})
require.NoError(t, err)
require.Len(t, ws, 0)
})
}
func TestPostWorkspaceBuild(t *testing.T) {
t.Parallel()
t.Run("NoTemplateVersion", func(t *testing.T) {