feat: add chat
This commit is contained in:
@@ -3,6 +3,7 @@ package handler
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
@@ -77,6 +78,44 @@ func TestBroadcastingAuth_Authorization(t *testing.T) {
|
||||
|
||||
// A prefix match must not be mistaken for authorization: "…user-a-evil" starts
|
||||
// with the victim's id but is a different channel.
|
||||
// ConversationRule delegates to the chat service's membership check, so the
|
||||
// realtime channel and the REST endpoints can never disagree about who is in a
|
||||
// thread.
|
||||
func TestConversationRule(t *testing.T) {
|
||||
const member, outsider = "member-1", "outsider-1"
|
||||
rule := ConversationRule(func(_ context.Context, userID, conversationID string) (bool, error) {
|
||||
if conversationID == "boom" {
|
||||
return false, errors.New("database down")
|
||||
}
|
||||
return userID == member && conversationID == "conv-1", nil
|
||||
})
|
||||
|
||||
if rule.Prefix != "private-conversation." {
|
||||
t.Errorf("prefix = %q", rule.Prefix)
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
user string
|
||||
suffix string
|
||||
wantOK bool
|
||||
wantErr bool
|
||||
}{
|
||||
{"participant", member, "conv-1", true, false},
|
||||
{"outsider", outsider, "conv-1", false, false},
|
||||
{"participant of another thread", member, "conv-2", false, false},
|
||||
{"empty conversation id", member, "", false, false},
|
||||
{"lookup failure is not a denial", member, "boom", false, true},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
ok, err := rule.Authorize(context.Background(), tc.user, tc.suffix)
|
||||
if ok != tc.wantOK || (err != nil) != tc.wantErr {
|
||||
t.Errorf("= (%v, %v), want (%v, err=%v)", ok, err, tc.wantOK, tc.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestBroadcastingAuth_SuffixIsComparedExactly(t *testing.T) {
|
||||
rec := serve(t, testAuthHandler(t), testUser, "1234.5678", "private-notifications."+testUser+"-evil")
|
||||
if rec.Code != http.StatusForbidden {
|
||||
|
||||
Reference in New Issue
Block a user