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 %s@gitea.local %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 %s@gitea.local %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" )
@@ -63,4 +65,56 @@ func TestAdminUserCreate(t *testing.T) {
6365 assert .Equal (t , user_model .UserTypeBot , u .Type )
6466 assert .Empty (t , u .Passwd )
6567 })
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" )
119+ })
66120}
0 commit comments