Skip to content

Commit 127aa47

Browse files
committed
simple test
1 parent 2342d52 commit 127aa47

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

coderd/provisionerdserver/provisionerdserver_test.go

+82
Original file line numberDiff line numberDiff line change
@@ -1804,6 +1804,88 @@ func TestNotifications(t *testing.T) {
18041804
})
18051805
}
18061806
})
1807+
1808+
t.Run("Manual build failed, template admins notified", func(t *testing.T) {
1809+
t.Parallel()
1810+
1811+
ctx := context.Background()
1812+
notifEnq := &testutil.FakeNotificationsEnqueuer{}
1813+
1814+
// Otherwise `(*Server).FailJob` fails with:
1815+
// audit log - get build {"error": "sql: no rows in result set"}
1816+
ignoreLogErrors := true
1817+
srv, db, ps, pd := setup(t, ignoreLogErrors, &overrides{
1818+
notificationEnqueuer: notifEnq,
1819+
})
1820+
1821+
templateAdmin := dbgen.User(t, db, database.User{RBACRoles: []string{codersdk.RoleTemplateAdmin}})
1822+
user := dbgen.User(t, db, database.User{})
1823+
initiator := user
1824+
1825+
template := dbgen.Template(t, db, database.Template{
1826+
Name: "template",
1827+
Provisioner: database.ProvisionerTypeEcho,
1828+
OrganizationID: pd.OrganizationID,
1829+
})
1830+
template, err := db.GetTemplateByID(ctx, template.ID)
1831+
require.NoError(t, err)
1832+
file := dbgen.File(t, db, database.File{CreatedBy: user.ID})
1833+
workspace := dbgen.Workspace(t, db, database.Workspace{
1834+
TemplateID: template.ID,
1835+
OwnerID: user.ID,
1836+
OrganizationID: pd.OrganizationID,
1837+
})
1838+
version := dbgen.TemplateVersion(t, db, database.TemplateVersion{
1839+
OrganizationID: pd.OrganizationID,
1840+
TemplateID: uuid.NullUUID{
1841+
UUID: template.ID,
1842+
Valid: true,
1843+
},
1844+
JobID: uuid.New(),
1845+
})
1846+
build := dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{
1847+
WorkspaceID: workspace.ID,
1848+
TemplateVersionID: version.ID,
1849+
InitiatorID: initiator.ID,
1850+
Transition: database.WorkspaceTransitionDelete,
1851+
Reason: database.BuildReasonInitiator,
1852+
})
1853+
job := dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{
1854+
FileID: file.ID,
1855+
Type: database.ProvisionerJobTypeWorkspaceBuild,
1856+
Input: must(json.Marshal(provisionerdserver.WorkspaceProvisionJob{
1857+
WorkspaceBuildID: build.ID,
1858+
})),
1859+
OrganizationID: pd.OrganizationID,
1860+
})
1861+
_, err = db.AcquireProvisionerJob(ctx, database.AcquireProvisionerJobParams{
1862+
OrganizationID: pd.OrganizationID,
1863+
WorkerID: uuid.NullUUID{
1864+
UUID: pd.ID,
1865+
Valid: true,
1866+
},
1867+
Types: []database.ProvisionerType{database.ProvisionerTypeEcho},
1868+
})
1869+
require.NoError(t, err)
1870+
1871+
_, err = srv.FailJob(ctx, &proto.FailedJob{
1872+
JobId: job.ID.String(),
1873+
Type: &proto.FailedJob_WorkspaceBuild_{
1874+
WorkspaceBuild: &proto.FailedJob_WorkspaceBuild{
1875+
State: []byte{},
1876+
},
1877+
},
1878+
})
1879+
require.NoError(t, err)
1880+
1881+
require.Len(t, notifEnq.Sent, 1)
1882+
require.Equal(t, notifEnq.Sent[0].UserID, templateAdmin.ID)
1883+
require.Equal(t, notifEnq.Sent[0].TemplateID, notifications.TemplateWorkspaceManualBuildFailed)
1884+
require.Contains(t, notifEnq.Sent[0].Targets, template.ID)
1885+
require.Contains(t, notifEnq.Sent[0].Targets, workspace.ID)
1886+
require.Contains(t, notifEnq.Sent[0].Targets, workspace.OrganizationID)
1887+
require.Contains(t, notifEnq.Sent[0].Targets, user.ID)
1888+
})
18071889
}
18081890

18091891
type overrides struct {

0 commit comments

Comments
 (0)