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"
@@ -22,6 +23,7 @@ func TestAdminUserCreate(t *testing.T) {
2223 reset := func () {
2324 require .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.User {}))
2425 require .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.EmailAddress {}))
26+ require .NoError (t , db .TruncateBeans (db .DefaultContext , & auth_model.AccessToken {}))
2527 }
2628
2729 t .Run ("MustChangePassword" , func (t * testing.T ) {
@@ -48,11 +50,11 @@ func TestAdminUserCreate(t *testing.T) {
4850 assert .Equal (t , check {IsAdmin : false , MustChangePassword : false }, createCheck ("u5" , "--must-change-password=false" ))
4951 })
5052
51- t .Run ("UserType" , func (t * testing.T ) {
52- createUser := func (name , args string ) error {
53- return app .
Run (
strings .
Fields (
fmt .
Sprintf (
"./gitea admin user create --username %s --email %[email protected] %s" ,
name ,
name ,
args )))
54- }
53+ createUser := func (name , args string ) error {
54+ return app .
Run (
strings .
Fields (
fmt .
Sprintf (
"./gitea admin user create --username %s --email %[email protected] %s" ,
name ,
name ,
args )))
55+ }
5556
57+ t .Run ("UserType" , func (t * testing.T ) {
5658 reset ()
5759 assert .ErrorContains (t , createUser ("u" , "--user-type invalid" ), "invalid user type" )
5860 assert .ErrorContains (t , createUser ("u" , "--user-type bot --password 123" ), "can only be set for individual users" )
@@ -61,6 +63,58 @@ func TestAdminUserCreate(t *testing.T) {
6163 assert .NoError (t , createUser ("u" , "--user-type bot" ))
6264 u := unittest .AssertExistsAndLoadBean (t , & user_model.User {LowerName : "u" })
6365 assert .Equal (t , user_model .UserTypeBot , u .Type )
64- assert .Equal (t , "" , u .Passwd )
66+ assert .Empty (t , u .Passwd )
67+ })
68+
69+ t .Run ("AccessToken" , func (t * testing.T ) {
70+ // no generated access token
71+ reset ()
72+ assert .NoError (t , createUser ("u" , "--random-password" ))
73+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
74+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
75+
76+ // using "--access-token" only means "all" access
77+ reset ()
78+ assert .NoError (t , createUser ("u" , "--random-password --access-token" ))
79+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
80+ assert .Equal (t , 1 , unittest .GetCount (t , & auth_model.AccessToken {}))
81+ accessToken := unittest .AssertExistsAndLoadBean (t , & auth_model.AccessToken {Name : "gitea-admin" })
82+ hasScopes , err := accessToken .Scope .HasScope (auth_model .AccessTokenScopeWriteAdmin , auth_model .AccessTokenScopeWriteRepository )
83+ assert .NoError (t , err )
84+ assert .True (t , hasScopes )
85+
86+ // using "--access-token" with name & scopes
87+ reset ()
88+ assert .NoError (t , createUser ("u" , "--random-password --access-token --access-token-name new-token-name --access-token-scopes read:issue,read:user" ))
89+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
90+ assert .Equal (t , 1 , unittest .GetCount (t , & auth_model.AccessToken {}))
91+ accessToken = unittest .AssertExistsAndLoadBean (t , & auth_model.AccessToken {Name : "new-token-name" })
92+ hasScopes , err = accessToken .Scope .HasScope (auth_model .AccessTokenScopeReadIssue , auth_model .AccessTokenScopeReadUser )
93+ assert .NoError (t , err )
94+ assert .True (t , hasScopes )
95+ hasScopes , err = accessToken .Scope .HasScope (auth_model .AccessTokenScopeWriteAdmin , auth_model .AccessTokenScopeWriteRepository )
96+ assert .NoError (t , err )
97+ assert .False (t , hasScopes )
98+
99+ // using "--access-token-name" without "--access-token"
100+ reset ()
101+ err = createUser ("u" , "--random-password --access-token-name new-token-name" )
102+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
103+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
104+ assert .ErrorContains (t , err , "access-token-name and access-token-scopes flags are only valid when access-token flag is set" )
105+
106+ // using "--access-token-scopes" without "--access-token"
107+ reset ()
108+ err = createUser ("u" , "--random-password --access-token-scopes read:issue" )
109+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
110+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
111+ assert .ErrorContains (t , err , "access-token-name and access-token-scopes flags are only valid when access-token flag is set" )
112+
113+ // empty permission
114+ reset ()
115+ err = createUser ("u" , "--random-password --access-token --access-token-scopes public-only" )
116+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
117+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
118+ assert .ErrorContains (t , err , "access token does not have any permission" )
65119 })
66120}
0 commit comments