loading up the forgejo repo on tangled to test page performance
at forgejo 151 lines 4.9 kB view raw
1// Copyright 2017 The Gogs Authors. All rights reserved. 2// Copyright 2024 The Forgejo Authors c/o Codeberg e.V.. All rights reserved. 3// SPDX-License-Identifier: MIT 4 5package integration 6 7import ( 8 "fmt" 9 "net/http" 10 "testing" 11 12 auth_model "forgejo.org/models/auth" 13 "forgejo.org/models/unittest" 14 user_model "forgejo.org/models/user" 15 "forgejo.org/modules/setting" 16 api "forgejo.org/modules/structs" 17 "forgejo.org/modules/test" 18 "forgejo.org/routers" 19 "forgejo.org/tests" 20 21 "github.com/stretchr/testify/assert" 22) 23 24func TestAPIForkAsAdminIgnoringLimits(t *testing.T) { 25 defer tests.PrepareTestEnv(t)() 26 defer test.MockVariableValue(&setting.Repository.AllowForkWithoutMaximumLimit, false)() 27 defer test.MockVariableValue(&setting.Repository.MaxCreationLimit, 0)() 28 29 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user2"}) 30 userSession := loginUser(t, user.Name) 31 userToken := getTokenForLoggedInUser(t, userSession, auth_model.AccessTokenScopeWriteRepository) 32 adminUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{IsAdmin: true}) 33 adminSession := loginUser(t, adminUser.Name) 34 adminToken := getTokenForLoggedInUser(t, adminSession, 35 auth_model.AccessTokenScopeWriteRepository, 36 auth_model.AccessTokenScopeWriteOrganization) 37 38 originForkURL := "/api/v1/repos/user12/repo10/forks" 39 orgName := "fork-org" 40 41 // Create an organization 42 req := NewRequestWithJSON(t, "POST", "/api/v1/orgs", &api.CreateOrgOption{ 43 UserName: orgName, 44 }).AddTokenAuth(adminToken) 45 MakeRequest(t, req, http.StatusCreated) 46 47 // Create a team 48 teamToCreate := &api.CreateTeamOption{ 49 Name: "testers", 50 IncludesAllRepositories: true, 51 Permission: "write", 52 Units: []string{"repo.code", "repo.issues"}, 53 } 54 55 req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/orgs/%s/teams", orgName), &teamToCreate).AddTokenAuth(adminToken) 56 resp := MakeRequest(t, req, http.StatusCreated) 57 var team api.Team 58 DecodeJSON(t, resp, &team) 59 60 // Add user2 to the team 61 req = NewRequestf(t, "PUT", "/api/v1/teams/%d/members/user2", team.ID).AddTokenAuth(adminToken) 62 MakeRequest(t, req, http.StatusNoContent) 63 64 t.Run("forking as regular user", func(t *testing.T) { 65 defer tests.PrintCurrentTest(t)() 66 67 req := NewRequestWithJSON(t, "POST", originForkURL, &api.CreateForkOption{ 68 Organization: &orgName, 69 }).AddTokenAuth(userToken) 70 MakeRequest(t, req, http.StatusConflict) 71 }) 72 73 t.Run("forking as an instance admin", func(t *testing.T) { 74 defer tests.PrintCurrentTest(t)() 75 76 req := NewRequestWithJSON(t, "POST", originForkURL, &api.CreateForkOption{ 77 Organization: &orgName, 78 }).AddTokenAuth(adminToken) 79 MakeRequest(t, req, http.StatusAccepted) 80 }) 81} 82 83func TestCreateForkNoLogin(t *testing.T) { 84 defer tests.PrepareTestEnv(t)() 85 req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/forks", &api.CreateForkOption{}) 86 MakeRequest(t, req, http.StatusUnauthorized) 87} 88 89func TestAPIDisabledForkRepo(t *testing.T) { 90 defer test.MockVariableValue(&setting.Repository.DisableForks, true)() 91 defer test.MockVariableValue(&testWebRoutes, routers.NormalRoutes())() 92 defer tests.PrepareTestEnv(t)() 93 94 t.Run("fork listing", func(t *testing.T) { 95 defer tests.PrintCurrentTest(t)() 96 97 req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/forks") 98 MakeRequest(t, req, http.StatusNotFound) 99 }) 100 101 t.Run("forking", func(t *testing.T) { 102 defer tests.PrintCurrentTest(t)() 103 104 session := loginUser(t, "user5") 105 token := getTokenForLoggedInUser(t, session) 106 107 req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/forks", &api.CreateForkOption{}).AddTokenAuth(token) 108 session.MakeRequest(t, req, http.StatusNotFound) 109 }) 110} 111 112func TestAPIForkListPrivateRepo(t *testing.T) { 113 defer tests.PrepareTestEnv(t)() 114 115 session := loginUser(t, "user5") 116 token := getTokenForLoggedInUser(t, session, 117 auth_model.AccessTokenScopeWriteRepository, 118 auth_model.AccessTokenScopeWriteOrganization) 119 org23 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 23, Visibility: api.VisibleTypePrivate}) 120 121 req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/forks", &api.CreateForkOption{ 122 Organization: &org23.Name, 123 }).AddTokenAuth(token) 124 MakeRequest(t, req, http.StatusAccepted) 125 126 t.Run("Anonymous", func(t *testing.T) { 127 defer tests.PrintCurrentTest(t)() 128 129 req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/forks") 130 resp := MakeRequest(t, req, http.StatusOK) 131 132 var forks []*api.Repository 133 DecodeJSON(t, resp, &forks) 134 135 assert.Empty(t, forks) 136 assert.Equal(t, "0", resp.Header().Get("X-Total-Count")) 137 }) 138 139 t.Run("Logged in", func(t *testing.T) { 140 defer tests.PrintCurrentTest(t)() 141 142 req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/forks").AddTokenAuth(token) 143 resp := MakeRequest(t, req, http.StatusOK) 144 145 var forks []*api.Repository 146 DecodeJSON(t, resp, &forks) 147 148 assert.Len(t, forks, 1) 149 assert.Equal(t, "1", resp.Header().Get("X-Total-Count")) 150 }) 151}