@@ -7,6 +7,7 @@ package integrations
7
7
import (
8
8
"fmt"
9
9
"net/http"
10
+ "net/url"
10
11
"testing"
11
12
12
13
"code.gitea.io/gitea/models"
@@ -16,6 +17,58 @@ import (
16
17
"github.com/stretchr/testify/assert"
17
18
)
18
19
20
+ func TestAPIListReleases (t * testing.T ) {
21
+ defer prepareTestEnv (t )()
22
+
23
+ repo := models .AssertExistsAndLoadBean (t , & models.Repository {ID : 1 }).(* models.Repository )
24
+ user2 := models .AssertExistsAndLoadBean (t , & models.User {ID : 2 }).(* models.User )
25
+ session := loginUser (t , user2 .LowerName )
26
+ token := getTokenForLoggedInUser (t , session )
27
+
28
+ link , _ := url .Parse (fmt .Sprintf ("/api/v1/repos/%s/%s/releases" , user2 .Name , repo .Name ))
29
+ link .RawQuery = url.Values {"token" : {token }}.Encode ()
30
+ resp := session .MakeRequest (t , NewRequest (t , "GET" , link .String ()), http .StatusOK )
31
+ var apiReleases []* api.Release
32
+ DecodeJSON (t , resp , & apiReleases )
33
+ if assert .Len (t , apiReleases , 3 ) {
34
+ for _ , release := range apiReleases {
35
+ switch release .ID {
36
+ case 1 :
37
+ assert .False (t , release .IsDraft )
38
+ assert .False (t , release .IsPrerelease )
39
+ case 4 :
40
+ assert .True (t , release .IsDraft )
41
+ assert .False (t , release .IsPrerelease )
42
+ case 5 :
43
+ assert .False (t , release .IsDraft )
44
+ assert .True (t , release .IsPrerelease )
45
+ default :
46
+ assert .NoError (t , fmt .Errorf ("unexpected release: %v" , release ))
47
+ }
48
+ }
49
+ }
50
+
51
+ // test filter
52
+ testFilterByLen := func (auth bool , query url.Values , expectedLength int , msgAndArgs ... string ) {
53
+ link .RawQuery = query .Encode ()
54
+ if auth {
55
+ query .Set ("token" , token )
56
+ resp = session .MakeRequest (t , NewRequest (t , "GET" , link .String ()), http .StatusOK )
57
+ } else {
58
+ resp = MakeRequest (t , NewRequest (t , "GET" , link .String ()), http .StatusOK )
59
+ }
60
+ DecodeJSON (t , resp , & apiReleases )
61
+ assert .Len (t , apiReleases , expectedLength , msgAndArgs )
62
+ }
63
+
64
+ testFilterByLen (false , url.Values {"draft" : {"true" }}, 0 , "anon should not see drafts" )
65
+ testFilterByLen (true , url.Values {"draft" : {"true" }}, 1 , "repo owner should see drafts" )
66
+ testFilterByLen (true , url.Values {"draft" : {"false" }}, 2 , "exclude drafts" )
67
+ testFilterByLen (true , url.Values {"draft" : {"false" }, "pre-release" : {"false" }}, 1 , "exclude drafts and pre-releases" )
68
+ testFilterByLen (true , url.Values {"pre-release" : {"true" }}, 1 , "only get pre-release" )
69
+ testFilterByLen (true , url.Values {"draft" : {"true" }, "pre-release" : {"true" }}, 0 , "there is no pre-release draft" )
70
+ }
71
+
19
72
func createNewReleaseUsingAPI (t * testing.T , session * TestSession , token string , owner * models.User , repo * models.Repository , name , target , title , desc string ) * api.Release {
20
73
urlStr := fmt .Sprintf ("/api/v1/repos/%s/%s/releases?token=%s" ,
21
74
owner .Name , repo .Name , token )
0 commit comments