88 "strings"
99 "testing"
1010
11+ auth_model "code.gitea.io/gitea/models/auth"
1112 "code.gitea.io/gitea/models/db"
1213 "code.gitea.io/gitea/models/unittest"
1314 user_model "code.gitea.io/gitea/models/user"
@@ -19,8 +20,9 @@ func TestAdminUserCreate(t *testing.T) {
1920 app := NewMainApp (AppVersion {})
2021
2122 reset := func () {
22- assert .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.User {}))
23- assert .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.EmailAddress {}))
23+ require .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.User {}))
24+ require .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.EmailAddress {}))
25+ require .NoError (t , db .TruncateBeans (db .DefaultContext , & auth_model.AccessToken {}))
2426 }
2527
2628 type createCheck struct { IsAdmin , MustChangePassword bool }
@@ -35,10 +37,79 @@ func TestAdminUserCreate(t *testing.T) {
3537 reset ()
3638 assert .Equal (t , createCheck {IsAdmin : true , MustChangePassword : false }, createUser ("u" , "--admin" ), "first admin user doesn't need to change password" )
3739
38- reset ()
39- assert .Equal (t , createCheck {IsAdmin : true , MustChangePassword : true }, createUser ("u" , "--admin --must-change-password" ))
40- assert .Equal (t , createCheck {IsAdmin : true , MustChangePassword : true }, createUser ("u2" , "--admin" ))
41- assert .Equal (t , createCheck {IsAdmin : true , MustChangePassword : false }, createUser ("u3" , "--admin --must-change-password=false" ))
42- assert .Equal (t , createCheck {IsAdmin : false , MustChangePassword : true }, createUser ("u4" , "" ))
43- assert .Equal (t , createCheck {IsAdmin : false , MustChangePassword : false }, createUser ("u5" , "--must-change-password=false" ))
40+ reset ()
41+ assert .Equal (t , check {IsAdmin : true , MustChangePassword : true }, createCheck ("u" , "--admin --must-change-password" ))
42+ assert .Equal (t , check {IsAdmin : true , MustChangePassword : true }, createCheck ("u2" , "--admin" ))
43+ assert .Equal (t , check {IsAdmin : true , MustChangePassword : false }, createCheck ("u3" , "--admin --must-change-password=false" ))
44+ assert .Equal (t , check {IsAdmin : false , MustChangePassword : true }, createCheck ("u4" , "" ))
45+ assert .Equal (t , check {IsAdmin : false , MustChangePassword : false }, createCheck ("u5" , "--must-change-password=false" ))
46+ })
47+
48+ createUser := func (name , args string ) error {
49+ return app .
Run (
strings .
Fields (
fmt .
Sprintf (
"./gitea admin user create --username %s --email %[email protected] %s" ,
name ,
name ,
args )))
50+ }
51+
52+ t .Run ("UserType" , func (t * testing.T ) {
53+ reset ()
54+ assert .ErrorContains (t , createUser ("u" , "--user-type invalid" ), "invalid user type" )
55+ assert .ErrorContains (t , createUser ("u" , "--user-type bot --password 123" ), "can only be set for individual users" )
56+ assert .ErrorContains (t , createUser ("u" , "--user-type bot --must-change-password" ), "can only be set for individual users" )
57+
58+ assert .NoError (t , createUser ("u" , "--user-type bot" ))
59+ u := unittest .AssertExistsAndLoadBean (t , & user_model.User {LowerName : "u" })
60+ assert .Equal (t , user_model .UserTypeBot , u .Type )
61+ assert .Empty (t , u .Passwd )
62+ })
63+
64+ t .Run ("AccessToken" , func (t * testing.T ) {
65+ // no generated access token
66+ reset ()
67+ assert .NoError (t , createUser ("u" , "--random-password" ))
68+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
69+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
70+
71+ // using "--access-token" only means "all" access
72+ reset ()
73+ assert .NoError (t , createUser ("u" , "--random-password --access-token" ))
74+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
75+ assert .Equal (t , 1 , unittest .GetCount (t , & auth_model.AccessToken {}))
76+ accessToken := unittest .AssertExistsAndLoadBean (t , & auth_model.AccessToken {Name : "gitea-admin" })
77+ hasScopes , err := accessToken .Scope .HasScope (auth_model .AccessTokenScopeWriteAdmin , auth_model .AccessTokenScopeWriteRepository )
78+ assert .NoError (t , err )
79+ assert .True (t , hasScopes )
80+
81+ // using "--access-token" with name & scopes
82+ reset ()
83+ assert .NoError (t , createUser ("u" , "--random-password --access-token --access-token-name new-token-name --access-token-scopes read:issue,read:user" ))
84+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
85+ assert .Equal (t , 1 , unittest .GetCount (t , & auth_model.AccessToken {}))
86+ accessToken = unittest .AssertExistsAndLoadBean (t , & auth_model.AccessToken {Name : "new-token-name" })
87+ hasScopes , err = accessToken .Scope .HasScope (auth_model .AccessTokenScopeReadIssue , auth_model .AccessTokenScopeReadUser )
88+ assert .NoError (t , err )
89+ assert .True (t , hasScopes )
90+ hasScopes , err = accessToken .Scope .HasScope (auth_model .AccessTokenScopeWriteAdmin , auth_model .AccessTokenScopeWriteRepository )
91+ assert .NoError (t , err )
92+ assert .False (t , hasScopes )
93+
94+ // using "--access-token-name" without "--access-token"
95+ reset ()
96+ err = createUser ("u" , "--random-password --access-token-name new-token-name" )
97+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
98+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
99+ assert .ErrorContains (t , err , "access-token-name and access-token-scopes flags are only valid when access-token flag is set" )
100+
101+ // using "--access-token-scopes" without "--access-token"
102+ reset ()
103+ err = createUser ("u" , "--random-password --access-token-scopes read:issue" )
104+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
105+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
106+ assert .ErrorContains (t , err , "access-token-name and access-token-scopes flags are only valid when access-token flag is set" )
107+
108+ // empty permission
109+ reset ()
110+ err = createUser ("u" , "--random-password --access-token --access-token-scopes public-only" )
111+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
112+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
113+ assert .ErrorContains (t , err , "access token does not have any permission" )
114+ })
44115}
0 commit comments