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"
@@ -19,8 +20,9 @@ func TestAdminUserCreate(t *testing.T) {
19
20
app := NewMainApp (AppVersion {})
20
21
21
22
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 {}))
24
26
}
25
27
26
28
type createCheck struct { IsAdmin , MustChangePassword bool }
@@ -35,10 +37,79 @@ func TestAdminUserCreate(t *testing.T) {
35
37
reset ()
36
38
assert .Equal (t , createCheck {IsAdmin : true , MustChangePassword : false }, createUser ("u" , "--admin" ), "first admin user doesn't need to change password" )
37
39
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
+ })
44
115
}
0 commit comments