@@ -8,37 +8,97 @@ import (
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"
14
15
15
16
"github.com/stretchr/testify/assert"
17
+ "github.com/stretchr/testify/require"
16
18
)
17
19
18
20
func TestAdminUserCreate (t * testing.T ) {
19
21
app := NewMainApp (AppVersion {})
20
22
21
23
reset := func () {
22
- assert .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.User {}))
23
- assert .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.EmailAddress {}))
24
+ require .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.User {}))
25
+ require .NoError (t , db .TruncateBeans (db .DefaultContext , & user_model.EmailAddress {}))
26
+ require .NoError (t , db .TruncateBeans (db .DefaultContext , & auth_model.AccessToken {}))
24
27
}
28
+ t .Run ("MustChangePassword" , func (t * testing.T ) {
29
+ type check struct { IsAdmin , MustChangePassword bool }
30
+ createCheck := func (name , args string ) check {
31
+ assert .
NoError (
t ,
app .
Run (
strings .
Fields (
fmt .
Sprintf (
"./gitea admin user create --username %s --email %[email protected] %s --password foobar" ,
name ,
name ,
args ))))
32
+ u := unittest .AssertExistsAndLoadBean (t , & user_model.User {LowerName : name })
33
+ return check {u .IsAdmin , u .MustChangePassword }
34
+ }
35
+ reset ()
36
+ assert .Equal (t , check {IsAdmin : false , MustChangePassword : false }, createCheck ("u" , "" ), "first non-admin user doesn't need to change password" )
25
37
26
- type createCheck struct { IsAdmin , MustChangePassword bool }
27
- createUser := func (name , args string ) createCheck {
28
- assert .
NoError (
t ,
app .
Run (
strings .
Fields (
fmt .
Sprintf (
"./gitea admin user create --username %s --email %[email protected] %s --password foobar" ,
name ,
name ,
args ))))
29
- u := unittest .AssertExistsAndLoadBean (t , & user_model.User {LowerName : name })
30
- return createCheck {u .IsAdmin , u .MustChangePassword }
38
+ reset ()
39
+ assert .Equal (t , check {IsAdmin : true , MustChangePassword : false }, createCheck ("u" , "--admin" ), "first admin user doesn't need to change password" )
40
+
41
+ reset ()
42
+ assert .Equal (t , check {IsAdmin : true , MustChangePassword : true }, createCheck ("u" , "--admin --must-change-password" ))
43
+ assert .Equal (t , check {IsAdmin : true , MustChangePassword : true }, createCheck ("u2" , "--admin" ))
44
+ assert .Equal (t , check {IsAdmin : true , MustChangePassword : false }, createCheck ("u3" , "--admin --must-change-password=false" ))
45
+ assert .Equal (t , check {IsAdmin : false , MustChangePassword : true }, createCheck ("u4" , "" ))
46
+ assert .Equal (t , check {IsAdmin : false , MustChangePassword : false }, createCheck ("u5" , "--must-change-password=false" ))
47
+ })
48
+
49
+ createUser := func (name , args string ) error {
50
+ return app .
Run (
strings .
Fields (
fmt .
Sprintf (
"./gitea admin user create --username %s --email %[email protected] %s" ,
name ,
name ,
args )))
31
51
}
32
- reset ()
33
- assert .Equal (t , createCheck {IsAdmin : false , MustChangePassword : false }, createUser ("u" , "" ), "first non-admin user doesn't need to change password" )
34
-
35
- reset ()
36
- assert .Equal (t , createCheck {IsAdmin : true , MustChangePassword : false }, createUser ("u" , "--admin" ), "first admin user doesn't need to change password" )
37
-
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" ))
52
+
53
+ t .Run ("AccessToken" , func (t * testing.T ) {
54
+ // no generated access token
55
+ reset ()
56
+ assert .NoError (t , createUser ("u" , "--random-password" ))
57
+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
58
+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
59
+
60
+ // using "--access-token" only means "all" access
61
+ reset ()
62
+ assert .NoError (t , createUser ("u" , "--random-password --access-token" ))
63
+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
64
+ assert .Equal (t , 1 , unittest .GetCount (t , & auth_model.AccessToken {}))
65
+ accessToken := unittest .AssertExistsAndLoadBean (t , & auth_model.AccessToken {Name : "gitea-admin" })
66
+ hasScopes , err := accessToken .Scope .HasScope (auth_model .AccessTokenScopeWriteAdmin , auth_model .AccessTokenScopeWriteRepository )
67
+ assert .NoError (t , err )
68
+ assert .True (t , hasScopes )
69
+
70
+ // using "--access-token" with name & scopes
71
+ reset ()
72
+ assert .NoError (t , createUser ("u" , "--random-password --access-token --access-token-name new-token-name --access-token-scopes read:issue,read:user" ))
73
+ assert .Equal (t , 1 , unittest .GetCount (t , & user_model.User {}))
74
+ assert .Equal (t , 1 , unittest .GetCount (t , & auth_model.AccessToken {}))
75
+ accessToken = unittest .AssertExistsAndLoadBean (t , & auth_model.AccessToken {Name : "new-token-name" })
76
+ hasScopes , err = accessToken .Scope .HasScope (auth_model .AccessTokenScopeReadIssue , auth_model .AccessTokenScopeReadUser )
77
+ assert .NoError (t , err )
78
+ assert .True (t , hasScopes )
79
+ hasScopes , err = accessToken .Scope .HasScope (auth_model .AccessTokenScopeWriteAdmin , auth_model .AccessTokenScopeWriteRepository )
80
+ assert .NoError (t , err )
81
+ assert .False (t , hasScopes )
82
+
83
+ // using "--access-token-name" without "--access-token"
84
+ reset ()
85
+ err = createUser ("u" , "--random-password --access-token-name new-token-name" )
86
+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
87
+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
88
+ assert .ErrorContains (t , err , "access-token-name and access-token-scopes flags are only valid when access-token flag is set" )
89
+
90
+ // using "--access-token-scopes" without "--access-token"
91
+ reset ()
92
+ err = createUser ("u" , "--random-password --access-token-scopes read:issue" )
93
+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
94
+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
95
+ assert .ErrorContains (t , err , "access-token-name and access-token-scopes flags are only valid when access-token flag is set" )
96
+
97
+ // empty permission
98
+ reset ()
99
+ err = createUser ("u" , "--random-password --access-token --access-token-scopes public-only" )
100
+ assert .Equal (t , 0 , unittest .GetCount (t , & user_model.User {}))
101
+ assert .Equal (t , 0 , unittest .GetCount (t , & auth_model.AccessToken {}))
102
+ assert .ErrorContains (t , err , "access token does not have any permission" )
103
+ })
44
104
}
0 commit comments