@@ -2,13 +2,16 @@ package coderd_test
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"net/http"
6
7
"testing"
7
8
"time"
8
9
10
+ "github.com/stretchr/testify/assert"
9
11
"github.com/stretchr/testify/require"
10
12
11
13
"github.com/coder/coder/coderd/coderdtest"
14
+ "github.com/coder/coder/coderd/database"
12
15
"github.com/coder/coder/coderd/util/ptr"
13
16
"github.com/coder/coder/codersdk"
14
17
"github.com/coder/coder/enterprise/coderd/coderdenttest"
@@ -70,3 +73,56 @@ func TestCreateWorkspace(t *testing.T) {
70
73
require .Error (t , err )
71
74
})
72
75
}
76
+
77
+ func TestWorkspacesFiltering (t * testing.T ) {
78
+ t .Parallel ()
79
+
80
+ t .Run ("FilterQueryHasDeletingByAndLicensed" , func (t * testing.T ) {
81
+ t .Parallel ()
82
+
83
+ inactivityTTL := 1 * 24 * time .Hour
84
+
85
+ client := coderdenttest .New (t , & coderdenttest.Options {
86
+ Options : & coderdtest.Options {
87
+ IncludeProvisionerDaemon : true ,
88
+ },
89
+ })
90
+ user := coderdtest .CreateFirstUser (t , client )
91
+ _ = coderdenttest .AddLicense (t , client , coderdenttest.LicenseOptions {
92
+ Features : license.Features {
93
+ codersdk .FeatureAdvancedTemplateScheduling : 1 ,
94
+ },
95
+ })
96
+
97
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
98
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
99
+
100
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
101
+
102
+ // update template with inactivity ttl
103
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
104
+ defer cancel ()
105
+
106
+ template , err := client .UpdateTemplateMeta (ctx , template .ID , codersdk.UpdateTemplateMeta {
107
+ InactivityTTLMillis : inactivityTTL .Milliseconds (),
108
+ })
109
+
110
+ assert .NoError (t , err )
111
+ assert .Equal (t , inactivityTTL .Milliseconds (), template .InactivityTTLMillis )
112
+
113
+ workspace := coderdtest .CreateWorkspace (t , client , user .OrganizationID , template .ID )
114
+ coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
115
+
116
+ // stop build so workspace is inactive
117
+ stopBuild := coderdtest .CreateWorkspaceBuild (t , client , workspace , database .WorkspaceTransitionStop )
118
+ coderdtest .AwaitWorkspaceBuildJob (t , client , stopBuild .ID )
119
+
120
+ res , err := client .Workspaces (ctx , codersdk.WorkspaceFilter {
121
+ // adding a second to time.Now() to give some buffer in case test runs quickly
122
+ FilterQuery : fmt .Sprintf ("deleting_by:%s" , time .Now ().Add (time .Second ).Add (inactivityTTL ).Format ("2006-01-02" )),
123
+ })
124
+ assert .NoError (t , err )
125
+ assert .Len (t , res .Workspaces , 1 )
126
+ assert .Equal (t , workspace .ID , res .Workspaces [0 ].ID )
127
+ })
128
+ }
0 commit comments