@@ -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+
305453func TestRenderer_Template_Json_Scalar (t * testing.T ) {
306454 t .Parallel ()
307455
0 commit comments