2017-02-28 04:35:55 +03:00
// Copyright 2017 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
import (
2022-01-27 11:30:51 +03:00
"context"
2021-09-19 14:49:59 +03:00
"fmt"
2017-03-16 04:34:24 +03:00
"sort"
2021-09-19 14:49:59 +03:00
"sync"
2017-02-28 04:35:55 +03:00
"testing"
2017-07-27 04:20:38 +03:00
"time"
2017-02-28 04:35:55 +03:00
2021-09-19 14:49:59 +03:00
"code.gitea.io/gitea/models/db"
2021-12-10 04:27:50 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-12 17:36:47 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2021-11-17 15:34:35 +03:00
2017-02-28 04:35:55 +03:00
"github.com/stretchr/testify/assert"
)
func TestIssue_ReplaceLabels ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2017-02-28 04:35:55 +03:00
testSuccess := func ( issueID int64 , labelIDs [ ] int64 ) {
2021-11-16 11:53:21 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & Issue { ID : issueID } ) . ( * Issue )
2021-12-10 04:27:50 +03:00
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : issue . RepoID } ) . ( * repo_model . Repository )
2021-11-24 12:49:20 +03:00
doer := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } ) . ( * user_model . User )
2017-02-28 04:35:55 +03:00
labels := make ( [ ] * Label , len ( labelIDs ) )
for i , labelID := range labelIDs {
2021-11-16 11:53:21 +03:00
labels [ i ] = unittest . AssertExistsAndLoadBean ( t , & Label { ID : labelID , RepoID : repo . ID } ) . ( * Label )
2017-02-28 04:35:55 +03:00
}
assert . NoError ( t , issue . ReplaceLabels ( labels , doer ) )
2021-11-16 11:53:21 +03:00
unittest . AssertCount ( t , & IssueLabel { IssueID : issueID } , len ( labelIDs ) )
2017-02-28 04:35:55 +03:00
for _ , labelID := range labelIDs {
2021-11-16 11:53:21 +03:00
unittest . AssertExistsAndLoadBean ( t , & IssueLabel { IssueID : issueID , LabelID : labelID } )
2017-02-28 04:35:55 +03:00
}
}
testSuccess ( 1 , [ ] int64 { 2 } )
testSuccess ( 1 , [ ] int64 { 1 , 2 } )
testSuccess ( 1 , [ ] int64 { } )
}
2017-03-03 17:35:42 +03:00
2021-06-10 03:08:19 +03:00
func Test_GetIssueIDsByRepoID ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-06-10 03:08:19 +03:00
ids , err := GetIssueIDsByRepoID ( 1 )
assert . NoError ( t , err )
assert . Len ( t , ids , 5 )
}
2017-03-03 17:35:42 +03:00
func TestIssueAPIURL ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-16 11:53:21 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & Issue { ID : 1 } ) . ( * Issue )
2017-03-03 17:35:42 +03:00
err := issue . LoadAttributes ( )
assert . NoError ( t , err )
assert . Equal ( t , "https://try.gitea.io/api/v1/repos/user2/repo1/issues/1" , issue . APIURL ( ) )
}
2017-03-15 04:10:35 +03:00
func TestGetIssuesByIDs ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-03-14 21:52:12 +03:00
testSuccess := func ( expectedIssueIDs , nonExistentIssueIDs [ ] int64 ) {
2017-03-15 04:10:35 +03:00
issues , err := GetIssuesByIDs ( append ( expectedIssueIDs , nonExistentIssueIDs ... ) )
assert . NoError ( t , err )
actualIssueIDs := make ( [ ] int64 , len ( issues ) )
for i , issue := range issues {
actualIssueIDs [ i ] = issue . ID
}
assert . Equal ( t , expectedIssueIDs , actualIssueIDs )
}
testSuccess ( [ ] int64 { 1 , 2 , 3 } , [ ] int64 { } )
2021-11-16 11:53:21 +03:00
testSuccess ( [ ] int64 { 1 , 2 , 3 } , [ ] int64 { unittest . NonexistentID } )
2017-03-15 04:10:35 +03:00
}
2017-03-16 04:34:24 +03:00
2020-02-28 11:16:41 +03:00
func TestGetParticipantIDsByIssue ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2017-03-16 04:34:24 +03:00
2017-06-04 20:39:08 +03:00
checkParticipants := func ( issueID int64 , userIDs [ ] int ) {
2020-02-28 11:16:41 +03:00
issue , err := GetIssueByID ( issueID )
assert . NoError ( t , err )
2021-09-23 18:45:36 +03:00
participants , err := issue . getParticipantIDsByIssue ( db . GetEngine ( db . DefaultContext ) )
2017-03-16 04:34:24 +03:00
if assert . NoError ( t , err ) {
2017-06-04 20:39:08 +03:00
participantsIDs := make ( [ ] int , len ( participants ) )
2020-02-28 11:16:41 +03:00
for i , uid := range participants {
participantsIDs [ i ] = int ( uid )
2017-03-21 03:55:00 +03:00
}
2017-06-04 20:39:08 +03:00
sort . Ints ( participantsIDs )
2017-03-16 04:34:24 +03:00
sort . Ints ( userIDs )
2017-06-04 20:39:08 +03:00
assert . Equal ( t , userIDs , participantsIDs )
2017-03-16 04:34:24 +03:00
}
}
// User 1 is issue1 poster (see fixtures/issue.yml)
// User 2 only labeled issue1 (see fixtures/comment.yml)
// Users 3 and 5 made actual comments (see fixtures/comment.yml)
2017-09-16 03:18:25 +03:00
// User 3 is inactive, thus not active participant
2020-02-28 11:16:41 +03:00
checkParticipants ( 1 , [ ] int { 1 , 5 } )
2017-03-16 04:34:24 +03:00
}
2017-07-26 10:16:45 +03:00
func TestIssue_ClearLabels ( t * testing . T ) {
2021-03-14 21:52:12 +03:00
tests := [ ] struct {
2017-07-26 10:16:45 +03:00
issueID int64
doerID int64
} {
{ 1 , 2 } , // non-pull-request, has labels
{ 2 , 2 } , // pull-request, has labels
{ 3 , 2 } , // pull-request, has no labels
}
for _ , test := range tests {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-16 11:53:21 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & Issue { ID : test . issueID } ) . ( * Issue )
2021-11-24 12:49:20 +03:00
doer := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : test . doerID } ) . ( * user_model . User )
2017-07-26 10:16:45 +03:00
assert . NoError ( t , issue . ClearLabels ( doer ) )
2021-11-16 11:53:21 +03:00
unittest . AssertNotExistsBean ( t , & IssueLabel { IssueID : test . issueID } )
2017-07-26 10:16:45 +03:00
}
}
2017-07-27 04:20:38 +03:00
func TestUpdateIssueCols ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-16 11:53:21 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & Issue { } ) . ( * Issue )
2017-07-27 04:20:38 +03:00
const newTitle = "New Title for unit test"
issue . Title = newTitle
prevContent := issue . Content
issue . Content = "This should have no effect"
now := time . Now ( ) . Unix ( )
2022-01-17 21:31:58 +03:00
assert . NoError ( t , updateIssueCols ( db . DefaultContext , issue , "name" ) )
2017-07-27 04:20:38 +03:00
then := time . Now ( ) . Unix ( )
2021-11-16 11:53:21 +03:00
updatedIssue := unittest . AssertExistsAndLoadBean ( t , & Issue { ID : issue . ID } ) . ( * Issue )
2017-07-27 04:20:38 +03:00
assert . EqualValues ( t , newTitle , updatedIssue . Title )
assert . EqualValues ( t , prevContent , updatedIssue . Content )
2021-11-16 11:53:21 +03:00
unittest . AssertInt64InRange ( t , now , then , int64 ( updatedIssue . UpdatedUnix ) )
2017-07-27 04:20:38 +03:00
}
2017-12-26 02:25:16 +03:00
func TestIssues ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2017-12-26 02:25:16 +03:00
for _ , test := range [ ] struct {
Opts IssuesOptions
ExpectedIssueIDs [ ] int64
} {
{
IssuesOptions {
AssigneeID : 1 ,
SortType : "oldest" ,
} ,
[ ] int64 { 1 , 6 } ,
} ,
{
IssuesOptions {
RepoIDs : [ ] int64 { 1 , 3 } ,
SortType : "oldest" ,
2021-09-24 14:32:56 +03:00
ListOptions : db . ListOptions {
2020-01-24 22:00:29 +03:00
Page : 1 ,
PageSize : 4 ,
} ,
2017-12-26 02:25:16 +03:00
} ,
[ ] int64 { 1 , 2 , 3 , 5 } ,
} ,
{
IssuesOptions {
2019-01-23 07:10:38 +03:00
LabelIDs : [ ] int64 { 1 } ,
2021-09-24 14:32:56 +03:00
ListOptions : db . ListOptions {
2020-01-24 22:00:29 +03:00
Page : 1 ,
PageSize : 4 ,
} ,
2017-12-26 02:25:16 +03:00
} ,
2019-01-23 07:10:38 +03:00
[ ] int64 { 2 , 1 } ,
} ,
{
IssuesOptions {
LabelIDs : [ ] int64 { 1 , 2 } ,
2021-09-24 14:32:56 +03:00
ListOptions : db . ListOptions {
2020-01-24 22:00:29 +03:00
Page : 1 ,
PageSize : 4 ,
} ,
2019-01-23 07:10:38 +03:00
} ,
[ ] int64 { } , // issues with **both** label 1 and 2, none of these issues matches, TODO: add more tests
2017-12-26 02:25:16 +03:00
} ,
} {
issues , err := Issues ( & test . Opts )
assert . NoError ( t , err )
if assert . Len ( t , issues , len ( test . ExpectedIssueIDs ) ) {
for i , issue := range issues {
assert . EqualValues ( t , test . ExpectedIssueIDs [ i ] , issue . ID )
}
}
}
}
func TestGetUserIssueStats ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2017-12-26 02:25:16 +03:00
for _ , test := range [ ] struct {
Opts UserIssueStatsOptions
ExpectedIssueStats IssueStats
} {
{
UserIssueStatsOptions {
UserID : 1 ,
2019-12-02 06:50:36 +03:00
RepoIDs : [ ] int64 { 1 } ,
2017-12-26 02:25:16 +03:00
FilterMode : FilterModeAll ,
} ,
IssueStats {
2021-12-29 16:02:12 +03:00
YourRepositoriesCount : 1 , // 6
AssignCount : 1 , // 6
CreateCount : 1 , // 6
OpenCount : 1 , // 6
ClosedCount : 1 , // 1
2017-12-26 02:25:16 +03:00
} ,
} ,
{
UserIssueStatsOptions {
UserID : 1 ,
2021-12-29 16:02:12 +03:00
RepoIDs : [ ] int64 { 1 } ,
FilterMode : FilterModeAll ,
IsClosed : true ,
2017-12-26 02:25:16 +03:00
} ,
IssueStats {
2021-12-29 16:02:12 +03:00
YourRepositoriesCount : 1 , // 6
AssignCount : 0 ,
CreateCount : 0 ,
OpenCount : 1 , // 6
ClosedCount : 1 , // 1
2017-12-26 02:25:16 +03:00
} ,
} ,
{
UserIssueStatsOptions {
UserID : 1 ,
2021-12-29 16:02:12 +03:00
FilterMode : FilterModeAssign ,
2017-12-26 02:25:16 +03:00
} ,
IssueStats {
2021-12-29 16:02:12 +03:00
YourRepositoriesCount : 1 , // 6
AssignCount : 1 , // 6
CreateCount : 1 , // 6
OpenCount : 1 , // 6
2017-12-26 02:25:16 +03:00
ClosedCount : 0 ,
} ,
} ,
{
UserIssueStatsOptions {
2021-12-29 16:02:12 +03:00
UserID : 1 ,
FilterMode : FilterModeCreate ,
2017-12-26 02:25:16 +03:00
} ,
IssueStats {
2021-12-29 16:02:12 +03:00
YourRepositoriesCount : 1 , // 6
AssignCount : 1 , // 6
CreateCount : 1 , // 6
OpenCount : 1 , // 6
ClosedCount : 0 ,
2017-12-26 02:25:16 +03:00
} ,
} ,
2019-10-03 03:03:18 +03:00
{
UserIssueStatsOptions {
UserID : 1 ,
FilterMode : FilterModeMention ,
} ,
IssueStats {
2021-12-29 16:02:12 +03:00
YourRepositoriesCount : 1 , // 6
AssignCount : 1 , // 6
CreateCount : 1 , // 6
MentionCount : 0 ,
2019-10-03 03:03:18 +03:00
OpenCount : 0 ,
ClosedCount : 0 ,
} ,
} ,
2020-02-29 09:52:05 +03:00
{
UserIssueStatsOptions {
UserID : 1 ,
FilterMode : FilterModeCreate ,
IssueIDs : [ ] int64 { 1 } ,
} ,
IssueStats {
2021-12-29 16:02:12 +03:00
YourRepositoriesCount : 1 , // 1
AssignCount : 1 , // 1
CreateCount : 1 , // 1
OpenCount : 1 , // 1
2020-02-29 09:52:05 +03:00
ClosedCount : 0 ,
} ,
} ,
2017-12-26 02:25:16 +03:00
} {
2021-12-29 16:02:12 +03:00
t . Run ( fmt . Sprintf ( "%#v" , test . Opts ) , func ( t * testing . T ) {
stats , err := GetUserIssueStats ( test . Opts )
if ! assert . NoError ( t , err ) {
return
}
assert . Equal ( t , test . ExpectedIssueStats , * stats )
} )
2017-12-26 02:25:16 +03:00
}
}
2018-04-29 08:58:47 +03:00
func TestIssue_loadTotalTimes ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2018-04-29 08:58:47 +03:00
ms , err := GetIssueByID ( 2 )
assert . NoError ( t , err )
2021-09-23 18:45:36 +03:00
assert . NoError ( t , ms . loadTotalTimes ( db . GetEngine ( db . DefaultContext ) ) )
2019-12-27 23:30:58 +03:00
assert . Equal ( t , int64 ( 3682 ) , ms . TotalTrackedTime )
2018-04-29 08:58:47 +03:00
}
2019-02-21 08:01:28 +03:00
func TestIssue_SearchIssueIDsByKeyword ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2022-01-27 11:30:51 +03:00
total , ids , err := SearchIssueIDsByKeyword ( context . TODO ( ) , "issue2" , [ ] int64 { 1 } , 10 , 0 )
2019-02-21 08:01:28 +03:00
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , total )
assert . EqualValues ( t , [ ] int64 { 2 } , ids )
2022-01-27 11:30:51 +03:00
total , ids , err = SearchIssueIDsByKeyword ( context . TODO ( ) , "first" , [ ] int64 { 1 } , 10 , 0 )
2019-02-21 08:01:28 +03:00
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , total )
assert . EqualValues ( t , [ ] int64 { 1 } , ids )
2022-01-27 11:30:51 +03:00
total , ids , err = SearchIssueIDsByKeyword ( context . TODO ( ) , "for" , [ ] int64 { 1 } , 10 , 0 )
2019-02-21 08:01:28 +03:00
assert . NoError ( t , err )
2020-01-17 09:03:40 +03:00
assert . EqualValues ( t , 5 , total )
2021-01-16 07:55:17 +03:00
assert . ElementsMatch ( t , [ ] int64 { 1 , 2 , 3 , 5 , 11 } , ids )
2019-02-21 08:01:28 +03:00
// issue1's comment id 2
2022-01-27 11:30:51 +03:00
total , ids , err = SearchIssueIDsByKeyword ( context . TODO ( ) , "good" , [ ] int64 { 1 } , 10 , 0 )
2019-02-21 08:01:28 +03:00
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , total )
assert . EqualValues ( t , [ ] int64 { 1 } , ids )
}
2019-09-29 15:52:39 +03:00
2020-02-29 09:52:05 +03:00
func TestGetRepoIDsForIssuesOptions ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-24 12:49:20 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } ) . ( * user_model . User )
2020-02-29 09:52:05 +03:00
for _ , test := range [ ] struct {
Opts IssuesOptions
ExpectedRepoIDs [ ] int64
} {
{
IssuesOptions {
AssigneeID : 2 ,
} ,
[ ] int64 { 3 } ,
} ,
{
IssuesOptions {
RepoIDs : [ ] int64 { 1 , 2 } ,
} ,
[ ] int64 { 1 , 2 } ,
} ,
} {
repoIDs , err := GetRepoIDsForIssuesOptions ( & test . Opts , user )
assert . NoError ( t , err )
if assert . Len ( t , repoIDs , len ( test . ExpectedRepoIDs ) ) {
for i , repoID := range repoIDs {
assert . EqualValues ( t , test . ExpectedRepoIDs [ i ] , repoID )
}
}
}
}
2021-06-14 05:22:55 +03:00
func testInsertIssue ( t * testing . T , title , content string , expectIndex int64 ) * Issue {
2019-09-29 15:52:39 +03:00
var newIssue Issue
2021-06-14 05:22:55 +03:00
t . Run ( title , func ( t * testing . T ) {
2021-12-10 04:27:50 +03:00
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 } ) . ( * repo_model . Repository )
2021-11-24 12:49:20 +03:00
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } ) . ( * user_model . User )
2021-06-14 05:22:55 +03:00
issue := Issue {
RepoID : repo . ID ,
PosterID : user . ID ,
2021-10-23 17:47:38 +03:00
Poster : user ,
2021-06-14 05:22:55 +03:00
Title : title ,
Content : content ,
}
err := NewIssue ( repo , & issue , nil , nil )
assert . NoError ( t , err )
2019-09-29 15:52:39 +03:00
2021-09-23 18:45:36 +03:00
has , err := db . GetEngine ( db . DefaultContext ) . ID ( issue . ID ) . Get ( & newIssue )
2021-06-14 05:22:55 +03:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , issue . Title , newIssue . Title )
assert . EqualValues ( t , issue . Content , newIssue . Content )
if expectIndex > 0 {
assert . EqualValues ( t , expectIndex , newIssue . Index )
}
} )
return & newIssue
2019-09-29 15:52:39 +03:00
}
func TestIssue_InsertIssue ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2019-09-29 15:52:39 +03:00
2021-06-14 05:22:55 +03:00
// there are 5 issues and max index is 5 on repository 1, so this one should 6
issue := testInsertIssue ( t , "my issue1" , "special issue's comments?" , 6 )
2021-09-23 18:45:36 +03:00
_ , err := db . GetEngine ( db . DefaultContext ) . ID ( issue . ID ) . Delete ( new ( Issue ) )
2021-06-14 05:22:55 +03:00
assert . NoError ( t , err )
issue = testInsertIssue ( t , ` my issue2, this is my son's love \n \r \ ` , "special issue's '' comments?" , 7 )
2021-09-23 18:45:36 +03:00
_ , err = db . GetEngine ( db . DefaultContext ) . ID ( issue . ID ) . Delete ( new ( Issue ) )
2021-06-14 05:22:55 +03:00
assert . NoError ( t , err )
2019-09-29 15:52:39 +03:00
}
2019-10-10 19:45:11 +03:00
func TestIssue_ResolveMentions ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2019-10-10 19:45:11 +03:00
testSuccess := func ( owner , repo , doer string , mentions [ ] string , expected [ ] int64 ) {
2021-11-24 12:49:20 +03:00
o := unittest . AssertExistsAndLoadBean ( t , & user_model . User { LowerName : owner } ) . ( * user_model . User )
2021-12-10 04:27:50 +03:00
r := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { OwnerID : o . ID , LowerName : repo } ) . ( * repo_model . Repository )
2019-10-10 19:45:11 +03:00
issue := & Issue { RepoID : r . ID }
2021-11-24 12:49:20 +03:00
d := unittest . AssertExistsAndLoadBean ( t , & user_model . User { LowerName : doer } ) . ( * user_model . User )
2021-09-23 18:45:36 +03:00
resolved , err := issue . ResolveMentionsByVisibility ( db . DefaultContext , d , mentions )
2019-10-10 19:45:11 +03:00
assert . NoError ( t , err )
ids := make ( [ ] int64 , len ( resolved ) )
for i , user := range resolved {
ids [ i ] = user . ID
}
sort . Slice ( ids , func ( i , j int ) bool { return ids [ i ] < ids [ j ] } )
assert . EqualValues ( t , expected , ids )
}
// Public repo, existing user
testSuccess ( "user2" , "repo1" , "user1" , [ ] string { "user5" } , [ ] int64 { 5 } )
// Public repo, non-existing user
testSuccess ( "user2" , "repo1" , "user1" , [ ] string { "nonexisting" } , [ ] int64 { } )
// Public repo, doer
testSuccess ( "user2" , "repo1" , "user1" , [ ] string { "user1" } , [ ] int64 { } )
// Private repo, team member
testSuccess ( "user17" , "big_test_private_4" , "user20" , [ ] string { "user2" } , [ ] int64 { 2 } )
// Private repo, not a team member
testSuccess ( "user17" , "big_test_private_4" , "user20" , [ ] string { "user5" } , [ ] int64 { } )
// Private repo, whole team
2020-12-21 18:39:28 +03:00
testSuccess ( "user17" , "big_test_private_4" , "user15" , [ ] string { "user17/owners" } , [ ] int64 { 18 } )
2019-10-10 19:45:11 +03:00
}
2021-09-19 14:49:59 +03:00
func TestResourceIndex ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-09-19 14:49:59 +03:00
var wg sync . WaitGroup
for i := 0 ; i < 100 ; i ++ {
wg . Add ( 1 )
go func ( i int ) {
testInsertIssue ( t , fmt . Sprintf ( "issue %d" , i + 1 ) , "my issue" , 0 )
wg . Done ( )
} ( i )
}
wg . Wait ( )
}
2021-11-09 00:14:46 +03:00
func TestCorrectIssueStats ( t * testing . T ) {
2021-11-12 17:36:47 +03:00
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
2021-11-09 00:14:46 +03:00
// Because the condition is to have chunked database look-ups,
// We have to more issues than `maxQueryParameters`, we will insert.
// maxQueryParameters + 10 issues into the testDatabase.
// Each new issues will have a constant description "Bugs are nasty"
// Which will be used later on.
issueAmount := maxQueryParameters + 10
var wg sync . WaitGroup
for i := 0 ; i < issueAmount ; i ++ {
wg . Add ( 1 )
go func ( i int ) {
testInsertIssue ( t , fmt . Sprintf ( "Issue %d" , i + 1 ) , "Bugs are nasty" , 0 )
wg . Done ( )
} ( i )
}
wg . Wait ( )
// Now we will get all issueID's that match the "Bugs are nasty" query.
2022-01-27 11:30:51 +03:00
total , ids , err := SearchIssueIDsByKeyword ( context . TODO ( ) , "Bugs are nasty" , [ ] int64 { 1 } , issueAmount , 0 )
2021-11-09 00:14:46 +03:00
// Just to be sure.
assert . NoError ( t , err )
assert . EqualValues ( t , issueAmount , total )
// Now we will call the GetIssueStats with these IDs and if working,
// get the correct stats back.
issueStats , err := GetIssueStats ( & IssueStatsOptions {
RepoID : 1 ,
IssueIDs : ids ,
} )
// Now check the values.
assert . NoError ( t , err )
assert . EqualValues ( t , issueStats . OpenCount , issueAmount )
}