mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
fix: send workspace create/update notifications to template admins only (#16071)
Relates to https://github.com/coder/coder/issues/15845 Rather than sending the notification to the user, we send it to the template admins. We also do not send it to the person that created the request.
This commit is contained in:
@ -577,22 +577,38 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
|
||||
enqueuer := notificationstest.FakeEnqueuer{}
|
||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true, NotificationsEnqueuer: &enqueuer})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
templateAdminClient, templateAdmin := coderdtest.CreateAnotherUser(t, client, user.OrganizationID, rbac.RoleTemplateAdmin())
|
||||
memberClient, memberUser := coderdtest.CreateAnotherUser(t, client, user.OrganizationID)
|
||||
|
||||
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
|
||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||
version := coderdtest.CreateTemplateVersion(t, templateAdminClient, user.OrganizationID, nil)
|
||||
template := coderdtest.CreateTemplate(t, templateAdminClient, user.OrganizationID, version.ID)
|
||||
coderdtest.AwaitTemplateVersionJobCompleted(t, templateAdminClient, version.ID)
|
||||
|
||||
workspace := coderdtest.CreateWorkspace(t, memberClient, template.ID)
|
||||
coderdtest.AwaitWorkspaceBuildJobCompleted(t, memberClient, workspace.LatestBuild.ID)
|
||||
|
||||
sent := enqueuer.Sent(notificationstest.WithTemplateID(notifications.TemplateWorkspaceCreated))
|
||||
require.Len(t, sent, 1)
|
||||
require.Equal(t, memberUser.ID, sent[0].UserID)
|
||||
require.Len(t, sent, 2)
|
||||
|
||||
receivers := make([]uuid.UUID, len(sent))
|
||||
for idx, notif := range sent {
|
||||
receivers[idx] = notif.UserID
|
||||
}
|
||||
|
||||
// Check the notification was sent to the first user and template admin
|
||||
require.Contains(t, receivers, templateAdmin.ID)
|
||||
require.Contains(t, receivers, user.UserID)
|
||||
require.NotContains(t, receivers, memberUser.ID)
|
||||
|
||||
require.Contains(t, sent[0].Targets, template.ID)
|
||||
require.Contains(t, sent[0].Targets, workspace.ID)
|
||||
require.Contains(t, sent[0].Targets, workspace.OrganizationID)
|
||||
require.Contains(t, sent[0].Targets, workspace.OwnerID)
|
||||
|
||||
require.Contains(t, sent[1].Targets, template.ID)
|
||||
require.Contains(t, sent[1].Targets, workspace.ID)
|
||||
require.Contains(t, sent[1].Targets, workspace.OrganizationID)
|
||||
require.Contains(t, sent[1].Targets, workspace.OwnerID)
|
||||
})
|
||||
|
||||
t.Run("CreateSendsNotificationToCorrectUser", func(t *testing.T) {
|
||||
@ -601,14 +617,15 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
|
||||
enqueuer := notificationstest.FakeEnqueuer{}
|
||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true, NotificationsEnqueuer: &enqueuer})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
templateAdminClient, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID, rbac.RoleTemplateAdmin(), rbac.RoleOwner())
|
||||
_, memberUser := coderdtest.CreateAnotherUser(t, client, user.OrganizationID)
|
||||
|
||||
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
|
||||
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||
version := coderdtest.CreateTemplateVersion(t, templateAdminClient, user.OrganizationID, nil)
|
||||
template := coderdtest.CreateTemplate(t, templateAdminClient, user.OrganizationID, version.ID)
|
||||
coderdtest.AwaitTemplateVersionJobCompleted(t, templateAdminClient, version.ID)
|
||||
|
||||
ctx := testutil.Context(t, testutil.WaitShort)
|
||||
workspace, err := client.CreateUserWorkspace(ctx, memberUser.Username, codersdk.CreateWorkspaceRequest{
|
||||
workspace, err := templateAdminClient.CreateUserWorkspace(ctx, memberUser.Username, codersdk.CreateWorkspaceRequest{
|
||||
TemplateID: template.ID,
|
||||
Name: coderdtest.RandomUsername(t),
|
||||
})
|
||||
@ -617,7 +634,7 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
|
||||
|
||||
sent := enqueuer.Sent(notificationstest.WithTemplateID(notifications.TemplateWorkspaceCreated))
|
||||
require.Len(t, sent, 1)
|
||||
require.Equal(t, memberUser.ID, sent[0].UserID)
|
||||
require.Equal(t, user.UserID, sent[0].UserID)
|
||||
require.Contains(t, sent[0].Targets, template.ID)
|
||||
require.Contains(t, sent[0].Targets, workspace.ID)
|
||||
require.Contains(t, sent[0].Targets, workspace.OrganizationID)
|
||||
|
Reference in New Issue
Block a user