8
8
"strings"
9
9
"testing"
10
10
11
+ auth_model "code.gitea.io/gitea/models/auth"
11
12
"code.gitea.io/gitea/models/db"
12
13
"code.gitea.io/gitea/models/unittest"
13
14
user_model "code.gitea.io/gitea/models/user"
@@ -22,6 +23,7 @@ func TestAdminUserCreate(t *testing.T) {
22
23
reset := func () {
23
24
require .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.User {}))
24
25
require .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.EmailAddress {}))
26
+ require .NoError (t , db .TruncateBeans (db .DefaultContext , & auth_model.AccessToken {}))
25
27
}
26
28
27
29
t .Run ("MustChangePassword" , func (t * testing.T ) {
@@ -48,11 +50,11 @@ func TestAdminUserCreate(t *testing.T) {
48
50
assert .Equal (t , check {IsAdmin : false , MustChangePassword : false }, createCheck ("u5" , "--must-change-password=false" ))
49
51
})
50
52
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
+ }
55
56
57
+ t .Run ("UserType" , func (t * testing.T ) {
56
58
reset ()
57
59
assert .ErrorContains (t , createUser ("u" , "--user-type invalid" ), "invalid user type" )
58
60
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) {
63
65
assert .Equal (t , user_model .UserTypeBot , u .Type )
64
66
assert .Empty (t , u .Passwd )
65
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" )
119
+ })
66
120
}
0 commit comments