Skip to content

Commit e30c188

Browse files
pieternnfx
authored andcommitted
Add more widget tests
1 parent 3ee12ce commit e30c188

File tree

2 files changed

+334
-15
lines changed

2 files changed

+334
-15
lines changed

sqlanalytics/resource_widget.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"sort"
78
"strconv"
89

910
"github.com/databrickslabs/terraform-provider-databricks/common"
@@ -41,6 +42,20 @@ type WidgetParameter struct {
4142
Values []string `json:"values,omitempty"`
4243
}
4344

45+
type sortWidgetParameter []WidgetParameter
46+
47+
func (a sortWidgetParameter) Len() int {
48+
return len(a)
49+
}
50+
51+
func (a sortWidgetParameter) Swap(i, j int) {
52+
a[i], a[j] = a[j], a[i]
53+
}
54+
55+
func (a sortWidgetParameter) Less(i, j int) bool {
56+
return a[i].Name < a[j].Name
57+
}
58+
4459
func (w *WidgetEntity) toAPIObject(schema map[string]*schema.Schema, data *schema.ResourceData) (*api.Widget, error) {
4560
var aw api.Widget
4661

@@ -127,6 +142,51 @@ func (w *WidgetEntity) fromAPIObject(aw *api.Widget, schema map[string]*schema.S
127142
}
128143
}
129144

145+
w.Parameter = make([]WidgetParameter, 0, len(aw.Options.ParameterMapping))
146+
for _, p := range aw.Options.ParameterMapping {
147+
wp := WidgetParameter{
148+
Name: p.Name,
149+
Type: p.Type,
150+
MapTo: p.MapTo,
151+
Title: p.Title,
152+
}
153+
154+
// Re-marshal value so we can try to unmarshal different types.
155+
// We don't know about the type it holds, because it depends
156+
// on the parameter's type, which we don't have access to.
157+
b, err := json.Marshal(p.Value)
158+
if err != nil {
159+
return err
160+
}
161+
162+
// Try unmarshalling `string`.
163+
{
164+
var v string
165+
err := json.Unmarshal(b, &v)
166+
if err == nil {
167+
wp.Value = v
168+
w.Parameter = append(w.Parameter, wp)
169+
continue
170+
}
171+
}
172+
173+
// Try unmarshalling `[]string`.
174+
{
175+
var vs []string
176+
err := json.Unmarshal(b, &vs)
177+
if err == nil {
178+
wp.Values = vs
179+
w.Parameter = append(w.Parameter, wp)
180+
continue
181+
}
182+
}
183+
184+
return fmt.Errorf("Unable to derive type from message: %v", string(b))
185+
}
186+
187+
// Sort parameters by their name for deterministic order.
188+
sort.Sort(sortWidgetParameter(w.Parameter))
189+
130190
// Pass to ResourceData.
131191
if err := common.StructToData(*w, schema, data); err != nil {
132192
return err

0 commit comments

Comments
 (0)