[BugFix] [API] /repos/issues/search (#9698)
* fix * fix options * add TEST Co-authored-by: Antoine GIRARD <sapk@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									86464de0c1
								
							
						
					
					
						commit
						83f9359a75
					
				| 
						 | 
					@ -7,6 +7,7 @@ package integrations
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
| 
						 | 
					@ -120,3 +121,47 @@ func TestAPIEditIssue(t *testing.T) {
 | 
				
			||||||
	assert.Equal(t, body, issueAfter.Content)
 | 
						assert.Equal(t, body, issueAfter.Content)
 | 
				
			||||||
	assert.Equal(t, title, issueAfter.Title)
 | 
						assert.Equal(t, title, issueAfter.Title)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestAPISearchIssue(t *testing.T) {
 | 
				
			||||||
 | 
						defer prepareTestEnv(t)()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						session := loginUser(t, "user2")
 | 
				
			||||||
 | 
						token := getTokenForLoggedInUser(t, session)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						link, _ := url.Parse("/api/v1/repos/issues/search")
 | 
				
			||||||
 | 
						req := NewRequest(t, "GET", link.String())
 | 
				
			||||||
 | 
						resp := session.MakeRequest(t, req, http.StatusOK)
 | 
				
			||||||
 | 
						var apiIssues []*api.Issue
 | 
				
			||||||
 | 
						DecodeJSON(t, resp, &apiIssues)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert.Len(t, apiIssues, 8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						query := url.Values{}
 | 
				
			||||||
 | 
						query.Add("token", token)
 | 
				
			||||||
 | 
						link.RawQuery = query.Encode()
 | 
				
			||||||
 | 
						req = NewRequest(t, "GET", link.String())
 | 
				
			||||||
 | 
						resp = session.MakeRequest(t, req, http.StatusOK)
 | 
				
			||||||
 | 
						DecodeJSON(t, resp, &apiIssues)
 | 
				
			||||||
 | 
						assert.Len(t, apiIssues, 8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						query.Add("state", "closed")
 | 
				
			||||||
 | 
						link.RawQuery = query.Encode()
 | 
				
			||||||
 | 
						req = NewRequest(t, "GET", link.String())
 | 
				
			||||||
 | 
						resp = session.MakeRequest(t, req, http.StatusOK)
 | 
				
			||||||
 | 
						DecodeJSON(t, resp, &apiIssues)
 | 
				
			||||||
 | 
						assert.Len(t, apiIssues, 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						query.Set("state", "all")
 | 
				
			||||||
 | 
						link.RawQuery = query.Encode()
 | 
				
			||||||
 | 
						req = NewRequest(t, "GET", link.String())
 | 
				
			||||||
 | 
						resp = session.MakeRequest(t, req, http.StatusOK)
 | 
				
			||||||
 | 
						DecodeJSON(t, resp, &apiIssues)
 | 
				
			||||||
 | 
						assert.Len(t, apiIssues, 10) //there are more but 10 is page item limit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						query.Add("page", "2")
 | 
				
			||||||
 | 
						link.RawQuery = query.Encode()
 | 
				
			||||||
 | 
						req = NewRequest(t, "GET", link.String())
 | 
				
			||||||
 | 
						resp = session.MakeRequest(t, req, http.StatusOK)
 | 
				
			||||||
 | 
						DecodeJSON(t, resp, &apiIssues)
 | 
				
			||||||
 | 
						assert.Len(t, apiIssues, 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,20 +67,24 @@ func SearchIssues(ctx *context.APIContext) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// find repos user can access (for issue search)
 | 
						// find repos user can access (for issue search)
 | 
				
			||||||
	repoIDs := make([]int64, 0)
 | 
						repoIDs := make([]int64, 0)
 | 
				
			||||||
 | 
						opts := &models.SearchRepoOptions{
 | 
				
			||||||
 | 
							PageSize:    15,
 | 
				
			||||||
 | 
							Private:     false,
 | 
				
			||||||
 | 
							AllPublic:   true,
 | 
				
			||||||
 | 
							TopicOnly:   false,
 | 
				
			||||||
 | 
							Collaborate: util.OptionalBoolNone,
 | 
				
			||||||
 | 
							UserIsAdmin: ctx.IsUserSiteAdmin(),
 | 
				
			||||||
 | 
							OrderBy:     models.SearchOrderByRecentUpdated,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if ctx.IsSigned {
 | 
				
			||||||
 | 
							opts.Private = true
 | 
				
			||||||
 | 
							opts.AllLimited = true
 | 
				
			||||||
 | 
							opts.UserID = ctx.User.ID
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	issueCount := 0
 | 
						issueCount := 0
 | 
				
			||||||
	for page := 1; ; page++ {
 | 
						for page := 1; ; page++ {
 | 
				
			||||||
		repos, count, err := models.SearchRepositoryByName(&models.SearchRepoOptions{
 | 
							opts.Page = page
 | 
				
			||||||
			Page:        page,
 | 
							repos, count, err := models.SearchRepositoryByName(opts)
 | 
				
			||||||
			PageSize:    15,
 | 
					 | 
				
			||||||
			Private:     true,
 | 
					 | 
				
			||||||
			Keyword:     "",
 | 
					 | 
				
			||||||
			OwnerID:     ctx.User.ID,
 | 
					 | 
				
			||||||
			TopicOnly:   false,
 | 
					 | 
				
			||||||
			Collaborate: util.OptionalBoolNone,
 | 
					 | 
				
			||||||
			UserIsAdmin: ctx.IsUserSiteAdmin(),
 | 
					 | 
				
			||||||
			UserID:      ctx.User.ID,
 | 
					 | 
				
			||||||
			OrderBy:     models.SearchOrderByRecentUpdated,
 | 
					 | 
				
			||||||
		})
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			ctx.Error(http.StatusInternalServerError, "SearchRepositoryByName", err)
 | 
								ctx.Error(http.StatusInternalServerError, "SearchRepositoryByName", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue