Skip to content

Commit

Permalink
fix(fw): assert WithGetSchema interface extension
Browse files Browse the repository at this point in the history
  • Loading branch information
jar-b committed Dec 1, 2022
1 parent 68fcd28 commit e7cb881
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
14 changes: 11 additions & 3 deletions internal/acctest/framework.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package acctest

import (
"context"
"errors"
"fmt"
"log"
"strings"

"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/path"
fwresource "github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/tfsdk"
Expand All @@ -29,10 +31,16 @@ func DeleteFrameworkResource(factory func(context.Context) (fwresource.ResourceW

resource.Configure(ctx, fwresource.ConfigureRequest{ProviderData: meta}, &fwresource.ConfigureResponse{})

schema, diags := resource.GetSchema(ctx)
var schema tfsdk.Schema
var diags diag.Diagnostics
if v, ok := resource.(fwresource.ResourceWithGetSchema); ok {
schema, diags = v.GetSchema(ctx)

if diags.HasError() {
return fwdiag.DiagnosticsError(diags)
if diags.HasError() {
return fwdiag.DiagnosticsError(diags)
}
} else {
return errors.New("resource does not implement GetSchema method")
}

// Construct a simple Framework State that contains just top-level attributes.
Expand Down
22 changes: 20 additions & 2 deletions internal/provider/fwprovider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,16 @@ func (w *wrappedDataSource) Metadata(ctx context.Context, request datasource.Met
}

func (w *wrappedDataSource) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnostics) {
return w.inner.GetSchema(ctx)
if v, ok := w.inner.(datasource.DataSourceWithGetSchema); ok {
return v.GetSchema(ctx)
}

var diags diag.Diagnostics
diags.AddError(
"DataSource GetSchema Not Implemented",
"This data source does not support get schema. Please contact the provider developer for additional information.",
)
return tfsdk.Schema{}, diags
}

func (w *wrappedDataSource) Read(ctx context.Context, request datasource.ReadRequest, response *datasource.ReadResponse) {
Expand Down Expand Up @@ -434,7 +443,16 @@ func (w *wrappedResource) Metadata(ctx context.Context, request resource.Metadat
}

func (w *wrappedResource) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnostics) {
return w.inner.GetSchema(ctx)
if v, ok := w.inner.(resource.ResourceWithGetSchema); ok {
return v.GetSchema(ctx)
}

var diags diag.Diagnostics
diags.AddError(
"Resource GetSchema Not Implemented",
"This resource does not support get schema. Please contact the provider developer for additional information.",
)
return tfsdk.Schema{}, diags
}

func (w *wrappedResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) {
Expand Down

0 comments on commit e7cb881

Please sign in to comment.