Skip to content

Commit a2ea83a

Browse files
author
Cristina Sánchez Sánchez
committed
Changed Update to read from API
1 parent 866306d commit a2ea83a

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

internal/service/clouduserprojectassignment/model.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,8 @@ func NewProjectUserReq(ctx context.Context, plan *TFModel) (*admin.GroupUserRequ
5050
return &addProjectUserReq, nil
5151
}
5252

53-
func NewAtlasUpdateReq(ctx context.Context, plan, state *TFModel) (addRequests, removeRequests []*admin.AddOrRemoveGroupRole, diags diag.Diagnostics) {
54-
var currentRoles, desiredRoles []string
55-
if !state.Roles.IsNull() && !state.Roles.IsUnknown() {
56-
currentRoles = conversion.TypesSetToString(ctx, state.Roles)
57-
}
53+
func NewAtlasUpdateReq(ctx context.Context, plan *TFModel, currentRoles []string) (addRequests, removeRequests []*admin.AddOrRemoveGroupRole, diags diag.Diagnostics) {
54+
var desiredRoles []string
5855
if !plan.Roles.IsNull() && !plan.Roles.IsUnknown() {
5956
desiredRoles = conversion.TypesSetToString(ctx, plan.Roles)
6057
}

internal/service/clouduserprojectassignment/model_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,9 @@ func TestNewAtlasUpdateReq(t *testing.T) {
260260

261261
for _, tt := range tests {
262262
t.Run(tt.name, func(t *testing.T) {
263-
stateRoles, _ := types.SetValueFrom(ctx, types.StringType, tt.args.stateRoles)
264263
planRoles, _ := types.SetValueFrom(ctx, types.StringType, tt.args.planRoles)
265264

266-
state := &clouduserprojectassignment.TFModel{Roles: stateRoles}
265+
state := tt.args.stateRoles
267266
plan := &clouduserprojectassignment.TFModel{Roles: planRoles}
268267

269268
addReqs, removeReqs, diags := clouduserprojectassignment.NewAtlasUpdateReq(ctx, plan, state)

internal/service/clouduserprojectassignment/resource.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ func (r *rs) Read(ctx context.Context, req resource.ReadRequest, resp *resource.
140140
func (r *rs) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
141141
var plan TFModel
142142
var state TFModel
143+
var err error
143144
resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...)
144145
resp.Diagnostics.Append(req.State.Get(ctx, &state)...)
145146
if resp.Diagnostics.HasError() {
@@ -151,7 +152,13 @@ func (r *rs) Update(ctx context.Context, req resource.UpdateRequest, resp *resou
151152
userID := plan.UserId.ValueString()
152153
username := plan.Username.ValueString()
153154

154-
addRequests, removeRequests, diags := NewAtlasUpdateReq(ctx, &plan, &state)
155+
userInfo, _, err := connV2.MongoDBCloudUsersApi.GetProjectUser(ctx, projectID, userID).Execute() // Fetch current user roles from API (more reliable than state)
156+
if err != nil {
157+
resp.Diagnostics.AddError(fmt.Sprintf("error fetching user(%s) from ProjectID(%s):", username, projectID), err.Error())
158+
return
159+
}
160+
161+
addRequests, removeRequests, diags := NewAtlasUpdateReq(ctx, &plan, userInfo.GetRoles())
155162
resp.Diagnostics.Append(diags...)
156163
if resp.Diagnostics.HasError() {
157164
return
@@ -180,7 +187,7 @@ func (r *rs) Update(ctx context.Context, req resource.UpdateRequest, resp *resou
180187
}
181188

182189
var userResp *admin.GroupUserResponse
183-
var err error
190+
184191
if !state.UserId.IsNull() && state.UserId.ValueString() != "" {
185192
userID := state.UserId.ValueString()
186193
userResp, _, err = connV2.MongoDBCloudUsersApi.GetProjectUser(ctx, projectID, userID).Execute()

0 commit comments

Comments
 (0)