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  }