Skip to content

Commit

Permalink
fix: support substring search on workspace name (#2096)
Browse files Browse the repository at this point in the history
  • Loading branch information
f0ssel committed Jun 6, 2022
1 parent 66cf59b commit a860b86
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 5 deletions.
2 changes: 1 addition & 1 deletion coderd/database/databasefake/databasefake.go
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions coderd/database/queries.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions coderd/database/queries/workspaces.sql
Expand Up @@ -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
;
Expand Down
36 changes: 36 additions & 0 deletions coderd/workspaces_test.go
Expand Up @@ -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) {
Expand Down

0 comments on commit a860b86

Please sign in to comment.