Skip to content

Commit 585e16c

Browse files
f0sselkylecarbs
authored andcommitted
fix: support substring search on workspace name (#2096)
1 parent 8ee599c commit 585e16c

File tree

4 files changed

+41
-5
lines changed

4 files changed

+41
-5
lines changed

coderd/database/databasefake/databasefake.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ func (q *fakeQuerier) GetWorkspacesWithFilter(_ context.Context, arg database.Ge
330330
if !arg.Deleted && workspace.Deleted {
331331
continue
332332
}
333-
if arg.Name != "" && workspace.Name != arg.Name {
333+
if arg.Name != "" && !strings.Contains(workspace.Name, arg.Name) {
334334
continue
335335
}
336336
workspaces = append(workspaces, workspace)

coderd/database/queries.sql.go

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaces.sql

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ WHERE
2828
owner_id = @owner_id
2929
ELSE true
3030
END
31-
-- Filter by name
31+
-- Filter by name, matching on substring
3232
AND CASE
3333
WHEN @name :: text != '' THEN
34-
LOWER(name) = LOWER(@name)
34+
LOWER(name) LIKE '%' || LOWER(@name) || '%'
3535
ELSE true
3636
END
3737
;

coderd/workspaces_test.go

+36
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,42 @@ func TestWorkspaceByOwnerAndName(t *testing.T) {
232232
})
233233
}
234234

235+
func TestWorkspaceFilter(t *testing.T) {
236+
t.Parallel()
237+
t.Run("Name", func(t *testing.T) {
238+
t.Parallel()
239+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
240+
user := coderdtest.CreateFirstUser(t, client)
241+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
242+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
243+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
244+
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
245+
246+
// full match
247+
ws, err := client.Workspaces(context.Background(), codersdk.WorkspaceFilter{
248+
Name: workspace.Name,
249+
})
250+
require.NoError(t, err)
251+
require.Len(t, ws, 1, workspace.Name)
252+
require.Equal(t, workspace.ID, ws[0].ID)
253+
254+
// partial match
255+
ws, err = client.Workspaces(context.Background(), codersdk.WorkspaceFilter{
256+
Name: workspace.Name[1 : len(workspace.Name)-2],
257+
})
258+
require.NoError(t, err)
259+
require.Len(t, ws, 1)
260+
require.Equal(t, workspace.ID, ws[0].ID)
261+
262+
// no match
263+
ws, err = client.Workspaces(context.Background(), codersdk.WorkspaceFilter{
264+
Name: "$$$$",
265+
})
266+
require.NoError(t, err)
267+
require.Len(t, ws, 0)
268+
})
269+
}
270+
235271
func TestPostWorkspaceBuild(t *testing.T) {
236272
t.Parallel()
237273
t.Run("NoTemplateVersion", func(t *testing.T) {

0 commit comments

Comments
 (0)