1
- // Copyright 2019 The Gitea Authors. All rights reserved.
1
+ // Copyright 2025 The Gitea Authors. All rights reserved.
2
2
// SPDX-License-Identifier: MIT
3
3
4
4
package repository
@@ -14,11 +14,14 @@ import (
14
14
repo_model "code.gitea.io/gitea/models/repo"
15
15
"code.gitea.io/gitea/models/unittest"
16
16
user_model "code.gitea.io/gitea/models/user"
17
+ "code.gitea.io/gitea/modules/setting"
18
+ "code.gitea.io/gitea/modules/test"
17
19
"code.gitea.io/gitea/modules/util"
18
20
"code.gitea.io/gitea/services/feed"
19
21
notify_service "code.gitea.io/gitea/services/notify"
20
22
21
23
"github.com/stretchr/testify/assert"
24
+ "github.com/stretchr/testify/require"
22
25
)
23
26
24
27
var notifySync sync.Once
@@ -125,3 +128,40 @@ func TestRepositoryTransfer(t *testing.T) {
125
128
err = RejectRepositoryTransfer (db .DefaultContext , repo2 , doer )
126
129
assert .True (t , repo_model .IsErrNoPendingTransfer (err ))
127
130
}
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 : 3 })
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