fix: update database response handling and refactor role mapping
Some checks failed
CI Workflow / Check GoReleaser config (pull_request) Successful in 4s
CI Workflow / CI (pull_request) Failing after 15m11s
CI Workflow / Code coverage report (pull_request) Has been skipped
CI Workflow / Test readiness for publishing provider (pull_request) Successful in 19m5s

This commit is contained in:
Andre_Harms 2026-02-11 16:27:47 +01:00
parent 8b2d76482b
commit 9f07e3021e
3 changed files with 49 additions and 35 deletions

View file

@ -419,7 +419,7 @@ func (r *databaseResource) Update(
} }
// Update existing database // Update existing database
res, err := r.client.UpdateDatabasePartiallyRequest( err := r.client.UpdateDatabasePartiallyRequest(
ctx, ctx,
projectId, projectId,
region, region,
@ -434,12 +434,26 @@ func (r *databaseResource) Update(
ctx = core.LogResponse(ctx) ctx = core.LogResponse(ctx)
// Map response body to schema // Map response body to schema
err = mapResourceFields(res.Database, &model) databaseResp, err := getDatabaseById(ctx, r.client, projectId, region, instanceId, databaseId64)
if err != nil {
oapiErr, ok := err.(*oapierror.GenericOpenAPIError) //nolint:errorlint //complaining that error.As should be used to catch wrapped errors, but this error should not be wrapped
if (ok && oapiErr.StatusCode == http.StatusNotFound) || errors.Is(err, errDatabaseNotFound) {
resp.State.RemoveResource(ctx)
return
}
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading database", fmt.Sprintf("Calling API: %v", err))
return
}
ctx = core.LogResponse(ctx)
// Map response body to schema
err = mapResourceFields(databaseResp, &model)
if err != nil { if err != nil {
core.LogAndAddError( core.LogAndAddError(
ctx, ctx,
&resp.Diagnostics, &resp.Diagnostics,
"Error updating database", "Error reading database",
fmt.Sprintf("Processing API payload: %v", err), fmt.Sprintf("Processing API payload: %v", err),
) )
return return

View file

@ -42,7 +42,7 @@ func TestMapDataSourceFields(t *testing.T) {
"simple_values", "simple_values",
&sqlserverflexalpha.GetUserResponse{ &sqlserverflexalpha.GetUserResponse{
Roles: &[]sqlserverflexalpha.UserRole{ Roles: &[]string{
"role_1", "role_1",
"role_2", "role_2",
"", "",
@ -79,7 +79,7 @@ func TestMapDataSourceFields(t *testing.T) {
"null_fields_and_int_conversions", "null_fields_and_int_conversions",
&sqlserverflexalpha.GetUserResponse{ &sqlserverflexalpha.GetUserResponse{
Id: utils.Ptr(int64(1)), Id: utils.Ptr(int64(1)),
Roles: &[]sqlserverflexalpha.UserRole{}, Roles: &[]string{},
Username: nil, Username: nil,
Host: nil, Host: nil,
Port: utils.Ptr(int64(2123456789)), Port: utils.Ptr(int64(2123456789)),
@ -180,7 +180,7 @@ func TestMapFieldsCreate(t *testing.T) {
"simple_values", "simple_values",
&sqlserverflexalpha.CreateUserResponse{ &sqlserverflexalpha.CreateUserResponse{
Id: utils.Ptr(int64(2)), Id: utils.Ptr(int64(2)),
Roles: &[]sqlserverflexalpha.UserRole{ Roles: &[]string{
"role_1", "role_1",
"role_2", "role_2",
"", "",
@ -221,7 +221,7 @@ func TestMapFieldsCreate(t *testing.T) {
"null_fields_and_int_conversions", "null_fields_and_int_conversions",
&sqlserverflexalpha.CreateUserResponse{ &sqlserverflexalpha.CreateUserResponse{
Id: utils.Ptr(int64(3)), Id: utils.Ptr(int64(3)),
Roles: &[]sqlserverflexalpha.UserRole{}, Roles: &[]string{},
Username: nil, Username: nil,
Password: utils.Ptr(""), Password: utils.Ptr(""),
Host: nil, Host: nil,
@ -329,7 +329,7 @@ func TestMapFields(t *testing.T) {
{ {
"simple_values", "simple_values",
&sqlserverflexalpha.GetUserResponse{ &sqlserverflexalpha.GetUserResponse{
Roles: &[]sqlserverflexalpha.UserRole{ Roles: &[]string{
"role_1", "role_1",
"role_2", "role_2",
"", "",
@ -364,7 +364,7 @@ func TestMapFields(t *testing.T) {
"null_fields_and_int_conversions", "null_fields_and_int_conversions",
&sqlserverflexalpha.GetUserResponse{ &sqlserverflexalpha.GetUserResponse{
Id: utils.Ptr(int64(1)), Id: utils.Ptr(int64(1)),
Roles: &[]sqlserverflexalpha.UserRole{}, Roles: &[]string{},
Username: nil, Username: nil,
Host: nil, Host: nil,
Port: utils.Ptr(int64(2123456789)), Port: utils.Ptr(int64(2123456789)),
@ -435,16 +435,16 @@ func TestToCreatePayload(t *testing.T) {
tests := []struct { tests := []struct {
description string description string
input *resourceModel input *resourceModel
inputRoles []sqlserverflexalpha.UserRole inputRoles []string
expected *sqlserverflexalpha.CreateUserRequestPayload expected *sqlserverflexalpha.CreateUserRequestPayload
isValid bool isValid bool
}{ }{
{ {
"default_values", "default_values",
&resourceModel{}, &resourceModel{},
[]sqlserverflexalpha.UserRole{}, []string{},
&sqlserverflexalpha.CreateUserRequestPayload{ &sqlserverflexalpha.CreateUserRequestPayload{
Roles: &[]sqlserverflexalpha.UserRole{}, Roles: &[]string{},
Username: nil, Username: nil,
}, },
true, true,
@ -454,12 +454,12 @@ func TestToCreatePayload(t *testing.T) {
&resourceModel{ &resourceModel{
Username: types.StringValue("username"), Username: types.StringValue("username"),
}, },
[]sqlserverflexalpha.UserRole{ []string{
"role_1", "role_1",
"role_2", "role_2",
}, },
&sqlserverflexalpha.CreateUserRequestPayload{ &sqlserverflexalpha.CreateUserRequestPayload{
Roles: &[]sqlserverflexalpha.UserRole{ Roles: &[]string{
"role_1", "role_1",
"role_2", "role_2",
}, },
@ -472,11 +472,11 @@ func TestToCreatePayload(t *testing.T) {
&resourceModel{ &resourceModel{
Username: types.StringNull(), Username: types.StringNull(),
}, },
[]sqlserverflexalpha.UserRole{ []string{
"", "",
}, },
&sqlserverflexalpha.CreateUserRequestPayload{ &sqlserverflexalpha.CreateUserRequestPayload{
Roles: &[]sqlserverflexalpha.UserRole{ Roles: &[]string{
"", "",
}, },
Username: nil, Username: nil,
@ -486,7 +486,7 @@ func TestToCreatePayload(t *testing.T) {
{ {
"nil_model", "nil_model",
nil, nil,
[]sqlserverflexalpha.UserRole{}, []string{},
nil, nil,
false, false,
}, },
@ -495,9 +495,9 @@ func TestToCreatePayload(t *testing.T) {
&resourceModel{ &resourceModel{
Username: types.StringValue("username"), Username: types.StringValue("username"),
}, },
[]sqlserverflexalpha.UserRole{}, []string{},
&sqlserverflexalpha.CreateUserRequestPayload{ &sqlserverflexalpha.CreateUserRequestPayload{
Roles: &[]sqlserverflexalpha.UserRole{}, Roles: &[]string{},
Username: utils.Ptr("username"), Username: utils.Ptr("username"),
}, },
true, true,

View file

@ -42,7 +42,7 @@ func TestMapDataSourceFields(t *testing.T) {
"simple_values", "simple_values",
&sqlserverflexbeta.GetUserResponse{ &sqlserverflexbeta.GetUserResponse{
Roles: &[]sqlserverflexbeta.UserRole{ Roles: &[]string{
"role_1", "role_1",
"role_2", "role_2",
"", "",
@ -81,7 +81,7 @@ func TestMapDataSourceFields(t *testing.T) {
"null_fields_and_int_conversions", "null_fields_and_int_conversions",
&sqlserverflexbeta.GetUserResponse{ &sqlserverflexbeta.GetUserResponse{
Id: utils.Ptr(int64(1)), Id: utils.Ptr(int64(1)),
Roles: &[]sqlserverflexbeta.UserRole{}, Roles: &[]string{},
Username: nil, Username: nil,
Host: nil, Host: nil,
Port: utils.Ptr(int64(2123456789)), Port: utils.Ptr(int64(2123456789)),
@ -182,7 +182,7 @@ func TestMapFieldsCreate(t *testing.T) {
"simple_values", "simple_values",
&sqlserverflexbeta.CreateUserResponse{ &sqlserverflexbeta.CreateUserResponse{
Id: utils.Ptr(int64(2)), Id: utils.Ptr(int64(2)),
Roles: &[]sqlserverflexbeta.UserRole{ Roles: &[]string{
"role_1", "role_1",
"role_2", "role_2",
"", "",
@ -223,7 +223,7 @@ func TestMapFieldsCreate(t *testing.T) {
"null_fields_and_int_conversions", "null_fields_and_int_conversions",
&sqlserverflexbeta.CreateUserResponse{ &sqlserverflexbeta.CreateUserResponse{
Id: utils.Ptr(int64(3)), Id: utils.Ptr(int64(3)),
Roles: &[]sqlserverflexbeta.UserRole{}, Roles: &[]string{},
Username: nil, Username: nil,
Password: utils.Ptr(""), Password: utils.Ptr(""),
Host: nil, Host: nil,
@ -331,7 +331,7 @@ func TestMapFields(t *testing.T) {
{ {
"simple_values", "simple_values",
&sqlserverflexbeta.GetUserResponse{ &sqlserverflexbeta.GetUserResponse{
Roles: &[]sqlserverflexbeta.UserRole{ Roles: &[]string{
"role_1", "role_1",
"role_2", "role_2",
"", "",
@ -366,7 +366,7 @@ func TestMapFields(t *testing.T) {
"null_fields_and_int_conversions", "null_fields_and_int_conversions",
&sqlserverflexbeta.GetUserResponse{ &sqlserverflexbeta.GetUserResponse{
Id: utils.Ptr(int64(1)), Id: utils.Ptr(int64(1)),
Roles: &[]sqlserverflexbeta.UserRole{}, Roles: &[]string{},
Username: nil, Username: nil,
Host: nil, Host: nil,
Port: utils.Ptr(int64(2123456789)), Port: utils.Ptr(int64(2123456789)),
@ -437,16 +437,16 @@ func TestToCreatePayload(t *testing.T) {
tests := []struct { tests := []struct {
description string description string
input *resourceModel input *resourceModel
inputRoles []sqlserverflexbeta.UserRole inputRoles []string
expected *sqlserverflexbeta.CreateUserRequestPayload expected *sqlserverflexbeta.CreateUserRequestPayload
isValid bool isValid bool
}{ }{
{ {
"default_values", "default_values",
&resourceModel{}, &resourceModel{},
[]sqlserverflexbeta.UserRole{}, []string{},
&sqlserverflexbeta.CreateUserRequestPayload{ &sqlserverflexbeta.CreateUserRequestPayload{
Roles: &[]sqlserverflexbeta.UserRole{}, Roles: &[]string{},
Username: nil, Username: nil,
}, },
true, true,
@ -456,12 +456,12 @@ func TestToCreatePayload(t *testing.T) {
&resourceModel{ &resourceModel{
Username: types.StringValue("username"), Username: types.StringValue("username"),
}, },
[]sqlserverflexbeta.UserRole{ []string{
"role_1", "role_1",
"role_2", "role_2",
}, },
&sqlserverflexbeta.CreateUserRequestPayload{ &sqlserverflexbeta.CreateUserRequestPayload{
Roles: &[]sqlserverflexbeta.UserRole{ Roles: &[]string{
"role_1", "role_1",
"role_2", "role_2",
}, },
@ -474,11 +474,11 @@ func TestToCreatePayload(t *testing.T) {
&resourceModel{ &resourceModel{
Username: types.StringNull(), Username: types.StringNull(),
}, },
[]sqlserverflexbeta.UserRole{ []string{
"", "",
}, },
&sqlserverflexbeta.CreateUserRequestPayload{ &sqlserverflexbeta.CreateUserRequestPayload{
Roles: &[]sqlserverflexbeta.UserRole{ Roles: &[]string{
"", "",
}, },
Username: nil, Username: nil,
@ -488,7 +488,7 @@ func TestToCreatePayload(t *testing.T) {
{ {
"nil_model", "nil_model",
nil, nil,
[]sqlserverflexbeta.UserRole{}, []string{},
nil, nil,
false, false,
}, },
@ -497,9 +497,9 @@ func TestToCreatePayload(t *testing.T) {
&resourceModel{ &resourceModel{
Username: types.StringValue("username"), Username: types.StringValue("username"),
}, },
[]sqlserverflexbeta.UserRole{}, []string{},
&sqlserverflexbeta.CreateUserRequestPayload{ &sqlserverflexbeta.CreateUserRequestPayload{
Roles: &[]sqlserverflexbeta.UserRole{}, Roles: &[]string{},
Username: utils.Ptr("username"), Username: utils.Ptr("username"),
}, },
true, true,