2019-12-08 01:04:19 +03:00
// Copyright 2019 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.
2022-09-02 22:18:23 +03:00
package integration
2019-12-08 01:04:19 +03:00
import (
"fmt"
"net/http"
"testing"
"time"
2022-04-08 12:11:15 +03:00
"code.gitea.io/gitea/models/db"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2021-11-16 11:53:21 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2020-10-17 07:23:08 +03:00
"code.gitea.io/gitea/modules/convert"
2019-12-08 01:04:19 +03:00
api "code.gitea.io/gitea/modules/structs"
2022-09-02 22:18:23 +03:00
"code.gitea.io/gitea/tests"
2019-12-08 01:04:19 +03:00
"github.com/stretchr/testify/assert"
)
func TestAPIIssuesReactions ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2019-12-08 01:04:19 +03:00
2022-08-16 05:22:25 +03:00
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : 1 } )
2022-04-08 12:11:15 +03:00
_ = issue . LoadRepo ( db . DefaultContext )
2022-08-16 05:22:25 +03:00
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : issue . Repo . OwnerID } )
2019-12-08 01:04:19 +03:00
session := loginUser ( t , owner . Name )
token := getTokenForLoggedInUser ( t , session )
2022-08-16 05:22:25 +03:00
user2 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2019-12-08 01:04:19 +03:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/%d/reactions?token=%s" ,
owner . Name , issue . Repo . Name , issue . Index , token )
2022-01-20 20:46:10 +03:00
// Try to add not allowed reaction
2019-12-08 01:04:19 +03:00
req := NewRequestWithJSON ( t , "POST" , urlStr , & api . EditReactionOption {
Reaction : "wrong" ,
} )
2021-11-18 04:33:06 +03:00
session . MakeRequest ( t , req , http . StatusForbidden )
2019-12-08 01:04:19 +03:00
2022-01-20 20:46:10 +03:00
// Delete not allowed reaction
2019-12-08 01:04:19 +03:00
req = NewRequestWithJSON ( t , "DELETE" , urlStr , & api . EditReactionOption {
Reaction : "zzz" ,
} )
2021-11-18 04:33:06 +03:00
session . MakeRequest ( t , req , http . StatusOK )
2019-12-08 01:04:19 +03:00
2022-01-20 20:46:10 +03:00
// Add allowed reaction
2019-12-08 01:04:19 +03:00
req = NewRequestWithJSON ( t , "POST" , urlStr , & api . EditReactionOption {
Reaction : "rocket" ,
} )
2021-11-18 04:33:06 +03:00
resp := session . MakeRequest ( t , req , http . StatusCreated )
2019-12-31 11:21:21 +03:00
var apiNewReaction api . Reaction
2019-12-08 01:04:19 +03:00
DecodeJSON ( t , resp , & apiNewReaction )
2022-01-20 20:46:10 +03:00
// Add existing reaction
2021-11-18 04:33:06 +03:00
session . MakeRequest ( t , req , http . StatusForbidden )
2019-12-08 01:04:19 +03:00
2022-01-20 20:46:10 +03:00
// Get end result of reaction list of issue #1
2019-12-08 01:04:19 +03:00
req = NewRequestf ( t , "GET" , urlStr )
resp = session . MakeRequest ( t , req , http . StatusOK )
2019-12-31 11:21:21 +03:00
var apiReactions [ ] * api . Reaction
2019-12-08 01:04:19 +03:00
DecodeJSON ( t , resp , & apiReactions )
2019-12-31 11:21:21 +03:00
expectResponse := make ( map [ int ] api . Reaction )
expectResponse [ 0 ] = api . Reaction {
2021-03-27 19:45:26 +03:00
User : convert . ToUser ( user2 , user2 ) ,
2019-12-08 01:04:19 +03:00
Reaction : "eyes" ,
Created : time . Unix ( 1573248003 , 0 ) ,
}
2019-12-18 16:07:36 +03:00
expectResponse [ 1 ] = apiNewReaction
assert . Len ( t , apiReactions , 2 )
2019-12-08 01:04:19 +03:00
for i , r := range apiReactions {
assert . Equal ( t , expectResponse [ i ] . Reaction , r . Reaction )
assert . Equal ( t , expectResponse [ i ] . Created . Unix ( ) , r . Created . Unix ( ) )
assert . Equal ( t , expectResponse [ i ] . User . ID , r . User . ID )
}
}
func TestAPICommentReactions ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2019-12-08 01:04:19 +03:00
2022-08-16 05:22:25 +03:00
comment := unittest . AssertExistsAndLoadBean ( t , & issues_model . Comment { ID : 2 } )
2022-11-19 11:12:33 +03:00
_ = comment . LoadIssue ( db . DefaultContext )
2019-12-08 01:04:19 +03:00
issue := comment . Issue
2022-04-08 12:11:15 +03:00
_ = issue . LoadRepo ( db . DefaultContext )
2022-08-16 05:22:25 +03:00
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : issue . Repo . OwnerID } )
2019-12-08 01:04:19 +03:00
session := loginUser ( t , owner . Name )
token := getTokenForLoggedInUser ( t , session )
2022-08-16 05:22:25 +03:00
user1 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } )
user2 := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 2 } )
2019-12-08 01:04:19 +03:00
urlStr := fmt . Sprintf ( "/api/v1/repos/%s/%s/issues/comments/%d/reactions?token=%s" ,
owner . Name , issue . Repo . Name , comment . ID , token )
2022-01-20 20:46:10 +03:00
// Try to add not allowed reaction
2019-12-08 01:04:19 +03:00
req := NewRequestWithJSON ( t , "POST" , urlStr , & api . EditReactionOption {
Reaction : "wrong" ,
} )
2021-11-18 04:33:06 +03:00
session . MakeRequest ( t , req , http . StatusForbidden )
2019-12-08 01:04:19 +03:00
2022-01-20 20:46:10 +03:00
// Delete none existing reaction
2019-12-08 01:04:19 +03:00
req = NewRequestWithJSON ( t , "DELETE" , urlStr , & api . EditReactionOption {
Reaction : "eyes" ,
} )
2021-11-18 04:33:06 +03:00
session . MakeRequest ( t , req , http . StatusOK )
2019-12-08 01:04:19 +03:00
2022-01-20 20:46:10 +03:00
// Add allowed reaction
2019-12-08 01:04:19 +03:00
req = NewRequestWithJSON ( t , "POST" , urlStr , & api . EditReactionOption {
Reaction : "+1" ,
} )
2021-11-18 04:33:06 +03:00
resp := session . MakeRequest ( t , req , http . StatusCreated )
2019-12-31 11:21:21 +03:00
var apiNewReaction api . Reaction
2019-12-08 01:04:19 +03:00
DecodeJSON ( t , resp , & apiNewReaction )
2022-01-20 20:46:10 +03:00
// Add existing reaction
2021-11-18 04:33:06 +03:00
session . MakeRequest ( t , req , http . StatusForbidden )
2019-12-08 01:04:19 +03:00
2022-01-20 20:46:10 +03:00
// Get end result of reaction list of issue #1
2019-12-08 01:04:19 +03:00
req = NewRequestf ( t , "GET" , urlStr )
resp = session . MakeRequest ( t , req , http . StatusOK )
2019-12-31 11:21:21 +03:00
var apiReactions [ ] * api . Reaction
2019-12-08 01:04:19 +03:00
DecodeJSON ( t , resp , & apiReactions )
2019-12-31 11:21:21 +03:00
expectResponse := make ( map [ int ] api . Reaction )
expectResponse [ 0 ] = api . Reaction {
2021-03-27 19:45:26 +03:00
User : convert . ToUser ( user2 , user2 ) ,
2019-12-08 01:04:19 +03:00
Reaction : "laugh" ,
Created : time . Unix ( 1573248004 , 0 ) ,
}
2019-12-31 11:21:21 +03:00
expectResponse [ 1 ] = api . Reaction {
2021-03-27 19:45:26 +03:00
User : convert . ToUser ( user1 , user1 ) ,
2019-12-08 01:04:19 +03:00
Reaction : "laugh" ,
Created : time . Unix ( 1573248005 , 0 ) ,
}
expectResponse [ 2 ] = apiNewReaction
assert . Len ( t , apiReactions , 3 )
for i , r := range apiReactions {
assert . Equal ( t , expectResponse [ i ] . Reaction , r . Reaction )
assert . Equal ( t , expectResponse [ i ] . Created . Unix ( ) , r . Created . Unix ( ) )
assert . Equal ( t , expectResponse [ i ] . User . ID , r . User . ID )
}
}