test: cover the chat access policy and bootstrap guards
ChatAccess admits only chat-group members to context bm/1 and manages nothing; the chat context oversees nothing and its loader knows only id 1; /chat and /chat/members need a caller and a database. The migration count rises to 15 for the chat group seed.
This commit is contained in:
46
controllers/api/chat_test.go
Normal file
46
controllers/api/chat_test.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package api_test
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"git.golem15.com/golem15/summercms/modules/bouncer"
|
||||
"git.golem15.com/jakub/sm-bm-plugin/controllers/api"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// chatNoDB is a chat-enabled Handlers whose database is never published.
|
||||
func chatNoDB() *api.Handlers {
|
||||
return &api.Handlers{DB: func() *gorm.DB { return nil }, ChatGroup: "studenci", ChatModeratorGroup: "moderatorzy"}
|
||||
}
|
||||
|
||||
func TestChatBootstrapUnauthenticated(t *testing.T) {
|
||||
code, body := serve(t, chatNoDB().Chat, http.MethodGet, "/", nil, nil)
|
||||
if code != http.StatusUnauthorized || body["error"] != true {
|
||||
t.Errorf("GET /chat without a principal = %d %v, want 401", code, body)
|
||||
}
|
||||
}
|
||||
|
||||
func TestChatBootstrapNoDatabase(t *testing.T) {
|
||||
code, body := serve(t, chatNoDB().Chat, http.MethodGet, "/", &bouncer.Principal{ID: 7}, nil)
|
||||
if code != http.StatusServiceUnavailable || body["message"] != "Database unavailable." {
|
||||
t.Errorf("GET /chat without a database = %d %v, want 503 Database unavailable.", code, body)
|
||||
}
|
||||
if _, ok := body["data"]; ok {
|
||||
t.Errorf("GET /chat without a database carries data: %v", body)
|
||||
}
|
||||
}
|
||||
|
||||
func TestChatMembersUnauthenticated(t *testing.T) {
|
||||
code, body := serve(t, chatNoDB().ChatMembers, http.MethodGet, "/", nil, nil)
|
||||
if code != http.StatusUnauthorized || body["error"] != true {
|
||||
t.Errorf("GET /chat/members without a principal = %d %v, want 401", code, body)
|
||||
}
|
||||
}
|
||||
|
||||
func TestChatMembersNoDatabase(t *testing.T) {
|
||||
code, body := serve(t, chatNoDB().ChatMembers, http.MethodGet, "/", &bouncer.Principal{ID: 7}, nil)
|
||||
if code != http.StatusServiceUnavailable {
|
||||
t.Errorf("GET /chat/members without a database = %d %v, want 503", code, body)
|
||||
}
|
||||
}
|
||||
@@ -55,6 +55,8 @@ func handlers(h *api.Handlers) map[string]http.HandlerFunc {
|
||||
"feed-put": h.UpdateCalendarFeed,
|
||||
"rotate": h.RotateCalendarFeed,
|
||||
"feed-del": h.DeleteCalendarFeed,
|
||||
"chat": h.Chat,
|
||||
"chat-mem": h.ChatMembers,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user