gitea源码

api_actions_run_test.go 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "fmt"
  6. "net/http"
  7. "testing"
  8. auth_model "code.gitea.io/gitea/models/auth"
  9. repo_model "code.gitea.io/gitea/models/repo"
  10. "code.gitea.io/gitea/models/unittest"
  11. user_model "code.gitea.io/gitea/models/user"
  12. "code.gitea.io/gitea/modules/json"
  13. api "code.gitea.io/gitea/modules/structs"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestAPIActionsGetWorkflowRun(t *testing.T) {
  17. defer prepareTestEnvActionsArtifacts(t)()
  18. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
  19. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
  20. session := loginUser(t, user.Name)
  21. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
  22. req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/runs/802802", repo.FullName())).
  23. AddTokenAuth(token)
  24. MakeRequest(t, req, http.StatusNotFound)
  25. req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/runs/802", repo.FullName())).
  26. AddTokenAuth(token)
  27. MakeRequest(t, req, http.StatusNotFound)
  28. req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/runs/803", repo.FullName())).
  29. AddTokenAuth(token)
  30. MakeRequest(t, req, http.StatusOK)
  31. }
  32. func TestAPIActionsGetWorkflowJob(t *testing.T) {
  33. defer prepareTestEnvActionsArtifacts(t)()
  34. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
  35. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
  36. session := loginUser(t, user.Name)
  37. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
  38. req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/jobs/198198", repo.FullName())).
  39. AddTokenAuth(token)
  40. MakeRequest(t, req, http.StatusNotFound)
  41. req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/jobs/198", repo.FullName())).
  42. AddTokenAuth(token)
  43. MakeRequest(t, req, http.StatusOK)
  44. req = NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/jobs/196", repo.FullName())).
  45. AddTokenAuth(token)
  46. MakeRequest(t, req, http.StatusNotFound)
  47. }
  48. func TestAPIActionsDeleteRunCheckPermission(t *testing.T) {
  49. defer prepareTestEnvActionsArtifacts(t)()
  50. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4})
  51. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
  52. session := loginUser(t, user.Name)
  53. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
  54. testAPIActionsDeleteRun(t, repo, token, http.StatusNotFound)
  55. }
  56. func TestAPIActionsDeleteRun(t *testing.T) {
  57. defer prepareTestEnvActionsArtifacts(t)()
  58. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
  59. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
  60. session := loginUser(t, user.Name)
  61. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
  62. testAPIActionsDeleteRunListArtifacts(t, repo, token, 2)
  63. testAPIActionsDeleteRunListTasks(t, repo, token, true)
  64. testAPIActionsDeleteRun(t, repo, token, http.StatusNoContent)
  65. testAPIActionsDeleteRunListArtifacts(t, repo, token, 0)
  66. testAPIActionsDeleteRunListTasks(t, repo, token, false)
  67. testAPIActionsDeleteRun(t, repo, token, http.StatusNotFound)
  68. }
  69. func TestAPIActionsDeleteRunRunning(t *testing.T) {
  70. defer prepareTestEnvActionsArtifacts(t)()
  71. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4})
  72. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
  73. session := loginUser(t, user.Name)
  74. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)
  75. req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/actions/runs/793", repo.FullName())).
  76. AddTokenAuth(token)
  77. MakeRequest(t, req, http.StatusBadRequest)
  78. }
  79. func testAPIActionsDeleteRun(t *testing.T, repo *repo_model.Repository, token string, expected int) {
  80. req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/actions/runs/795", repo.FullName())).
  81. AddTokenAuth(token)
  82. MakeRequest(t, req, expected)
  83. }
  84. func testAPIActionsDeleteRunListArtifacts(t *testing.T, repo *repo_model.Repository, token string, artifacts int) {
  85. req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/runs/795/artifacts", repo.FullName())).
  86. AddTokenAuth(token)
  87. resp := MakeRequest(t, req, http.StatusOK)
  88. var listResp api.ActionArtifactsResponse
  89. err := json.Unmarshal(resp.Body.Bytes(), &listResp)
  90. assert.NoError(t, err)
  91. assert.Len(t, listResp.Entries, artifacts)
  92. }
  93. func testAPIActionsDeleteRunListTasks(t *testing.T, repo *repo_model.Repository, token string, expected bool) {
  94. req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/tasks", repo.FullName())).
  95. AddTokenAuth(token)
  96. resp := MakeRequest(t, req, http.StatusOK)
  97. var listResp api.ActionTaskResponse
  98. err := json.Unmarshal(resp.Body.Bytes(), &listResp)
  99. assert.NoError(t, err)
  100. findTask1 := false
  101. findTask2 := false
  102. for _, entry := range listResp.Entries {
  103. if entry.ID == 53 {
  104. findTask1 = true
  105. continue
  106. }
  107. if entry.ID == 54 {
  108. findTask2 = true
  109. continue
  110. }
  111. }
  112. assert.Equal(t, expected, findTask1)
  113. assert.Equal(t, expected, findTask2)
  114. }