Skip to content

Commit 7cd8b74

Browse files
committed
test(lib): add dynamic render tests, param validation
1 parent ef06599 commit 7cd8b74

File tree

2 files changed

+83
-4
lines changed

2 files changed

+83
-4
lines changed

lib/render.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,40 @@ func (RenderRequests) CoreRequestsName() string { return "render" }
4141
type RenderParams struct {
4242
// Ref is a string reference to the dataset to render
4343
Ref string
44-
// Optionally pass an entire dataset in for rendering, overrides ref param
44+
// Optionally pass an entire dataset in for rendering, if providing a dataset,
45+
// the Ref field must be empty
4546
Dataset *dataset.Dataset
4647
// Optional template override
47-
Template []byte
48-
UseFSI bool
48+
Template []byte
49+
// If true,
50+
UseFSI bool
51+
// Output format. defaults to "html"
4952
OutFormat string
5053
}
5154

55+
// Validate checks if render parameters are valid
56+
func (p *RenderParams) Validate() error {
57+
if p.Ref != "" && p.Dataset != nil {
58+
return fmt.Errorf("cannot provide both a reference and a dataset to render")
59+
}
60+
return nil
61+
}
62+
5263
// RenderViz renders a viz component as html
5364
func (r *RenderRequests) RenderViz(p *RenderParams, res *[]byte) (err error) {
5465
if r.cli != nil {
5566
return r.cli.Call("RenderRequests.RenderViz", p, res)
5667
}
5768
ctx := context.TODO()
5869

70+
if err = p.Validate(); err != nil {
71+
return err
72+
}
73+
74+
if p.Dataset != nil {
75+
return fmt.Errorf("rendering dynamic dataset viz component is not supported")
76+
}
77+
5978
var ref reporef.DatasetRef
6079
if ref, err = repo.ParseDatasetRef(p.Ref); err != nil {
6180
return
@@ -78,6 +97,10 @@ func (r *RenderRequests) RenderReadme(p *RenderParams, res *string) (err error)
7897
}
7998
ctx := context.TODO()
8099

100+
if err = p.Validate(); err != nil {
101+
return err
102+
}
103+
81104
var ds *dataset.Dataset
82105
if p.Dataset != nil {
83106
ds = p.Dataset

lib/render_test.go

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func TestNewRenderRequests(t *testing.T) {
4646
t.Errorf("invalid requests name. expected: '%s', got: '%s'", "render", reqs.CoreRequestsName())
4747
}
4848

49-
// this should panic:
49+
// this should panic, triggering the defer statement above
5050
NewRenderRequests(tr, rpc.NewClient(conn))
5151
}
5252

@@ -176,6 +176,35 @@ func (r *renderTestRunner) Save(ref string, ds *dataset.Dataset, bodyPath string
176176
}
177177
}
178178

179+
func TestRenderRequestsRenderViz(t *testing.T) {
180+
runner := newRenderTestRunner(t, "render_viz")
181+
defer runner.Delete()
182+
183+
params := RenderParams{
184+
Ref: "foo/bar",
185+
Dataset: &dataset.Dataset{
186+
Readme: &dataset.Readme{
187+
ScriptBytes: []byte("# hi\n\nhello"),
188+
},
189+
},
190+
}
191+
var data []byte
192+
if err := runner.RenderReqs.RenderViz(&params, &data); err == nil {
193+
t.Errorf("expected RenderReadme with both ref & dataset to error")
194+
}
195+
196+
params = RenderParams{
197+
Dataset: &dataset.Dataset{
198+
Readme: &dataset.Readme{
199+
ScriptBytes: []byte("# hi\n\nhello"),
200+
},
201+
},
202+
}
203+
if err := runner.RenderReqs.RenderViz(&params, &data); err == nil {
204+
t.Errorf("expected attempt to dynamic-render viz to fail")
205+
}
206+
}
207+
179208
// Test that render with a readme returns an html string
180209
func TestRenderReadme(t *testing.T) {
181210
runner := newRenderTestRunner(t, "render_readme")
@@ -204,4 +233,31 @@ func TestRenderReadme(t *testing.T) {
204233
if diff := cmp.Diff(expect, text); diff != "" {
205234
t.Errorf("response mismatch (-want +got):\n%s", diff)
206235
}
236+
237+
params = RenderParams{
238+
Dataset: &dataset.Dataset{
239+
Readme: &dataset.Readme{
240+
ScriptBytes: []byte("# hi\n\nhello"),
241+
},
242+
},
243+
}
244+
if err = runner.RenderReqs.RenderReadme(&params, &text); err != nil {
245+
t.Errorf("dynamic dataset render error: %s", err)
246+
}
247+
248+
if diff := cmp.Diff(expect, text); diff != "" {
249+
t.Errorf("dynamic dataset render response mismatch (-want +got):\n%s", diff)
250+
}
251+
252+
params = RenderParams{
253+
Ref: "foo/bar",
254+
Dataset: &dataset.Dataset{
255+
Readme: &dataset.Readme{
256+
ScriptBytes: []byte("# hi\n\nhello"),
257+
},
258+
},
259+
}
260+
if err = runner.RenderReqs.RenderReadme(&params, &text); err == nil {
261+
t.Errorf("expected RenderReadme with both ref & dataset to error")
262+
}
207263
}

0 commit comments

Comments
 (0)