From 70ad46133f123750edd3fa62bea229c083b8af26 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Wed, 24 Oct 2018 15:17:21 +0200 Subject: [PATCH] Fix JSON result of empty array (#5154) --- models/user_heatmap.go | 7 ++--- models/user_heatmap_test.go | 51 +++++++++++++++++++++++++------------ 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/models/user_heatmap.go b/models/user_heatmap.go index 8482cba2d5..a86ae39fce 100644 --- a/models/user_heatmap.go +++ b/models/user_heatmap.go @@ -16,7 +16,8 @@ type UserHeatmapData struct { } // GetUserHeatmapDataByUser returns an array of UserHeatmapData -func GetUserHeatmapDataByUser(user *User) (hdata []*UserHeatmapData, err error) { +func GetUserHeatmapDataByUser(user *User) ([]*UserHeatmapData, error) { + hdata := make([]*UserHeatmapData, 0) var groupBy string switch { case setting.UseSQLite3: @@ -29,12 +30,12 @@ func GetUserHeatmapDataByUser(user *User) (hdata []*UserHeatmapData, err error) groupBy = "dateadd(DAY,0, datediff(day,0, dateadd(s, created_unix, '19700101')))" } - err = x.Select(groupBy+" as timestamp, count(user_id) as contributions"). + err := x.Select(groupBy+" as timestamp, count(user_id) as contributions"). Table("action"). Where("user_id = ?", user.ID). And("created_unix > ?", (util.TimeStampNow() - 31536000)). GroupBy("timestamp"). OrderBy("timestamp"). Find(&hdata) - return + return hdata, err } diff --git a/models/user_heatmap_test.go b/models/user_heatmap_test.go index aeea427499..a71202d857 100644 --- a/models/user_heatmap_test.go +++ b/models/user_heatmap_test.go @@ -5,29 +5,48 @@ package models import ( - "github.com/stretchr/testify/assert" + "encoding/json" "testing" + + "github.com/stretchr/testify/assert" ) func TestGetUserHeatmapDataByUser(t *testing.T) { + testCases := []struct { + userID int64 + CountResult int + JSONResult string + }{ + {2, 1, `[{"timestamp":1540080000,"contributions":1}]`}, + {3, 0, `[]`}, + } // Prepare assert.NoError(t, PrepareTestDatabase()) - // Insert some action - user := AssertExistsAndLoadBean(t, &User{ID: 2}).(*User) + for _, tc := range testCases { - // get the action for comparison - actions, err := GetFeeds(GetFeedsOptions{ - RequestedUser: user, - RequestingUserID: user.ID, - IncludePrivate: true, - OnlyPerformedBy: false, - IncludeDeleted: true, - }) - assert.NoError(t, err) + // Insert some action + user := AssertExistsAndLoadBean(t, &User{ID: tc.userID}).(*User) - // Get the heatmap and compare - heatmap, err := GetUserHeatmapDataByUser(user) - assert.NoError(t, err) - assert.Equal(t, len(actions), len(heatmap)) + // get the action for comparison + actions, err := GetFeeds(GetFeedsOptions{ + RequestedUser: user, + RequestingUserID: user.ID, + IncludePrivate: true, + OnlyPerformedBy: false, + IncludeDeleted: true, + }) + assert.NoError(t, err) + + // Get the heatmap and compare + heatmap, err := GetUserHeatmapDataByUser(user) + assert.NoError(t, err) + assert.Equal(t, len(actions), len(heatmap)) + assert.Equal(t, tc.CountResult, len(heatmap)) + + //Test JSON rendering + jsonData, err := json.Marshal(heatmap) + assert.NoError(t, err) + assert.Equal(t, tc.JSONResult, string(jsonData)) + } }