77"net/http"
88"net/http/httptest"
99"net/url"
10+ "slices"
1011"sort"
1112"testing"
1213"time"
@@ -105,6 +106,52 @@ func TestTelemetry(t *testing.T) {
105106OpenIn :database .WorkspaceAppOpenInSlimWindow ,
106107AgentID :wsagent .ID ,
107108})
109+
110+ taskJob := dbgen .ProvisionerJob (t ,db ,nil , database.ProvisionerJob {
111+ Provisioner :database .ProvisionerTypeTerraform ,
112+ StorageMethod :database .ProvisionerStorageMethodFile ,
113+ Type :database .ProvisionerJobTypeTemplateVersionDryRun ,
114+ OrganizationID :org .ID ,
115+ })
116+ taskTpl := dbgen .Template (t ,db , database.Template {
117+ Provisioner :database .ProvisionerTypeTerraform ,
118+ OrganizationID :org .ID ,
119+ CreatedBy :user .ID ,
120+ })
121+ taskTV := dbgen .TemplateVersion (t ,db , database.TemplateVersion {
122+ OrganizationID :org .ID ,
123+ TemplateID : uuid.NullUUID {UUID :taskTpl .ID ,Valid :true },
124+ CreatedBy :user .ID ,
125+ JobID :taskJob .ID ,
126+ HasAITask : sql.NullBool {Bool :true ,Valid :true },
127+ })
128+ taskWs := dbgen .Workspace (t ,db , database.WorkspaceTable {
129+ OwnerID :user .ID ,
130+ OrganizationID :org .ID ,
131+ TemplateID :taskTpl .ID ,
132+ })
133+ taskWsResource := dbgen .WorkspaceResource (t ,db , database.WorkspaceResource {
134+ JobID :taskJob .ID ,
135+ })
136+ taskWsAgent := dbgen .WorkspaceAgent (t ,db , database.WorkspaceAgent {
137+ ResourceID :taskWsResource .ID ,
138+ })
139+ taskWsApp := dbgen .WorkspaceApp (t ,db , database.WorkspaceApp {
140+ SharingLevel :database .AppSharingLevelOwner ,
141+ Health :database .WorkspaceAppHealthDisabled ,
142+ OpenIn :database .WorkspaceAppOpenInSlimWindow ,
143+ AgentID :taskWsAgent .ID ,
144+ })
145+ taskWB := dbgen .WorkspaceBuild (t ,db , database.WorkspaceBuild {
146+ Transition :database .WorkspaceTransitionStart ,
147+ Reason :database .BuildReasonAutostart ,
148+ WorkspaceID :taskWs .ID ,
149+ TemplateVersionID :tv .ID ,
150+ JobID :taskJob .ID ,
151+ HasAITask : sql.NullBool {Valid :true ,Bool :true },
152+ AITaskSidebarAppID : uuid.NullUUID {Valid :true ,UUID :taskWsApp .ID },
153+ })
154+
108155group := dbgen .Group (t ,db , database.Group {
109156OrganizationID :org .ID ,
110157})
@@ -148,19 +195,19 @@ func TestTelemetry(t *testing.T) {
148195})
149196
150197_ ,snapshot := collectSnapshot (ctx ,t ,db ,nil )
151- require .Len (t ,snapshot .ProvisionerJobs ,1 )
198+ require .Len (t ,snapshot .ProvisionerJobs ,2 )
152199require .Len (t ,snapshot .Licenses ,1 )
153- require .Len (t ,snapshot .Templates ,1 )
154- require .Len (t ,snapshot .TemplateVersions ,2 )
200+ require .Len (t ,snapshot .Templates ,2 )
201+ require .Len (t ,snapshot .TemplateVersions ,3 )
155202require .Len (t ,snapshot .Users ,1 )
156203require .Len (t ,snapshot .Groups ,2 )
157204// 1 member in the everyone group + 1 member in the custom group
158205require .Len (t ,snapshot .GroupMembers ,2 )
159- require .Len (t ,snapshot .Workspaces ,1 )
160- require .Len (t ,snapshot .WorkspaceApps ,1 )
161- require .Len (t ,snapshot .WorkspaceAgents ,1 )
162- require .Len (t ,snapshot .WorkspaceBuilds ,1 )
163- require .Len (t ,snapshot .WorkspaceResources ,1 )
206+ require .Len (t ,snapshot .Workspaces ,2 )
207+ require .Len (t ,snapshot .WorkspaceApps ,2 )
208+ require .Len (t ,snapshot .WorkspaceAgents ,2 )
209+ require .Len (t ,snapshot .WorkspaceBuilds ,2 )
210+ require .Len (t ,snapshot .WorkspaceResources ,2 )
164211require .Len (t ,snapshot .WorkspaceAgentStats ,1 )
165212require .Len (t ,snapshot .WorkspaceProxies ,1 )
166213require .Len (t ,snapshot .WorkspaceModules ,1 )
@@ -169,11 +216,24 @@ func TestTelemetry(t *testing.T) {
169216require .Len (t ,snapshot .TelemetryItems ,2 )
170217require .Len (t ,snapshot .WorkspaceAgentMemoryResourceMonitors ,1 )
171218require .Len (t ,snapshot .WorkspaceAgentVolumeResourceMonitors ,1 )
172- wsa := snapshot .WorkspaceAgents [0 ]
219+ wsa := snapshot .WorkspaceAgents [1 ]
173220require .Len (t ,wsa .Subsystems ,2 )
174221require .Equal (t ,string (database .WorkspaceAgentSubsystemEnvbox ),wsa .Subsystems [0 ])
175222require .Equal (t ,string (database .WorkspaceAgentSubsystemExectrace ),wsa .Subsystems [1 ])
176223
224+ require .True (t ,slices .ContainsFunc (snapshot .TemplateVersions ,func (ttv telemetry.TemplateVersion )bool {
225+ if ttv .ID != taskTV .ID {
226+ return false
227+ }
228+ return assert .NotNil (t ,ttv .HasAITask )&& assert .True (t ,* ttv .HasAITask )
229+ }))
230+ require .True (t ,slices .ContainsFunc (snapshot .WorkspaceBuilds ,func (twb telemetry.WorkspaceBuild )bool {
231+ if twb .ID != taskWB .ID {
232+ return false
233+ }
234+ return assert .NotNil (t ,twb .HasAITask )&& assert .True (t ,* twb .HasAITask )
235+ }))
236+
177237tvs := snapshot .TemplateVersions
178238sort .Slice (tvs ,func (i ,j int )bool {
179239// Sort by SourceExampleID presence (non-nil comes before nil)