1- // Copyright 2019 The Gitea Authors. All rights reserved.
1+ // Copyright 2025 The Gitea Authors. All rights reserved.
22// SPDX-License-Identifier: MIT
33
44package repository
@@ -14,11 +14,14 @@ import (
1414 repo_model "code.gitea.io/gitea/models/repo"
1515 "code.gitea.io/gitea/models/unittest"
1616 user_model "code.gitea.io/gitea/models/user"
17+ "code.gitea.io/gitea/modules/setting"
18+ "code.gitea.io/gitea/modules/test"
1719 "code.gitea.io/gitea/modules/util"
1820 "code.gitea.io/gitea/services/feed"
1921 notify_service "code.gitea.io/gitea/services/notify"
2022
2123 "github.com/stretchr/testify/assert"
24+ "github.com/stretchr/testify/require"
2225)
2326
2427var notifySync sync.Once
@@ -125,3 +128,40 @@ func TestRepositoryTransfer(t *testing.T) {
125128 err = RejectRepositoryTransfer (db .DefaultContext , repo2 , doer )
126129 assert .True (t , repo_model .IsErrNoPendingTransfer (err ))
127130}
131+
132+ // Test transfer rejections
133+ func TestRepositoryTransferRejection (t * testing.T ) {
134+ require .NoError (t , unittest .PrepareTestDatabase ())
135+ // Set limit to 0 repositories so no repositories can be transferred
136+ defer test .MockVariableValue (& setting .Repository .MaxCreationLimit , 0 )()
137+
138+ // Admin case
139+ doerAdmin := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 1 })
140+ repo := unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 5 })
141+
142+ transfer , err := repo_model .GetPendingRepositoryTransfer (db .DefaultContext , repo )
143+ require .NoError (t , err )
144+ require .NotNil (t , transfer )
145+ require .NoError (t , transfer .LoadRecipient (db .DefaultContext ))
146+
147+ require .True (t , transfer .Recipient .CanCreateRepo ()) // admin is not subject to limits
148+
149+ // Administrator should not be affected by the limits so transfer should be successful
150+ assert .NoError (t , AcceptTransferOwnership (db .DefaultContext , repo , doerAdmin ))
151+
152+ // Non admin user case
153+ doer := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 10 })
154+ repo = unittest .AssertExistsAndLoadBean (t , & repo_model.Repository {ID : 21 })
155+
156+ transfer , err = repo_model .GetPendingRepositoryTransfer (db .DefaultContext , repo )
157+ require .NoError (t , err )
158+ require .NotNil (t , transfer )
159+ require .NoError (t , transfer .LoadRecipient (db .DefaultContext ))
160+
161+ require .False (t , transfer .Recipient .CanCreateRepo ()) // regular user is subject to limits
162+
163+ // Cannot accept because of the limit
164+ err = AcceptTransferOwnership (db .DefaultContext , repo , doer )
165+ assert .Error (t , err )
166+ assert .True (t , IsRepositoryLimitReached (err ))
167+ }
0 commit comments