@@ -19,6 +19,7 @@ import (
1919 "code.gitea.io/gitea/modules/optional"
2020 "code.gitea.io/gitea/modules/setting"
2121 "code.gitea.io/gitea/modules/structs"
22+ "code.gitea.io/gitea/modules/test"
2223 "code.gitea.io/gitea/modules/timeutil"
2324
2425 "github.com/stretchr/testify/assert"
@@ -616,3 +617,37 @@ func TestGetInactiveUsers(t *testing.T) {
616617 assert .NoError (t , err )
617618 assert .Empty (t , users )
618619}
620+
621+ func TestCanCreateRepo (t * testing.T ) {
622+ defer test .MockVariableValue (& setting .Repository .MaxCreationLimit )()
623+ const noLimit = - 1
624+ doerNormal := & user_model.User {}
625+ doerAdmin := & user_model.User {IsAdmin : true }
626+ t .Run ("NoGlobalLimit" , func (t * testing.T ) {
627+ setting .Repository .MaxCreationLimit = noLimit
628+
629+ assert .True (t , doerNormal .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : noLimit }))
630+ assert .False (t , doerNormal .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : 0 }))
631+ assert .True (t , doerNormal .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : 100 }))
632+
633+ assert .True (t , doerAdmin .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : noLimit }))
634+ assert .True (t , doerAdmin .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : 0 }))
635+ assert .True (t , doerAdmin .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : 100 }))
636+ })
637+
638+ t .Run ("GlobalLimit50" , func (t * testing.T ) {
639+ setting .Repository .MaxCreationLimit = 50
640+
641+ assert .True (t , doerNormal .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : noLimit }))
642+ assert .False (t , doerNormal .CanCreateRepoIn (& user_model.User {NumRepos : 60 , MaxRepoCreation : noLimit })) // limited by global limit
643+ assert .False (t , doerNormal .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : 0 }))
644+ assert .True (t , doerNormal .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : 100 }))
645+ assert .True (t , doerNormal .CanCreateRepoIn (& user_model.User {NumRepos : 60 , MaxRepoCreation : 100 }))
646+
647+ assert .True (t , doerAdmin .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : noLimit }))
648+ assert .True (t , doerAdmin .CanCreateRepoIn (& user_model.User {NumRepos : 60 , MaxRepoCreation : noLimit }))
649+ assert .True (t , doerAdmin .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : 0 }))
650+ assert .True (t , doerAdmin .CanCreateRepoIn (& user_model.User {NumRepos : 10 , MaxRepoCreation : 100 }))
651+ assert .True (t , doerAdmin .CanCreateRepoIn (& user_model.User {NumRepos : 60 , MaxRepoCreation : 100 }))
652+ })
653+ }
0 commit comments