2018-10-23 04:57:42 +02:00
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.package models
package models
import (
2020-12-22 02:53:37 +00:00
"fmt"
2018-10-23 04:57:42 +02:00
"testing"
2021-10-18 15:12:26 -05:00
"time"
2018-10-24 15:17:21 +02:00
2021-09-19 19:49:59 +08:00
"code.gitea.io/gitea/models/db"
2021-11-12 22:36:47 +08:00
"code.gitea.io/gitea/models/unittest"
2021-07-25 00:03:58 +08:00
"code.gitea.io/gitea/modules/json"
2021-10-18 15:12:26 -05:00
"code.gitea.io/gitea/modules/timeutil"
2021-07-25 00:03:58 +08:00
2018-10-24 15:17:21 +02:00
"github.com/stretchr/testify/assert"
2018-10-23 04:57:42 +02:00
)
func TestGetUserHeatmapDataByUser ( t * testing . T ) {
2018-10-24 15:17:21 +02:00
testCases := [ ] struct {
userID int64
2020-12-22 02:53:37 +00:00
doerID int64
2018-10-24 15:17:21 +02:00
CountResult int
JSONResult string
} {
2021-06-25 12:59:25 -04:00
// self looks at action in private repo
{ 2 , 2 , 1 , ` [ { "timestamp":1603227600,"contributions":1}] ` } ,
// admin looks at action in private repo
{ 2 , 1 , 1 , ` [ { "timestamp":1603227600,"contributions":1}] ` } ,
// other user looks at action in private repo
{ 2 , 3 , 0 , ` [] ` } ,
// nobody looks at action in private repo
{ 2 , 0 , 0 , ` [] ` } ,
// collaborator looks at action in private repo
{ 16 , 15 , 1 , ` [ { "timestamp":1603267200,"contributions":1}] ` } ,
// no action action not performed by target user
{ 3 , 3 , 0 , ` [] ` } ,
// multiple actions performed with two grouped together
{ 10 , 10 , 3 , ` [ { "timestamp":1603009800,"contributions":1}, { "timestamp":1603010700,"contributions":2}] ` } ,
2018-10-24 15:17:21 +02:00
}
2018-10-23 04:57:42 +02:00
// Prepare
2021-11-12 22:36:47 +08:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2018-10-23 04:57:42 +02:00
2021-10-18 15:12:26 -05:00
// Mock time
timeutil . Set ( time . Date ( 2021 , 1 , 1 , 0 , 0 , 0 , 0 , time . UTC ) )
defer timeutil . Unset ( )
2020-12-22 02:53:37 +00:00
for i , tc := range testCases {
2021-09-19 19:49:59 +08:00
user := db . AssertExistsAndLoadBean ( t , & User { ID : tc . userID } ) . ( * User )
2018-10-24 15:17:21 +02:00
2020-12-22 02:53:37 +00:00
doer := & User { ID : tc . doerID }
2021-09-19 19:49:59 +08:00
_ , err := db . LoadBeanIfExists ( doer )
2020-12-22 02:53:37 +00:00
assert . NoError ( t , err )
if tc . doerID == 0 {
doer = nil
}
2018-10-24 15:17:21 +02:00
// get the action for comparison
actions , err := GetFeeds ( GetFeedsOptions {
2020-01-13 19:33:46 +02:00
RequestedUser : user ,
2020-12-22 02:53:37 +00:00
Actor : doer ,
2020-01-13 19:33:46 +02:00
IncludePrivate : true ,
2020-12-22 02:53:37 +00:00
OnlyPerformedBy : true ,
2020-01-13 19:33:46 +02:00
IncludeDeleted : true ,
2018-10-24 15:17:21 +02:00
} )
assert . NoError ( t , err )
// Get the heatmap and compare
2020-12-22 02:53:37 +00:00
heatmap , err := GetUserHeatmapDataByUser ( user , doer )
2021-06-25 12:59:25 -04:00
var contributions int
for _ , hm := range heatmap {
contributions += int ( hm . Contributions )
}
2018-10-24 15:17:21 +02:00
assert . NoError ( t , err )
2021-06-25 12:59:25 -04:00
assert . Len ( t , actions , contributions , "invalid action count: did the test data became too old?" )
assert . Equal ( t , tc . CountResult , contributions , fmt . Sprintf ( "testcase %d" , i ) )
2018-10-24 15:17:21 +02:00
2021-03-15 02:52:12 +08:00
// Test JSON rendering
2018-10-24 15:17:21 +02:00
jsonData , err := json . Marshal ( heatmap )
assert . NoError ( t , err )
assert . Equal ( t , tc . JSONResult , string ( jsonData ) )
}
2018-10-23 04:57:42 +02:00
}