mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	* API: fix set milestone on PR creation pr creation via API failed with 404, because we searched for milestoneID 0, due to uninitialized var usage D: * add tests Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
		@@ -74,8 +74,79 @@ func TestAPICreatePullSuccess(t *testing.T) {
 | 
				
			|||||||
		Base:  "master",
 | 
							Base:  "master",
 | 
				
			||||||
		Title: "create a failure pr",
 | 
							Title: "create a failure pr",
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					 | 
				
			||||||
	session.MakeRequest(t, req, 201)
 | 
						session.MakeRequest(t, req, 201)
 | 
				
			||||||
 | 
						session.MakeRequest(t, req, http.StatusUnprocessableEntity) // second request should fail
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestAPICreatePullWithFieldsSuccess(t *testing.T) {
 | 
				
			||||||
 | 
						defer prepareTestEnv(t)()
 | 
				
			||||||
 | 
						// repo10 have code, pulls units.
 | 
				
			||||||
 | 
						repo10 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 10}).(*models.Repository)
 | 
				
			||||||
 | 
						owner10 := models.AssertExistsAndLoadBean(t, &models.User{ID: repo10.OwnerID}).(*models.User)
 | 
				
			||||||
 | 
						// repo11 only have code unit but should still create pulls
 | 
				
			||||||
 | 
						repo11 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 11}).(*models.Repository)
 | 
				
			||||||
 | 
						owner11 := models.AssertExistsAndLoadBean(t, &models.User{ID: repo11.OwnerID}).(*models.User)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						session := loginUser(t, owner11.Name)
 | 
				
			||||||
 | 
						token := getTokenForLoggedInUser(t, session)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opts := &api.CreatePullRequestOption{
 | 
				
			||||||
 | 
							Head:      fmt.Sprintf("%s:master", owner11.Name),
 | 
				
			||||||
 | 
							Base:      "master",
 | 
				
			||||||
 | 
							Title:     "create a failure pr",
 | 
				
			||||||
 | 
							Body:      "foobaaar",
 | 
				
			||||||
 | 
							Milestone: 5,
 | 
				
			||||||
 | 
							Assignees: []string{owner10.Name},
 | 
				
			||||||
 | 
							Labels:    []int64{5},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						req := NewRequestWithJSON(t, http.MethodPost, fmt.Sprintf("/api/v1/repos/%s/%s/pulls?token=%s", owner10.Name, repo10.Name, token), opts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res := session.MakeRequest(t, req, 201)
 | 
				
			||||||
 | 
						pull := new(api.PullRequest)
 | 
				
			||||||
 | 
						DecodeJSON(t, res, pull)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert.NotNil(t, pull.Milestone)
 | 
				
			||||||
 | 
						assert.EqualValues(t, opts.Milestone, pull.Milestone.ID)
 | 
				
			||||||
 | 
						if assert.Len(t, pull.Assignees, 1) {
 | 
				
			||||||
 | 
							assert.EqualValues(t, opts.Assignees[0], owner10.Name)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						assert.NotNil(t, pull.Labels)
 | 
				
			||||||
 | 
						assert.EqualValues(t, opts.Labels[0], pull.Labels[0].ID)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestAPICreatePullWithFieldsFailure(t *testing.T) {
 | 
				
			||||||
 | 
						defer prepareTestEnv(t)()
 | 
				
			||||||
 | 
						// repo10 have code, pulls units.
 | 
				
			||||||
 | 
						repo10 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 10}).(*models.Repository)
 | 
				
			||||||
 | 
						owner10 := models.AssertExistsAndLoadBean(t, &models.User{ID: repo10.OwnerID}).(*models.User)
 | 
				
			||||||
 | 
						// repo11 only have code unit but should still create pulls
 | 
				
			||||||
 | 
						repo11 := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 11}).(*models.Repository)
 | 
				
			||||||
 | 
						owner11 := models.AssertExistsAndLoadBean(t, &models.User{ID: repo11.OwnerID}).(*models.User)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						session := loginUser(t, owner11.Name)
 | 
				
			||||||
 | 
						token := getTokenForLoggedInUser(t, session)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opts := &api.CreatePullRequestOption{
 | 
				
			||||||
 | 
							Head: fmt.Sprintf("%s:master", owner11.Name),
 | 
				
			||||||
 | 
							Base: "master",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						req := NewRequestWithJSON(t, http.MethodPost, fmt.Sprintf("/api/v1/repos/%s/%s/pulls?token=%s", owner10.Name, repo10.Name, token), opts)
 | 
				
			||||||
 | 
						session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 | 
				
			||||||
 | 
						opts.Title = "is required"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opts.Milestone = 666
 | 
				
			||||||
 | 
						session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 | 
				
			||||||
 | 
						opts.Milestone = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opts.Assignees = []string{"qweruqweroiuyqweoiruywqer"}
 | 
				
			||||||
 | 
						session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 | 
				
			||||||
 | 
						opts.Assignees = []string{owner10.LoginName}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opts.Labels = []int64{55555}
 | 
				
			||||||
 | 
						session.MakeRequest(t, req, http.StatusUnprocessableEntity)
 | 
				
			||||||
 | 
						opts.Labels = []int64{5}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAPIEditPull(t *testing.T) {
 | 
					func TestAPIEditPull(t *testing.T) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,3 +33,11 @@
 | 
				
			|||||||
  num_issues: 1
 | 
					  num_issues: 1
 | 
				
			||||||
  num_closed_issues: 0
 | 
					  num_closed_issues: 0
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					  id: 5
 | 
				
			||||||
 | 
					  repo_id: 10
 | 
				
			||||||
 | 
					  org_id: 0
 | 
				
			||||||
 | 
					  name: pull-test-label
 | 
				
			||||||
 | 
					  color: '#000000'
 | 
				
			||||||
 | 
					  num_issues: 0
 | 
				
			||||||
 | 
					  num_closed_issues: 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,3 +29,11 @@
 | 
				
			|||||||
  content: content random
 | 
					  content: content random
 | 
				
			||||||
  is_closed: false
 | 
					  is_closed: false
 | 
				
			||||||
  num_issues: 0
 | 
					  num_issues: 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 
 | 
				
			||||||
 | 
					  id: 5
 | 
				
			||||||
 | 
					  repo_id: 10
 | 
				
			||||||
 | 
					  name: milestone of repo 10 
 | 
				
			||||||
 | 
					  content: for testing with PRs
 | 
				
			||||||
 | 
					  is_closed: false
 | 
				
			||||||
 | 
					  num_issues: 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -146,6 +146,7 @@
 | 
				
			|||||||
  num_closed_issues: 0
 | 
					  num_closed_issues: 0
 | 
				
			||||||
  num_pulls: 1
 | 
					  num_pulls: 1
 | 
				
			||||||
  num_closed_pulls: 0
 | 
					  num_closed_pulls: 0
 | 
				
			||||||
 | 
					  num_milestones: 1
 | 
				
			||||||
  is_mirror: false
 | 
					  is_mirror: false
 | 
				
			||||||
  num_forks: 1
 | 
					  num_forks: 1
 | 
				
			||||||
  status: 0
 | 
					  status: 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -293,7 +293,6 @@ func CreatePullRequest(ctx *context.APIContext, form api.CreatePullRequestOption
 | 
				
			|||||||
	var (
 | 
						var (
 | 
				
			||||||
		repo        = ctx.Repo.Repository
 | 
							repo        = ctx.Repo.Repository
 | 
				
			||||||
		labelIDs    []int64
 | 
							labelIDs    []int64
 | 
				
			||||||
		assigneeID  int64
 | 
					 | 
				
			||||||
		milestoneID int64
 | 
							milestoneID int64
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -354,7 +353,7 @@ func CreatePullRequest(ctx *context.APIContext, form api.CreatePullRequestOption
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if form.Milestone > 0 {
 | 
						if form.Milestone > 0 {
 | 
				
			||||||
		milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, milestoneID)
 | 
							milestone, err := models.GetMilestoneByRepoID(ctx.Repo.Repository.ID, form.Milestone)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			if models.IsErrMilestoneNotExist(err) {
 | 
								if models.IsErrMilestoneNotExist(err) {
 | 
				
			||||||
				ctx.NotFound()
 | 
									ctx.NotFound()
 | 
				
			||||||
@@ -378,7 +377,6 @@ func CreatePullRequest(ctx *context.APIContext, form api.CreatePullRequestOption
 | 
				
			|||||||
		PosterID:     ctx.User.ID,
 | 
							PosterID:     ctx.User.ID,
 | 
				
			||||||
		Poster:       ctx.User,
 | 
							Poster:       ctx.User,
 | 
				
			||||||
		MilestoneID:  milestoneID,
 | 
							MilestoneID:  milestoneID,
 | 
				
			||||||
		AssigneeID:   assigneeID,
 | 
					 | 
				
			||||||
		IsPull:       true,
 | 
							IsPull:       true,
 | 
				
			||||||
		Content:      form.Body,
 | 
							Content:      form.Body,
 | 
				
			||||||
		DeadlineUnix: deadlineUnix,
 | 
							DeadlineUnix: deadlineUnix,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user