code.gitea.io/gitea@v1.22.3/tests/integration/api_issue_milestone_test.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "fmt" 8 "net/http" 9 "testing" 10 11 auth_model "code.gitea.io/gitea/models/auth" 12 issues_model "code.gitea.io/gitea/models/issues" 13 repo_model "code.gitea.io/gitea/models/repo" 14 "code.gitea.io/gitea/models/unittest" 15 user_model "code.gitea.io/gitea/models/user" 16 "code.gitea.io/gitea/modules/structs" 17 "code.gitea.io/gitea/tests" 18 19 "github.com/stretchr/testify/assert" 20 ) 21 22 func TestAPIIssuesMilestone(t *testing.T) { 23 defer tests.PrepareTestEnv(t)() 24 25 milestone := unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}) 26 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: milestone.RepoID}) 27 owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}) 28 assert.Equal(t, int64(1), int64(milestone.NumIssues)) 29 assert.Equal(t, structs.StateOpen, milestone.State()) 30 31 session := loginUser(t, owner.Name) 32 token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue) 33 34 // update values of issue 35 milestoneState := "closed" 36 37 urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/milestones/%d", owner.Name, repo.Name, milestone.ID) 38 req := NewRequestWithJSON(t, "PATCH", urlStr, structs.EditMilestoneOption{ 39 State: &milestoneState, 40 }).AddTokenAuth(token) 41 resp := MakeRequest(t, req, http.StatusOK) 42 var apiMilestone structs.Milestone 43 DecodeJSON(t, resp, &apiMilestone) 44 assert.EqualValues(t, "closed", apiMilestone.State) 45 46 req = NewRequest(t, "GET", urlStr). 47 AddTokenAuth(token) 48 resp = MakeRequest(t, req, http.StatusOK) 49 var apiMilestone2 structs.Milestone 50 DecodeJSON(t, resp, &apiMilestone2) 51 assert.EqualValues(t, "closed", apiMilestone2.State) 52 53 req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/milestones", owner.Name, repo.Name), structs.CreateMilestoneOption{ 54 Title: "wow", 55 Description: "closed one", 56 State: "closed", 57 }).AddTokenAuth(token) 58 resp = MakeRequest(t, req, http.StatusCreated) 59 DecodeJSON(t, resp, &apiMilestone) 60 assert.Equal(t, "wow", apiMilestone.Title) 61 assert.Equal(t, structs.StateClosed, apiMilestone.State) 62 63 var apiMilestones []structs.Milestone 64 req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/milestones?state=%s", owner.Name, repo.Name, "all")). 65 AddTokenAuth(token) 66 resp = MakeRequest(t, req, http.StatusOK) 67 DecodeJSON(t, resp, &apiMilestones) 68 assert.Len(t, apiMilestones, 4) 69 70 req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/milestones/%s", owner.Name, repo.Name, apiMilestones[2].Title)). 71 AddTokenAuth(token) 72 resp = MakeRequest(t, req, http.StatusOK) 73 DecodeJSON(t, resp, &apiMilestone) 74 assert.EqualValues(t, apiMilestones[2], apiMilestone) 75 76 req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/%s/milestones?state=%s&name=%s", owner.Name, repo.Name, "all", "milestone2")). 77 AddTokenAuth(token) 78 resp = MakeRequest(t, req, http.StatusOK) 79 DecodeJSON(t, resp, &apiMilestones) 80 assert.Len(t, apiMilestones, 1) 81 assert.Equal(t, int64(2), apiMilestones[0].ID) 82 83 req = NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/%s/milestones/%d", owner.Name, repo.Name, apiMilestone.ID)). 84 AddTokenAuth(token) 85 MakeRequest(t, req, http.StatusNoContent) 86 }