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
res, err := r.client.UpdateDatabasePartiallyRequest(
err := r.client.UpdateDatabasePartiallyRequest(
ctx,
projectId,
region,
@ -434,12 +434,26 @@ func (r *databaseResource) Update(
ctx = core.LogResponse(ctx)
// 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 {
core.LogAndAddError(
ctx,
&resp.Diagnostics,
"Error updating database",
"Error reading database",
fmt.Sprintf("Processing API payload: %v", err),
)
return

View file

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

View file

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