Skip to content

Commit d1ac163

Browse files
tests: Add tests for form data
1 parent f7c83c5 commit d1ac163

1 file changed

Lines changed: 148 additions & 0 deletions

File tree

internal/pkg/service/stream/mapping/table/column/renderer_test.go

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,154 @@ func TestRenderer_Path_FormData_Full(t *testing.T) {
302302
assert.Equal(t, `{"key1":"bar1","key2":["bar2","bar3"]}`, val)
303303
}
304304

305+
func TestRenderer_Path_FormData_Scalar(t *testing.T) {
306+
t.Parallel()
307+
308+
renderer := column.NewRenderer()
309+
c := column.Path{
310+
Path: "key1",
311+
}
312+
313+
body := `key1=bar1&key2[]=bar2&key2[]=bar3`
314+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
315+
316+
val, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
317+
assert.NoError(t, err)
318+
assert.Equal(t, `"bar1"`, val)
319+
}
320+
321+
func TestRenderer_Path_FormData_RawString(t *testing.T) {
322+
t.Parallel()
323+
324+
renderer := column.NewRenderer()
325+
c := column.Path{
326+
Path: "key1",
327+
RawString: true,
328+
}
329+
330+
body := `key1=42`
331+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
332+
333+
val, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
334+
assert.NoError(t, err)
335+
assert.Equal(t, `42`, val)
336+
}
337+
338+
func TestRenderer_Path_FormData_Object(t *testing.T) {
339+
t.Parallel()
340+
341+
renderer := column.NewRenderer()
342+
c := column.Path{
343+
Path: "key",
344+
}
345+
346+
body := `key[x]=bar2&key[y]=bar3`
347+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
348+
349+
val, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
350+
assert.NoError(t, err)
351+
assert.Equal(t, `{"x":"bar2","y":"bar3"}`, val)
352+
}
353+
354+
func TestRenderer_Path_FormData_ArrayOfObjects(t *testing.T) {
355+
t.Parallel()
356+
357+
renderer := column.NewRenderer()
358+
c := column.Path{
359+
Path: "key",
360+
}
361+
362+
body := `key[0][x]=bar2&key[1][x]=bar3`
363+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
364+
365+
val, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
366+
assert.NoError(t, err)
367+
assert.Equal(t, `[{"x":"bar2"},{"x":"bar3"}]`, val)
368+
}
369+
370+
func TestRenderer_Path_FormData_ArrayIndex(t *testing.T) {
371+
t.Parallel()
372+
373+
renderer := column.NewRenderer()
374+
c := column.Path{
375+
Path: "key[1]",
376+
}
377+
378+
body := `key[0][x]=bar2&key[1][x]=bar3`
379+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
380+
381+
val, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
382+
assert.NoError(t, err)
383+
assert.Equal(t, `{"x":"bar3"}`, val)
384+
}
385+
386+
func TestRenderer_Path_FormData_UndefinedKey_Error(t *testing.T) {
387+
t.Parallel()
388+
389+
renderer := column.NewRenderer()
390+
c := column.Path{
391+
Path: "key2",
392+
}
393+
394+
body := `key[0][x]=bar2&key[1][x]=bar3`
395+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
396+
397+
_, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
398+
require.Error(t, err)
399+
assert.Equal(t, `path "key2" not found in the body`, err.Error())
400+
}
401+
402+
func TestRenderer_Path_FormData_UndefinedIndex_Error(t *testing.T) {
403+
t.Parallel()
404+
405+
renderer := column.NewRenderer()
406+
c := column.Path{
407+
Path: "key[2]",
408+
}
409+
410+
body := `key[0][x]=bar2&key[1][x]=bar3`
411+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
412+
413+
_, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
414+
require.Error(t, err)
415+
assert.Equal(t, `path "key[2]" not found in the body`, err.Error())
416+
}
417+
418+
func TestRenderer_Path_FormData_UndefinedKey_DefaultValue(t *testing.T) {
419+
t.Parallel()
420+
421+
renderer := column.NewRenderer()
422+
c := column.Path{
423+
Path: "key2",
424+
DefaultValue: ptr.Ptr("123"),
425+
}
426+
427+
body := `key[0][x]=bar2&key[1][x]=bar3`
428+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
429+
430+
val, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
431+
assert.NoError(t, err)
432+
assert.Equal(t, `"123"`, val)
433+
}
434+
435+
func TestRenderer_Path_FormData_UndefinedKey_DefaultValue_RawString(t *testing.T) {
436+
t.Parallel()
437+
438+
renderer := column.NewRenderer()
439+
c := column.Path{
440+
Path: "key2",
441+
DefaultValue: ptr.Ptr("123"),
442+
RawString: true,
443+
}
444+
445+
body := `key[0][x]=bar2&key[1][x]=bar3`
446+
header := http.Header{"Content-Type": []string{"application/x-www-form-urlencoded"}}
447+
448+
val, err := renderer.CSVValue(c, recordctx.FromHTTP(time.Now(), &http.Request{Header: header, Body: io.NopCloser(strings.NewReader(body))}))
449+
assert.NoError(t, err)
450+
assert.Equal(t, `123`, val)
451+
}
452+
305453
func TestRenderer_Template_Json_Scalar(t *testing.T) {
306454
t.Parallel()
307455

0 commit comments

Comments
 (0)