(t *testing.T)
| 24 | ) |
| 25 | |
| 26 | func TestChatACLSharingLifecycle(t *testing.T) { |
| 27 | t.Parallel() |
| 28 | |
| 29 | ctx := testutil.Context(t, testutil.WaitLong) |
| 30 | mAudit := audit.NewMock() |
| 31 | client, db := newChatClientWithDatabase(t, func(opts *coderdtest.Options) { |
| 32 | opts.Auditor = mAudit |
| 33 | }) |
| 34 | firstUser := coderdtest.CreateFirstUser(t, client.Client) |
| 35 | _ = createChatModelConfig(t, client) |
| 36 | |
| 37 | sharedClient, sharedUser := coderdtest.CreateAnotherUser(t, client.Client, firstUser.OrganizationID) |
| 38 | sharedClientExp := codersdk.NewExperimentalClient(sharedClient) |
| 39 | nonSharedClient, _ := coderdtest.CreateAnotherUser(t, client.Client, firstUser.OrganizationID) |
| 40 | nonSharedClientExp := codersdk.NewExperimentalClient(nonSharedClient) |
| 41 | groupMemberClient, groupMember := coderdtest.CreateAnotherUser(t, client.Client, firstUser.OrganizationID) |
| 42 | groupMemberClientExp := codersdk.NewExperimentalClient(groupMemberClient) |
| 43 | sharedGroup := dbgen.Group(t, db, database.Group{OrganizationID: firstUser.OrganizationID}) |
| 44 | dbgen.GroupMember(t, db, database.GroupMemberTable{GroupID: sharedGroup.ID, UserID: groupMember.ID}) |
| 45 | |
| 46 | data := []byte("chat sharing file") |
| 47 | uploaded, err := client.UploadChatFile(ctx, firstUser.OrganizationID, "text/plain", "shared.txt", bytes.NewReader(data)) |
| 48 | require.NoError(t, err) |
| 49 | chat := createChatForSharing(ctx, t, client, firstUser.OrganizationID, "shared chat", uploaded.ID) |
| 50 | |
| 51 | _, err = sharedClientExp.GetChat(ctx, chat.ID) |
| 52 | requireSDKError(t, err, http.StatusNotFound) |
| 53 | _, _, err = nonSharedClientExp.GetChatFile(ctx, uploaded.ID) |
| 54 | requireSDKError(t, err, http.StatusNotFound) |
| 55 | |
| 56 | err = client.UpdateChatACL(ctx, chat.ID, codersdk.UpdateChatACL{ |
| 57 | UserRoles: map[string]codersdk.ChatRole{ |
| 58 | sharedUser.ID.String(): codersdk.ChatRoleRead, |
| 59 | }, |
| 60 | GroupRoles: map[string]codersdk.ChatRole{ |
| 61 | sharedGroup.ID.String(): codersdk.ChatRoleRead, |
| 62 | }, |
| 63 | }) |
| 64 | require.NoError(t, err) |
| 65 | require.True(t, mAudit.Contains(t, database.AuditLog{ |
| 66 | Action: database.AuditActionWrite, |
| 67 | ResourceType: database.ResourceTypeChat, |
| 68 | ResourceID: chat.ID, |
| 69 | UserID: firstUser.UserID, |
| 70 | })) |
| 71 | |
| 72 | acl, err := client.GetChatACL(ctx, chat.ID) |
| 73 | require.NoError(t, err) |
| 74 | require.Len(t, acl.Users, 1) |
| 75 | require.Equal(t, sharedUser.ID.String(), acl.Users[0].ID.String()) |
| 76 | require.Equal(t, map[uuid.UUID]codersdk.ChatRole{ |
| 77 | sharedUser.ID: codersdk.ChatRoleRead, |
| 78 | }, chatUserRoles(acl.Users)) |
| 79 | require.Equal(t, map[uuid.UUID]codersdk.ChatRole{ |
| 80 | sharedGroup.ID: codersdk.ChatRoleRead, |
| 81 | }, chatGroupRoles(acl.Groups)) |
| 82 | require.Len(t, acl.Groups, 1) |
| 83 | require.Equal(t, sharedGroup.ID.String(), acl.Groups[0].ID.String()) |
nothing calls this directly
no test coverage detected