gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "fmt"
  6. "net/http"
  7. "testing"
  8. actions_model "code.gitea.io/gitea/models/actions"
  9. "code.gitea.io/gitea/models/db"
  10. repo_model "code.gitea.io/gitea/models/repo"
  11. "code.gitea.io/gitea/models/unittest"
  12. user_model "code.gitea.io/gitea/models/user"
  13. "code.gitea.io/gitea/tests"
  14. "github.com/stretchr/testify/assert"
  15. "github.com/stretchr/testify/require"
  16. )
  17. func TestActionsVariables(t *testing.T) {
  18. defer tests.PrepareTestEnv(t)()
  19. ctx := t.Context()
  20. require.NoError(t, db.DeleteAllRecords("action_variable"))
  21. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  22. _, _ = actions_model.InsertVariable(ctx, user2.ID, 0, "VAR", "user2-var", "user2-var-description")
  23. user2Var := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionVariable{OwnerID: user2.ID, Name: "VAR"})
  24. userWebURL := "/user/settings/actions/variables"
  25. org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3, Type: user_model.UserTypeOrganization})
  26. _, _ = actions_model.InsertVariable(ctx, org3.ID, 0, "VAR", "org3-var", "org3-var-description")
  27. org3Var := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionVariable{OwnerID: org3.ID, Name: "VAR"})
  28. orgWebURL := "/org/org3/settings/actions/variables"
  29. repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
  30. _, _ = actions_model.InsertVariable(ctx, 0, repo1.ID, "VAR", "repo1-var", "repo1-var-description")
  31. repo1Var := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionVariable{RepoID: repo1.ID, Name: "VAR"})
  32. repoWebURL := "/user2/repo1/settings/actions/variables"
  33. _, _ = actions_model.InsertVariable(ctx, 0, 0, "VAR", "global-var", "global-var-description")
  34. globalVar := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionVariable{Name: "VAR", Data: "global-var"})
  35. adminWebURL := "/-/admin/actions/variables"
  36. sessionAdmin := loginUser(t, "user1")
  37. sessionUser2 := loginUser(t, user2.Name)
  38. doUpdate := func(t *testing.T, sess *TestSession, baseURL string, id int64, data string, expectedStatus int) {
  39. req := NewRequestWithValues(t, "POST", fmt.Sprintf("%s/%d/edit", baseURL, id), map[string]string{
  40. "_csrf": GetUserCSRFToken(t, sess),
  41. "name": "VAR",
  42. "data": data,
  43. })
  44. sess.MakeRequest(t, req, expectedStatus)
  45. }
  46. doDelete := func(t *testing.T, sess *TestSession, baseURL string, id int64, expectedStatus int) {
  47. req := NewRequestWithValues(t, "POST", fmt.Sprintf("%s/%d/delete", baseURL, id), map[string]string{
  48. "_csrf": GetUserCSRFToken(t, sess),
  49. })
  50. sess.MakeRequest(t, req, expectedStatus)
  51. }
  52. assertDenied := func(t *testing.T, sess *TestSession, baseURL string, id int64) {
  53. doUpdate(t, sess, baseURL, id, "ChangedData", http.StatusNotFound)
  54. doDelete(t, sess, baseURL, id, http.StatusNotFound)
  55. v := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionVariable{ID: id})
  56. assert.Contains(t, v.Data, "-var")
  57. }
  58. assertSuccess := func(t *testing.T, sess *TestSession, baseURL string, id int64) {
  59. doUpdate(t, sess, baseURL, id, "ChangedData", http.StatusOK)
  60. v := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionVariable{ID: id})
  61. assert.Equal(t, "ChangedData", v.Data)
  62. doDelete(t, sess, baseURL, id, http.StatusOK)
  63. unittest.AssertNotExistsBean(t, &actions_model.ActionVariable{ID: id})
  64. }
  65. t.Run("UpdateUserVar", func(t *testing.T) {
  66. theVar := user2Var
  67. t.Run("FromOrg", func(t *testing.T) {
  68. assertDenied(t, sessionAdmin, orgWebURL, theVar.ID)
  69. })
  70. t.Run("FromRepo", func(t *testing.T) {
  71. assertDenied(t, sessionAdmin, repoWebURL, theVar.ID)
  72. })
  73. t.Run("FromAdmin", func(t *testing.T) {
  74. assertDenied(t, sessionAdmin, adminWebURL, theVar.ID)
  75. })
  76. })
  77. t.Run("UpdateOrgVar", func(t *testing.T) {
  78. theVar := org3Var
  79. t.Run("FromRepo", func(t *testing.T) {
  80. assertDenied(t, sessionAdmin, repoWebURL, theVar.ID)
  81. })
  82. t.Run("FromUser", func(t *testing.T) {
  83. assertDenied(t, sessionAdmin, userWebURL, theVar.ID)
  84. })
  85. t.Run("FromAdmin", func(t *testing.T) {
  86. assertDenied(t, sessionAdmin, adminWebURL, theVar.ID)
  87. })
  88. })
  89. t.Run("UpdateRepoVar", func(t *testing.T) {
  90. theVar := repo1Var
  91. t.Run("FromOrg", func(t *testing.T) {
  92. assertDenied(t, sessionAdmin, orgWebURL, theVar.ID)
  93. })
  94. t.Run("FromUser", func(t *testing.T) {
  95. assertDenied(t, sessionAdmin, userWebURL, theVar.ID)
  96. })
  97. t.Run("FromAdmin", func(t *testing.T) {
  98. assertDenied(t, sessionAdmin, adminWebURL, theVar.ID)
  99. })
  100. })
  101. t.Run("UpdateGlobalVar", func(t *testing.T) {
  102. theVar := globalVar
  103. t.Run("FromOrg", func(t *testing.T) {
  104. assertDenied(t, sessionAdmin, orgWebURL, theVar.ID)
  105. })
  106. t.Run("FromUser", func(t *testing.T) {
  107. assertDenied(t, sessionAdmin, userWebURL, theVar.ID)
  108. })
  109. t.Run("FromRepo", func(t *testing.T) {
  110. assertDenied(t, sessionAdmin, repoWebURL, theVar.ID)
  111. })
  112. })
  113. t.Run("UpdateSuccess", func(t *testing.T) {
  114. t.Run("User", func(t *testing.T) {
  115. assertSuccess(t, sessionUser2, userWebURL, user2Var.ID)
  116. })
  117. t.Run("Org", func(t *testing.T) {
  118. assertSuccess(t, sessionAdmin, orgWebURL, org3Var.ID)
  119. })
  120. t.Run("Repo", func(t *testing.T) {
  121. assertSuccess(t, sessionUser2, repoWebURL, repo1Var.ID)
  122. })
  123. t.Run("Admin", func(t *testing.T) {
  124. assertSuccess(t, sessionAdmin, adminWebURL, globalVar.ID)
  125. })
  126. })
  127. }