From 3b58d2031f595af0ec7f62bbac54c7d530001873 Mon Sep 17 00:00:00 2001 From: wgroeneveld Date: Sun, 9 May 2021 20:52:07 +0200 Subject: [PATCH] json encoding of result: [] instead of null if empty --- app/mf/microformats.go | 13 ++++++++--- app/mf/microformats_test.go | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/app/mf/microformats.go b/app/mf/microformats.go index d61de58..9e34431 100644 --- a/app/mf/microformats.go +++ b/app/mf/microformats.go @@ -50,17 +50,24 @@ type IndiewebDataResult struct { } func ResultFailure(data []*IndiewebData) IndiewebDataResult { - return IndiewebDataResult{ + return emptyNilData(IndiewebDataResult{ Status: "failure", Data: data, - } + }) } func ResultSuccess(data []*IndiewebData) IndiewebDataResult { - return IndiewebDataResult{ + return emptyNilData(IndiewebDataResult{ Status: "success", Data: data, + }) +} + +func emptyNilData(result IndiewebDataResult) IndiewebDataResult { + if result.Data == nil { + result.Data = make([]*IndiewebData, 0) } + return result } type IndiewebData struct { diff --git a/app/mf/microformats_test.go b/app/mf/microformats_test.go index b2cc509..bc435c9 100644 --- a/app/mf/microformats_test.go +++ b/app/mf/microformats_test.go @@ -2,12 +2,55 @@ package mf import ( "brainbaking.com/go-jamming/common" + "encoding/json" "github.com/stretchr/testify/assert" "testing" "time" "willnorris.com/go/microformats" ) +func TestResultSuccessNonEmpty(t *testing.T) { + arr := make([]*IndiewebData, 1) + arr[0] = &IndiewebData{Author: IndiewebAuthor{Name: "Jaak"}} + + data := ResultSuccess(arr) + jsonData, err := json.Marshal(data) + assert.NoError(t, err) + + expected := `{"status":"success","json":[{"author":{"name":"Jaak","picture":""},"name":"","content":"","published":"","url":"","type":"","source":"","target":""}]}` + assert.Equal(t, expected, string(jsonData)) +} + +func TestResultSuccessEmptyEncodesAsEmptyJSONArray(t *testing.T) { + data := ResultSuccess(nil) + jsonData, err := json.Marshal(data) + assert.NoError(t, err) + + expected := `{"status":"success","json":[]}` + assert.Equal(t, expected, string(jsonData)) +} + +func TestResultFailureNonEmpty(t *testing.T) { + arr := make([]*IndiewebData, 1) + arr[0] = &IndiewebData{Author: IndiewebAuthor{Name: "Jaak"}} + + data := ResultFailure(arr) + jsonData, err := json.Marshal(data) + assert.NoError(t, err) + + expected := `{"status":"failure","json":[{"author":{"name":"Jaak","picture":""},"name":"","content":"","published":"","url":"","type":"","source":"","target":""}]}` + assert.Equal(t, expected, string(jsonData)) +} + +func TestResultFailureEmptyEncodesAsEmptyJSONArray(t *testing.T) { + data := ResultFailure(nil) + jsonData, err := json.Marshal(data) + assert.NoError(t, err) + + expected := `{"status":"failure","json":[]}` + assert.Equal(t, expected, string(jsonData)) +} + func TestPublished(t *testing.T) { cases := []struct { label string