From 59e635a32c376de409c69f37ae0f9aa8b59fdaef Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Fri, 20 Dec 2024 13:15:25 +0000 Subject: [PATCH 01/10] update to use AllPages --- internal/service/team/data_source_team.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/internal/service/team/data_source_team.go b/internal/service/team/data_source_team.go index 194db4e002..0489070a24 100644 --- a/internal/service/team/data_source_team.go +++ b/internal/service/team/data_source_team.go @@ -4,14 +4,17 @@ import ( "context" "errors" "fmt" + "net/http" + + "go.mongodb.org/atlas-sdk/v20241113003/admin" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/constant" "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion" + "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/dsschema" "github.com/mongodb/terraform-provider-mongodbatlas/internal/config" - - "go.mongodb.org/atlas-sdk/v20241113003/admin" ) func DataSource() *schema.Resource { @@ -77,21 +80,26 @@ func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag. } if err := d.Set("team_id", team.GetId()); err != nil { - return diag.FromErr(fmt.Errorf(errorTeamSetting, "name", d.Id(), err)) + return diag.FromErr(fmt.Errorf(errorTeamSetting, "team_id", d.Id(), err)) } if err := d.Set("name", team.GetName()); err != nil { return diag.FromErr(fmt.Errorf(errorTeamSetting, "name", d.Id(), err)) } - users, _, err := connV2.TeamsApi.ListTeamUsers(ctx, orgID, team.GetId()).Execute() + sdkProcessors, err := dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { + request := connV2.TeamsApi.ListTeamUsers(ctx, orgID, team.GetId()) + request = request.PageNum(pageNum) + return request.Execute() + }) + if err != nil { return diag.FromErr(fmt.Errorf(errorTeamRead, err)) } usernames := []string{} - for i := range users.GetResults() { - usernames = append(usernames, users.GetResults()[i].GetUsername()) + for i := range sdkProcessors { + usernames = append(usernames, sdkProcessors[i].GetUsername()) } if err := d.Set("usernames", usernames); err != nil { From 6af76f591ca8379b6bc4438d5d4b9710b3839ba8 Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Fri, 20 Dec 2024 14:13:11 +0000 Subject: [PATCH 02/10] minor --- .../advancedcluster/resource_advanced_cluster_migration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go b/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go index 353ac866c0..9fbfc16488 100644 --- a/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go +++ b/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go @@ -226,7 +226,7 @@ func TestMigAdvancedCluster_partialAdvancedConf(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.sample_size_bi_connector", "110"), resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.default_max_time_ms", "65"), resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.tls_cipher_config_mode", "CUSTOM"), - resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.custom_openssl_cipher_config_tls12.#", "2"), + resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.custom_openssl_cipher_config_tls12.#", "1"), resource.TestCheckResourceAttr(resourceName, "bi_connector_config.0.enabled", "false"), resource.TestCheckResourceAttr(resourceName, "bi_connector_config.0.read_preference", "secondary"), ), From 827d93b8040de1f2b8ca046f9bd85f487de57004 Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Fri, 20 Dec 2024 14:20:49 +0000 Subject: [PATCH 03/10] changelog --- .changelog/2919.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/2919.txt diff --git a/.changelog/2919.txt b/.changelog/2919.txt new file mode 100644 index 0000000000..8551971187 --- /dev/null +++ b/.changelog/2919.txt @@ -0,0 +1,3 @@ +```release-note:bug +data-source/mongodbatlas_team: Improves pagination in mongodbatlas_team data source +``` From 22fd4f6cbac6403c3eaea10c31d7c70e1ffb8618 Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Fri, 20 Dec 2024 15:06:59 +0000 Subject: [PATCH 04/10] update resource --- internal/service/team/data_source_team.go | 6 +++--- internal/service/team/resource_team.go | 25 +++++++++++++++++------ internal/service/team/update_user.go | 14 ++++++------- internal/service/team/update_user_test.go | 12 ++++++----- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/internal/service/team/data_source_team.go b/internal/service/team/data_source_team.go index 0489070a24..1ed998d40a 100644 --- a/internal/service/team/data_source_team.go +++ b/internal/service/team/data_source_team.go @@ -87,7 +87,7 @@ func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag. return diag.FromErr(fmt.Errorf(errorTeamSetting, "name", d.Id(), err)) } - sdkProcessors, err := dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { + teamUsers, err := dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { request := connV2.TeamsApi.ListTeamUsers(ctx, orgID, team.GetId()) request = request.PageNum(pageNum) return request.Execute() @@ -98,8 +98,8 @@ func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag. } usernames := []string{} - for i := range sdkProcessors { - usernames = append(usernames, sdkProcessors[i].GetUsername()) + for i := range teamUsers { + usernames = append(usernames, teamUsers[i].GetUsername()) } if err := d.Set("usernames", usernames); err != nil { diff --git a/internal/service/team/resource_team.go b/internal/service/team/resource_team.go index 609f5d5a06..c5f19a3144 100644 --- a/internal/service/team/resource_team.go +++ b/internal/service/team/resource_team.go @@ -9,13 +9,16 @@ import ( "strings" "time" + "go.mongodb.org/atlas-sdk/v20241113003/admin" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/constant" "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion" + "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/dsschema" "github.com/mongodb/terraform-provider-mongodbatlas/internal/config" - "go.mongodb.org/atlas-sdk/v20241113003/admin" ) const ( @@ -114,14 +117,19 @@ func resourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Di return diag.FromErr(fmt.Errorf(errorTeamSetting, "team_id", teamID, err)) } - users, _, err := connV2.TeamsApi.ListTeamUsers(ctx, orgID, teamID).Execute() + teamUsers, err := dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { + request := connV2.TeamsApi.ListTeamUsers(ctx, orgID, team.GetId()) + request = request.PageNum(pageNum) + return request.Execute() + }) + if err != nil { return diag.FromErr(fmt.Errorf(errorTeamRead, err)) } usernames := []string{} - for i := range users.GetResults() { - usernames = append(usernames, users.GetResults()[i].GetUsername()) + for i := range teamUsers { + usernames = append(usernames, teamUsers[i].GetUsername()) } if err := d.Set("usernames", usernames); err != nil { @@ -148,13 +156,18 @@ func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag. } if d.HasChange("usernames") { - existingUsers, _, err := connV2.TeamsApi.ListTeamUsers(ctx, orgID, teamID).Execute() + existingUsers, err := dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { + request := connV2.TeamsApi.ListTeamUsers(ctx, orgID, teamID) + request = request.PageNum(pageNum) + return request.Execute() + }) + if err != nil { return diag.FromErr(fmt.Errorf(errorTeamRead, err)) } newUsernames := conversion.ExpandStringList(d.Get("usernames").(*schema.Set).List()) - err = UpdateTeamUsers(connV2.TeamsApi, connV2.MongoDBCloudUsersApi, existingUsers, newUsernames, orgID, teamID) + err = UpdateTeamUsers(connV2.TeamsApi, connV2.MongoDBCloudUsersApi, &existingUsers, newUsernames, orgID, teamID) if err != nil { return diag.FromErr(fmt.Errorf("error when updating usernames in team: %s", err)) } diff --git a/internal/service/team/update_user.go b/internal/service/team/update_user.go index 941900559c..291ae54b08 100644 --- a/internal/service/team/update_user.go +++ b/internal/service/team/update_user.go @@ -6,12 +6,12 @@ import ( "go.mongodb.org/atlas-sdk/v20241113003/admin" ) -func UpdateTeamUsers(teamsAPI admin.TeamsApi, usersAPI admin.MongoDBCloudUsersApi, existingTeamUsers *admin.PaginatedAppUser, newUsernames []string, orgID, teamID string) error { +func UpdateTeamUsers(teamsAPI admin.TeamsApi, usersAPI admin.MongoDBCloudUsersApi, existingTeamUsers *[]admin.CloudAppUser, newUsernames []string, orgID, teamID string) error { validNewUsers, err := ValidateUsernames(usersAPI, newUsernames) if err != nil { return err } - usersToAdd, usersToRemove, err := GetChangesForTeamUsers(existingTeamUsers.GetResults(), validNewUsers) + usersToAdd, usersToRemove, err := GetChangesForTeamUsers(existingTeamUsers, validNewUsers) if err != nil { return err } @@ -41,7 +41,7 @@ func UpdateTeamUsers(teamsAPI admin.TeamsApi, usersAPI admin.MongoDBCloudUsersAp return nil } -func ValidateUsernames(c admin.MongoDBCloudUsersApi, usernames []string) ([]admin.CloudAppUser, error) { +func ValidateUsernames(c admin.MongoDBCloudUsersApi, usernames []string) (*[]admin.CloudAppUser, error) { var validUsers []admin.CloudAppUser for _, elem := range usernames { userToAdd, _, err := c.GetUserByUsername(context.Background(), elem).Execute() @@ -50,13 +50,13 @@ func ValidateUsernames(c admin.MongoDBCloudUsersApi, usernames []string) ([]admi } validUsers = append(validUsers, *userToAdd) } - return validUsers, nil + return &validUsers, nil } -func GetChangesForTeamUsers(currentUsers, newUsers []admin.CloudAppUser) (toAdd, toDelete []string, err error) { +func GetChangesForTeamUsers(currentUsers, newUsers *[]admin.CloudAppUser) (toAdd, toDelete []string, err error) { // Create two sets to store the elements of current and new users - currentUsersSet := InitUserSet(currentUsers) - newUsersSet := InitUserSet(newUsers) + currentUsersSet := InitUserSet(*currentUsers) + newUsersSet := InitUserSet(*newUsers) // Iterate over new users and add them to the toAdd array if they are not in current users for elem := range newUsersSet { diff --git a/internal/service/team/update_user_test.go b/internal/service/team/update_user_test.go index eac04d0b4b..108de82d68 100644 --- a/internal/service/team/update_user_test.go +++ b/internal/service/team/update_user_test.go @@ -4,12 +4,14 @@ import ( "errors" "testing" - "github.com/mongodb/terraform-provider-mongodbatlas/internal/service/team" + "go.mongodb.org/atlas-sdk/v20241113003/admin" + "go.mongodb.org/atlas-sdk/v20241113003/mockadmin" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "go.mongodb.org/atlas-sdk/v20241113003/admin" - "go.mongodb.org/atlas-sdk/v20241113003/mockadmin" + + "github.com/mongodb/terraform-provider-mongodbatlas/internal/service/team" ) func TestGetChangesForTeamUsers(t *testing.T) { @@ -58,7 +60,7 @@ func TestGetChangesForTeamUsers(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.testName, func(t *testing.T) { - toAdd, toDelete, err := team.GetChangesForTeamUsers(testCase.currentUsers, testCase.newUsers) + toAdd, toDelete, err := team.GetChangesForTeamUsers(&testCase.currentUsers, &testCase.newUsers) require.NoError(t, err) assert.ElementsMatch(t, testCase.expectedToAdd, toAdd) assert.ElementsMatch(t, testCase.expectedToDelete, toDelete) @@ -153,7 +155,7 @@ func TestUpdateTeamUsers(t *testing.T) { mockTeamsAPI := mockadmin.NewTeamsApi(t) mockUsersAPI := mockadmin.NewMongoDBCloudUsersApi(t) testCase.mockFuncExpectations(mockTeamsAPI, mockUsersAPI) - testCase.expectError(t, team.UpdateTeamUsers(mockTeamsAPI, mockUsersAPI, testCase.existingTeamUsers, testCase.usernames, "orgID", "teamID")) + testCase.expectError(t, team.UpdateTeamUsers(mockTeamsAPI, mockUsersAPI, testCase.existingTeamUsers.Results, testCase.usernames, "orgID", "teamID")) }) } } From 5c56753e155324b582d3b885429d1b1643db7eff Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Fri, 20 Dec 2024 15:11:40 +0000 Subject: [PATCH 05/10] undo --- .../advancedcluster/resource_advanced_cluster_migration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go b/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go index 9fbfc16488..353ac866c0 100644 --- a/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go +++ b/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go @@ -226,7 +226,7 @@ func TestMigAdvancedCluster_partialAdvancedConf(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.sample_size_bi_connector", "110"), resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.default_max_time_ms", "65"), resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.tls_cipher_config_mode", "CUSTOM"), - resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.custom_openssl_cipher_config_tls12.#", "1"), + resource.TestCheckResourceAttr(resourceName, "advanced_configuration.0.custom_openssl_cipher_config_tls12.#", "2"), resource.TestCheckResourceAttr(resourceName, "bi_connector_config.0.enabled", "false"), resource.TestCheckResourceAttr(resourceName, "bi_connector_config.0.read_preference", "secondary"), ), From 489f55c71e464b68f038cd0d9590109a38f4aebc Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Tue, 24 Dec 2024 14:33:53 +0000 Subject: [PATCH 06/10] min --- internal/service/team/resource_team.go | 2 +- internal/service/team/update_user.go | 12 +-- internal/service/team/update_user_test.go | 110 +++++++++++----------- 3 files changed, 63 insertions(+), 61 deletions(-) diff --git a/internal/service/team/resource_team.go b/internal/service/team/resource_team.go index c5f19a3144..2971a3819a 100644 --- a/internal/service/team/resource_team.go +++ b/internal/service/team/resource_team.go @@ -167,7 +167,7 @@ func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag. } newUsernames := conversion.ExpandStringList(d.Get("usernames").(*schema.Set).List()) - err = UpdateTeamUsers(connV2.TeamsApi, connV2.MongoDBCloudUsersApi, &existingUsers, newUsernames, orgID, teamID) + err = UpdateTeamUsers(connV2.TeamsApi, connV2.MongoDBCloudUsersApi, existingUsers, newUsernames, orgID, teamID) if err != nil { return diag.FromErr(fmt.Errorf("error when updating usernames in team: %s", err)) } diff --git a/internal/service/team/update_user.go b/internal/service/team/update_user.go index 291ae54b08..3eb68e5448 100644 --- a/internal/service/team/update_user.go +++ b/internal/service/team/update_user.go @@ -6,7 +6,7 @@ import ( "go.mongodb.org/atlas-sdk/v20241113003/admin" ) -func UpdateTeamUsers(teamsAPI admin.TeamsApi, usersAPI admin.MongoDBCloudUsersApi, existingTeamUsers *[]admin.CloudAppUser, newUsernames []string, orgID, teamID string) error { +func UpdateTeamUsers(teamsAPI admin.TeamsApi, usersAPI admin.MongoDBCloudUsersApi, existingTeamUsers []admin.CloudAppUser, newUsernames []string, orgID, teamID string) error { validNewUsers, err := ValidateUsernames(usersAPI, newUsernames) if err != nil { return err @@ -41,7 +41,7 @@ func UpdateTeamUsers(teamsAPI admin.TeamsApi, usersAPI admin.MongoDBCloudUsersAp return nil } -func ValidateUsernames(c admin.MongoDBCloudUsersApi, usernames []string) (*[]admin.CloudAppUser, error) { +func ValidateUsernames(c admin.MongoDBCloudUsersApi, usernames []string) ([]admin.CloudAppUser, error) { var validUsers []admin.CloudAppUser for _, elem := range usernames { userToAdd, _, err := c.GetUserByUsername(context.Background(), elem).Execute() @@ -50,13 +50,13 @@ func ValidateUsernames(c admin.MongoDBCloudUsersApi, usernames []string) (*[]adm } validUsers = append(validUsers, *userToAdd) } - return &validUsers, nil + return validUsers, nil } -func GetChangesForTeamUsers(currentUsers, newUsers *[]admin.CloudAppUser) (toAdd, toDelete []string, err error) { +func GetChangesForTeamUsers(currentUsers, newUsers []admin.CloudAppUser) (toAdd, toDelete []string, err error) { // Create two sets to store the elements of current and new users - currentUsersSet := InitUserSet(*currentUsers) - newUsersSet := InitUserSet(*newUsers) + currentUsersSet := InitUserSet(currentUsers) + newUsersSet := InitUserSet(newUsers) // Iterate over new users and add them to the toAdd array if they are not in current users for elem := range newUsersSet { diff --git a/internal/service/team/update_user_test.go b/internal/service/team/update_user_test.go index 108de82d68..48b29043cf 100644 --- a/internal/service/team/update_user_test.go +++ b/internal/service/team/update_user_test.go @@ -1,7 +1,6 @@ package team_test import ( - "errors" "testing" "go.mongodb.org/atlas-sdk/v20241113003/admin" @@ -60,7 +59,7 @@ func TestGetChangesForTeamUsers(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.testName, func(t *testing.T) { - toAdd, toDelete, err := team.GetChangesForTeamUsers(&testCase.currentUsers, &testCase.newUsers) + toAdd, toDelete, err := team.GetChangesForTeamUsers(testCase.currentUsers, testCase.newUsers) require.NoError(t, err) assert.ElementsMatch(t, testCase.expectedToAdd, toAdd) assert.ElementsMatch(t, testCase.expectedToDelete, toDelete) @@ -71,7 +70,7 @@ func TestGetChangesForTeamUsers(t *testing.T) { func TestUpdateTeamUsers(t *testing.T) { validuser1 := "validuser1" validuser2 := "validuser2" - invaliduser1 := "invaliduser1" + // invaliduser1 := "invaliduser1" testCases := map[string]struct { mockFuncExpectations func(*mockadmin.TeamsApi, *mockadmin.MongoDBCloudUsersApi) @@ -80,28 +79,28 @@ func TestUpdateTeamUsers(t *testing.T) { testName string usernames []string }{ - "succeeds but no changes are required": { - mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { - mockValidUser1 := mockadmin.NewMongoDBCloudUsersApi(t) - mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) - mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser1}) - mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser2).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) - mockValidUser1.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) - mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) - }, - existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}, {Id: &validuser2}}}, - usernames: []string{validuser1, validuser2}, - expectError: require.NoError, - }, - "fails because one user is invalid": { - mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { - mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, invaliduser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockUsersApi}) - mockUsersApi.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(nil, nil, errors.New("invalid username")) - }, - existingTeamUsers: nil, - usernames: []string{invaliduser1}, - expectError: require.Error, - }, + // "succeeds but no changes are required": { + // mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { + // mockValidUser1 := mockadmin.NewMongoDBCloudUsersApi(t) + // mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) + // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser1}) + // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser2).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) + // mockValidUser1.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) + // mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) + // }, + // existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}, {Id: &validuser2}}}, + // usernames: []string{validuser1, validuser2}, + // expectError: require.NoError, + // }, + // "fails because one user is invalid": { + // mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { + // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, invaliduser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockUsersApi}) + // mockUsersApi.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(nil, nil, errors.New("invalid username")) + // }, + // existingTeamUsers: &admin.PaginatedAppUser{Results: nil}, + // usernames: []string{invaliduser1}, + // expectError: require.Error, + // }, "succeeds with one user to be added": { mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { mockValidUser1 := mockadmin.NewMongoDBCloudUsersApi(t) @@ -111,43 +110,46 @@ func TestUpdateTeamUsers(t *testing.T) { mockValidUser1.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) + mockTeamsApi.EXPECT().AddTeamUser(mock.Anything, mock.Anything, mock.Anything, &[]admin.AddUserToTeam{{Id: validuser1}}).Return(admin.AddTeamUserApiRequest{ApiService: mockTeamsApi}) + mockTeamsApi.EXPECT().AddTeamUserExecute(mock.Anything).Return(nil, nil, nil) mockTeamsApi.EXPECT().AddTeamUser(mock.Anything, mock.Anything, mock.Anything, &[]admin.AddUserToTeam{{Id: validuser2}}).Return(admin.AddTeamUserApiRequest{ApiService: mockTeamsApi}) mockTeamsApi.EXPECT().AddTeamUserExecute(mock.Anything).Return(nil, nil, nil) }, - existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}}}, + // existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}}}, + existingTeamUsers: &admin.PaginatedAppUser{Results: nil}, usernames: []string{validuser1, validuser2}, expectError: require.NoError, }, - "succeeds with one user to be removed": { - mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { - mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) - mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser2).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) - mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) + // "succeeds with one user to be removed": { + // mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { + // mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) + // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser2).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) + // mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) - mockTeamsApi.EXPECT().RemoveTeamUser(mock.Anything, mock.Anything, mock.Anything, validuser1).Return(admin.RemoveTeamUserApiRequest{ApiService: mockTeamsApi}) - mockTeamsApi.EXPECT().RemoveTeamUserExecute(mock.Anything).Return(nil, nil) - }, - existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}, {Id: &validuser2}}}, - usernames: []string{validuser2}, - expectError: require.NoError, - }, - "succeeds with one user to be added and the other removed": { - mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { - mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) - mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) - mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) + // mockTeamsApi.EXPECT().RemoveTeamUser(mock.Anything, mock.Anything, mock.Anything, validuser1).Return(admin.RemoveTeamUserApiRequest{ApiService: mockTeamsApi}) + // mockTeamsApi.EXPECT().RemoveTeamUserExecute(mock.Anything).Return(nil, nil) + // }, + // existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}, {Id: &validuser2}}}, + // usernames: []string{validuser2}, + // expectError: require.NoError, + // }, + // "succeeds with one user to be added and the other removed": { + // mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { + // mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) + // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) + // mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) - addCall := mockTeamsApi.EXPECT().AddTeamUser(mock.Anything, mock.Anything, mock.Anything, &[]admin.AddUserToTeam{{Id: validuser1}}).Return(admin.AddTeamUserApiRequest{ApiService: mockTeamsApi}) - mockTeamsApi.EXPECT().AddTeamUserExecute(mock.Anything).Return(nil, nil, nil) + // addCall := mockTeamsApi.EXPECT().AddTeamUser(mock.Anything, mock.Anything, mock.Anything, &[]admin.AddUserToTeam{{Id: validuser1}}).Return(admin.AddTeamUserApiRequest{ApiService: mockTeamsApi}) + // mockTeamsApi.EXPECT().AddTeamUserExecute(mock.Anything).Return(nil, nil, nil) - removeCall := mockTeamsApi.EXPECT().RemoveTeamUser(mock.Anything, mock.Anything, mock.Anything, validuser2).Return(admin.RemoveTeamUserApiRequest{ApiService: mockTeamsApi}) - removeCall.NotBefore(addCall.Call) // Ensures new additions are made before removing - mockTeamsApi.EXPECT().RemoveTeamUserExecute(mock.Anything).Return(nil, nil) - }, - existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser2}}}, - usernames: []string{validuser1}, - expectError: require.NoError, - }, + // removeCall := mockTeamsApi.EXPECT().RemoveTeamUser(mock.Anything, mock.Anything, mock.Anything, validuser2).Return(admin.RemoveTeamUserApiRequest{ApiService: mockTeamsApi}) + // removeCall.NotBefore(addCall.Call) // Ensures new additions are made before removing + // mockTeamsApi.EXPECT().RemoveTeamUserExecute(mock.Anything).Return(nil, nil) + // }, + // existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser2}}}, + // usernames: []string{validuser1}, + // expectError: require.NoError, + // }, } for _, testCase := range testCases { @@ -155,7 +157,7 @@ func TestUpdateTeamUsers(t *testing.T) { mockTeamsAPI := mockadmin.NewTeamsApi(t) mockUsersAPI := mockadmin.NewMongoDBCloudUsersApi(t) testCase.mockFuncExpectations(mockTeamsAPI, mockUsersAPI) - testCase.expectError(t, team.UpdateTeamUsers(mockTeamsAPI, mockUsersAPI, testCase.existingTeamUsers.Results, testCase.usernames, "orgID", "teamID")) + testCase.expectError(t, team.UpdateTeamUsers(mockTeamsAPI, mockUsersAPI, *testCase.existingTeamUsers.Results, testCase.usernames, "orgID", "teamID")) }) } } From 5ad54f342584bc79ef0e6c7c9533a579d34efe2e Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Tue, 24 Dec 2024 14:50:20 +0000 Subject: [PATCH 07/10] min --- internal/service/team/update_user_test.go | 106 +++++++++++----------- 1 file changed, 52 insertions(+), 54 deletions(-) diff --git a/internal/service/team/update_user_test.go b/internal/service/team/update_user_test.go index 48b29043cf..6db87dbafa 100644 --- a/internal/service/team/update_user_test.go +++ b/internal/service/team/update_user_test.go @@ -1,6 +1,7 @@ package team_test import ( + "errors" "testing" "go.mongodb.org/atlas-sdk/v20241113003/admin" @@ -70,7 +71,7 @@ func TestGetChangesForTeamUsers(t *testing.T) { func TestUpdateTeamUsers(t *testing.T) { validuser1 := "validuser1" validuser2 := "validuser2" - // invaliduser1 := "invaliduser1" + invaliduser1 := "invaliduser1" testCases := map[string]struct { mockFuncExpectations func(*mockadmin.TeamsApi, *mockadmin.MongoDBCloudUsersApi) @@ -79,28 +80,28 @@ func TestUpdateTeamUsers(t *testing.T) { testName string usernames []string }{ - // "succeeds but no changes are required": { - // mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { - // mockValidUser1 := mockadmin.NewMongoDBCloudUsersApi(t) - // mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) - // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser1}) - // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser2).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) - // mockValidUser1.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) - // mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) - // }, - // existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}, {Id: &validuser2}}}, - // usernames: []string{validuser1, validuser2}, - // expectError: require.NoError, - // }, - // "fails because one user is invalid": { - // mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { - // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, invaliduser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockUsersApi}) - // mockUsersApi.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(nil, nil, errors.New("invalid username")) - // }, - // existingTeamUsers: &admin.PaginatedAppUser{Results: nil}, - // usernames: []string{invaliduser1}, - // expectError: require.Error, - // }, + "succeeds but no changes are required": { + mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { + mockValidUser1 := mockadmin.NewMongoDBCloudUsersApi(t) + mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) + mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser1}) + mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser2).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) + mockValidUser1.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) + mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) + }, + existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}, {Id: &validuser2}}}, + usernames: []string{validuser1, validuser2}, + expectError: require.NoError, + }, + "fails because one user is invalid": { + mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { + mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, invaliduser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockUsersApi}) + mockUsersApi.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(nil, nil, errors.New("invalid username")) + }, + existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{}}, + usernames: []string{invaliduser1}, + expectError: require.Error, + }, "succeeds with one user to be added": { mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { mockValidUser1 := mockadmin.NewMongoDBCloudUsersApi(t) @@ -110,46 +111,43 @@ func TestUpdateTeamUsers(t *testing.T) { mockValidUser1.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) - mockTeamsApi.EXPECT().AddTeamUser(mock.Anything, mock.Anything, mock.Anything, &[]admin.AddUserToTeam{{Id: validuser1}}).Return(admin.AddTeamUserApiRequest{ApiService: mockTeamsApi}) - mockTeamsApi.EXPECT().AddTeamUserExecute(mock.Anything).Return(nil, nil, nil) mockTeamsApi.EXPECT().AddTeamUser(mock.Anything, mock.Anything, mock.Anything, &[]admin.AddUserToTeam{{Id: validuser2}}).Return(admin.AddTeamUserApiRequest{ApiService: mockTeamsApi}) mockTeamsApi.EXPECT().AddTeamUserExecute(mock.Anything).Return(nil, nil, nil) }, - // existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}}}, - existingTeamUsers: &admin.PaginatedAppUser{Results: nil}, + existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}}}, usernames: []string{validuser1, validuser2}, expectError: require.NoError, }, - // "succeeds with one user to be removed": { - // mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { - // mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) - // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser2).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) - // mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) + "succeeds with one user to be removed": { + mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { + mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) + mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser2).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) + mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser2}, nil, nil) - // mockTeamsApi.EXPECT().RemoveTeamUser(mock.Anything, mock.Anything, mock.Anything, validuser1).Return(admin.RemoveTeamUserApiRequest{ApiService: mockTeamsApi}) - // mockTeamsApi.EXPECT().RemoveTeamUserExecute(mock.Anything).Return(nil, nil) - // }, - // existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}, {Id: &validuser2}}}, - // usernames: []string{validuser2}, - // expectError: require.NoError, - // }, - // "succeeds with one user to be added and the other removed": { - // mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { - // mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) - // mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) - // mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) + mockTeamsApi.EXPECT().RemoveTeamUser(mock.Anything, mock.Anything, mock.Anything, validuser1).Return(admin.RemoveTeamUserApiRequest{ApiService: mockTeamsApi}) + mockTeamsApi.EXPECT().RemoveTeamUserExecute(mock.Anything).Return(nil, nil) + }, + existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser1}, {Id: &validuser2}}}, + usernames: []string{validuser2}, + expectError: require.NoError, + }, + "succeeds with one user to be added and the other removed": { + mockFuncExpectations: func(mockTeamsApi *mockadmin.TeamsApi, mockUsersApi *mockadmin.MongoDBCloudUsersApi) { + mockValidUser2 := mockadmin.NewMongoDBCloudUsersApi(t) + mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, validuser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockValidUser2}) + mockValidUser2.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(&admin.CloudAppUser{Id: &validuser1}, nil, nil) - // addCall := mockTeamsApi.EXPECT().AddTeamUser(mock.Anything, mock.Anything, mock.Anything, &[]admin.AddUserToTeam{{Id: validuser1}}).Return(admin.AddTeamUserApiRequest{ApiService: mockTeamsApi}) - // mockTeamsApi.EXPECT().AddTeamUserExecute(mock.Anything).Return(nil, nil, nil) + addCall := mockTeamsApi.EXPECT().AddTeamUser(mock.Anything, mock.Anything, mock.Anything, &[]admin.AddUserToTeam{{Id: validuser1}}).Return(admin.AddTeamUserApiRequest{ApiService: mockTeamsApi}) + mockTeamsApi.EXPECT().AddTeamUserExecute(mock.Anything).Return(nil, nil, nil) - // removeCall := mockTeamsApi.EXPECT().RemoveTeamUser(mock.Anything, mock.Anything, mock.Anything, validuser2).Return(admin.RemoveTeamUserApiRequest{ApiService: mockTeamsApi}) - // removeCall.NotBefore(addCall.Call) // Ensures new additions are made before removing - // mockTeamsApi.EXPECT().RemoveTeamUserExecute(mock.Anything).Return(nil, nil) - // }, - // existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser2}}}, - // usernames: []string{validuser1}, - // expectError: require.NoError, - // }, + removeCall := mockTeamsApi.EXPECT().RemoveTeamUser(mock.Anything, mock.Anything, mock.Anything, validuser2).Return(admin.RemoveTeamUserApiRequest{ApiService: mockTeamsApi}) + removeCall.NotBefore(addCall.Call) // Ensures new additions are made before removing + mockTeamsApi.EXPECT().RemoveTeamUserExecute(mock.Anything).Return(nil, nil) + }, + existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{{Id: &validuser2}}}, + usernames: []string{validuser1}, + expectError: require.NoError, + }, } for _, testCase := range testCases { From aad2f70e0dd0406bf05c9f2f6df2680b2c37af91 Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Tue, 24 Dec 2024 14:51:52 +0000 Subject: [PATCH 08/10] minor --- internal/service/team/update_user_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/team/update_user_test.go b/internal/service/team/update_user_test.go index 6db87dbafa..4896f57179 100644 --- a/internal/service/team/update_user_test.go +++ b/internal/service/team/update_user_test.go @@ -98,7 +98,7 @@ func TestUpdateTeamUsers(t *testing.T) { mockUsersApi.EXPECT().GetUserByUsername(mock.Anything, invaliduser1).Return(admin.GetUserByUsernameApiRequest{ApiService: mockUsersApi}) mockUsersApi.EXPECT().GetUserByUsernameExecute(mock.Anything).Return(nil, nil, errors.New("invalid username")) }, - existingTeamUsers: &admin.PaginatedAppUser{Results: &[]admin.CloudAppUser{}}, + existingTeamUsers: &admin.PaginatedAppUser{Results: nil}, usernames: []string{invaliduser1}, expectError: require.Error, }, @@ -155,7 +155,7 @@ func TestUpdateTeamUsers(t *testing.T) { mockTeamsAPI := mockadmin.NewTeamsApi(t) mockUsersAPI := mockadmin.NewMongoDBCloudUsersApi(t) testCase.mockFuncExpectations(mockTeamsAPI, mockUsersAPI) - testCase.expectError(t, team.UpdateTeamUsers(mockTeamsAPI, mockUsersAPI, *testCase.existingTeamUsers.Results, testCase.usernames, "orgID", "teamID")) + testCase.expectError(t, team.UpdateTeamUsers(mockTeamsAPI, mockUsersAPI, testCase.existingTeamUsers.GetResults(), testCase.usernames, "orgID", "teamID")) }) } } From 2e6a2224856183857510571c649eea32f9d3354a Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Tue, 24 Dec 2024 15:47:08 +0000 Subject: [PATCH 09/10] changelog --- .changelog/2919.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.changelog/2919.txt b/.changelog/2919.txt index 8551971187..2467656b99 100644 --- a/.changelog/2919.txt +++ b/.changelog/2919.txt @@ -1,3 +1,7 @@ ```release-note:bug -data-source/mongodbatlas_team: Improves pagination in mongodbatlas_team data source +data-source/mongodbatlas_team: Fixes pagination logic when retrieved users of a team +``` + +```release-note:bug +resource/mongodbatlas_team: Fixes pagination logic when retrieved users of a team ``` From 040f973c9333edea02c5103d93fccfdac77cb29c Mon Sep 17 00:00:00 2001 From: Aastha Mahendru Date: Fri, 27 Dec 2024 10:50:03 +0000 Subject: [PATCH 10/10] minor --- internal/service/team/data_source_team.go | 8 +------- internal/service/team/resource_team.go | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/internal/service/team/data_source_team.go b/internal/service/team/data_source_team.go index 67b11533a8..1cac835c46 100644 --- a/internal/service/team/data_source_team.go +++ b/internal/service/team/data_source_team.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "net/http" "go.mongodb.org/atlas-sdk/v20241113004/admin" @@ -13,7 +12,6 @@ import ( "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/constant" "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion" - "github.com/mongodb/terraform-provider-mongodbatlas/internal/common/dsschema" "github.com/mongodb/terraform-provider-mongodbatlas/internal/config" ) @@ -87,11 +85,7 @@ func dataSourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag. return diag.FromErr(fmt.Errorf(errorTeamSetting, "name", d.Id(), err)) } - teamUsers, err := dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { - request := connV2.TeamsApi.ListTeamUsers(ctx, orgID, team.GetId()) - request = request.PageNum(pageNum) - return request.Execute() - }) + teamUsers, err := listAllTeamUsers(ctx, connV2, orgID, team.GetId()) if err != nil { return diag.FromErr(fmt.Errorf(errorTeamRead, err)) diff --git a/internal/service/team/resource_team.go b/internal/service/team/resource_team.go index 39af965eb4..ec94c47d00 100644 --- a/internal/service/team/resource_team.go +++ b/internal/service/team/resource_team.go @@ -117,11 +117,7 @@ func resourceRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Di return diag.FromErr(fmt.Errorf(errorTeamSetting, "team_id", teamID, err)) } - teamUsers, err := dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { - request := connV2.TeamsApi.ListTeamUsers(ctx, orgID, team.GetId()) - request = request.PageNum(pageNum) - return request.Execute() - }) + teamUsers, err := listAllTeamUsers(ctx, connV2, orgID, team.GetId()) if err != nil { return diag.FromErr(fmt.Errorf(errorTeamRead, err)) @@ -156,11 +152,7 @@ func resourceUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag. } if d.HasChange("usernames") { - existingUsers, err := dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { - request := connV2.TeamsApi.ListTeamUsers(ctx, orgID, teamID) - request = request.PageNum(pageNum) - return request.Execute() - }) + existingUsers, err := listAllTeamUsers(ctx, connV2, orgID, teamID) if err != nil { return diag.FromErr(fmt.Errorf(errorTeamRead, err)) @@ -260,3 +252,11 @@ func getProjectIDByTeamID(ctx context.Context, connV2 *admin.APIClient, teamID s return "", nil } + +func listAllTeamUsers(ctx context.Context, connV2 *admin.APIClient, orgID, teamID string) ([]admin.CloudAppUser, error) { + return dsschema.AllPages(ctx, func(ctx context.Context, pageNum int) (dsschema.PaginateResponse[admin.CloudAppUser], *http.Response, error) { + request := connV2.TeamsApi.ListTeamUsers(ctx, orgID, teamID) + request = request.PageNum(pageNum) + return request.Execute() + }) +}