@@ -3,7 +3,6 @@ package api_test
33import (
44 "net/http"
55 "testing"
6- "time"
76
87 "github.com/dagu-org/dagu/api/v1"
98 "github.com/dagu-org/dagu/internal/cmn/config"
@@ -12,54 +11,64 @@ import (
1211
1312func setupAuditTestServer (t * testing.T ) test.Server {
1413 t .Helper ()
15- return test .SetupServer (t , test .WithConfigMutator (func (cfg * config.Config ) {
16- cfg .Server .Auth .Mode = config .AuthModeBuiltin
17- cfg .Server .Auth .Builtin .Admin .Username = "admin"
18- cfg .Server .Auth .Builtin .Admin .Password = "adminpass"
19- cfg .Server .Auth .Builtin .Token .Secret = "jwt-secret-key"
20- cfg .Server .Auth .Builtin .Token .TTL = 24 * time .Hour
14+ return setupWebhookTestServer (t , func (cfg * config.Config ) {
2115 cfg .Server .Audit .Enabled = true
22- }))
16+ })
2317}
2418
2519func TestAudit_RequiresManagerOrAbove (t * testing.T ) {
2620 t .Parallel ()
2721 server := setupAuditTestServer (t )
2822 adminToken := getWebhookAdminToken (t , server )
2923
30- server .Client ().Post ("/api/v1/users" , api.CreateUserRequest {
31- Username : "manager-user" ,
32- Password : "manager1" ,
33- Role : api .UserRoleManager ,
34- }).WithBearerToken (adminToken ).ExpectStatus (http .StatusCreated ).Send (t )
24+ // Create users for each role below manager.
25+ for _ , u := range []struct {
26+ username string
27+ password string
28+ role api.UserRole
29+ }{
30+ {"manager-user" , "manager1" , api .UserRoleManager },
31+ {"developer-user" , "developer1" , api .UserRoleDeveloper },
32+ {"operator-user" , "operator1" , api .UserRoleOperator },
33+ {"viewer-user" , "viewerpass1" , api .UserRoleViewer },
34+ } {
35+ server .Client ().Post ("/api/v1/users" , api.CreateUserRequest {
36+ Username : u .username ,
37+ Password : u .password ,
38+ Role : u .role ,
39+ }).WithBearerToken (adminToken ).ExpectStatus (http .StatusCreated ).Send (t )
40+ }
3541
36- server .Client ().Post ("/api/v1/users" , api.CreateUserRequest {
37- Username : "developer-user" ,
38- Password : "developer1" ,
39- Role : api .UserRoleDeveloper ,
40- }).WithBearerToken (adminToken ).ExpectStatus (http .StatusCreated ).Send (t )
42+ login := func (username , password string ) string {
43+ resp := server .Client ().Post ("/api/v1/auth/login" , api.LoginRequest {
44+ Username : username ,
45+ Password : password ,
46+ }).ExpectStatus (http .StatusOK ).Send (t )
47+ var result api.LoginResponse
48+ resp .Unmarshal (t , & result )
49+ return result .Token
50+ }
4151
42- managerResp := server . Client (). Post ( "/api/v1/auth/login " , api. LoginRequest {
43- Username : "manager -user" ,
44- Password : "manager1" ,
45- }). ExpectStatus ( http . StatusOK ). Send ( t )
52+ managerToken := login ( "manager-user " , "manager1" )
53+ developerToken := login ( "developer -user" , "developer1" )
54+ operatorToken := login ( "operator-user" , "operator1" )
55+ viewerToken := login ( "viewer-user" , "viewerpass1" )
4656
47- var managerLogin api.LoginResponse
48- managerResp .Unmarshal (t , & managerLogin )
49-
50- developerResp := server .Client ().Post ("/api/v1/auth/login" , api.LoginRequest {
51- Username : "developer-user" ,
52- Password : "developer1" ,
53- }).ExpectStatus (http .StatusOK ).Send (t )
57+ // Manager can access audit endpoint.
58+ server .Client ().Get ("/api/v1/audit" ).
59+ WithBearerToken (managerToken ).
60+ ExpectStatus (http .StatusOK ).Send (t )
5461
55- var developerLogin api.LoginResponse
56- developerResp .Unmarshal (t , & developerLogin )
62+ // Developer, operator, and viewer are forbidden.
63+ server .Client ().Get ("/api/v1/audit" ).
64+ WithBearerToken (developerToken ).
65+ ExpectStatus (http .StatusForbidden ).Send (t )
5766
5867 server .Client ().Get ("/api/v1/audit" ).
59- WithBearerToken (managerLogin . Token ).
60- ExpectStatus (http .StatusOK ).Send (t )
68+ WithBearerToken (operatorToken ).
69+ ExpectStatus (http .StatusForbidden ).Send (t )
6170
6271 server .Client ().Get ("/api/v1/audit" ).
63- WithBearerToken (developerLogin . Token ).
72+ WithBearerToken (viewerToken ).
6473 ExpectStatus (http .StatusForbidden ).Send (t )
6574}
0 commit comments