99 lines
2.6 KiB
Go
99 lines
2.6 KiB
Go
package ws
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func newTestRequest(method, path string) *http.Request {
|
|
req := httptest.NewRequest(method, path, nil)
|
|
return req
|
|
}
|
|
|
|
func TestDefaultHeartbeatConfig(t *testing.T) {
|
|
cfg := DefaultHeartbeatConfig()
|
|
assert.NotNil(t, cfg)
|
|
assert.Equal(t, 30*time.Second, cfg.PingInterval)
|
|
assert.Equal(t, 10*time.Second, cfg.WriteTimeout)
|
|
assert.Equal(t, 10*time.Second, cfg.PresenceRefreshInterval)
|
|
assert.Equal(t, 30*time.Second, cfg.PresenceCleanupInterval)
|
|
}
|
|
|
|
func TestParseWSQueryParams(t *testing.T) {
|
|
query := url.Values{}
|
|
query.Set("account_id", "1")
|
|
query.Set("conversation_id", "42")
|
|
query.Set("inbox_id", "3")
|
|
query.Set("pubsub_token", "abc123")
|
|
query.Set("user_id", "5")
|
|
query.Set("token", "jwt-token")
|
|
query.Set("ignored_param", "should_not_appear")
|
|
|
|
params := ParseWSQueryParams(query)
|
|
|
|
assert.Equal(t, "1", params["account_id"])
|
|
assert.Equal(t, "42", params["conversation_id"])
|
|
assert.Equal(t, "3", params["inbox_id"])
|
|
assert.Equal(t, "abc123", params["pubsub_token"])
|
|
assert.Equal(t, "5", params["user_id"])
|
|
assert.Equal(t, "jwt-token", params["token"])
|
|
_, exists := params["ignored_param"]
|
|
assert.False(t, exists)
|
|
}
|
|
|
|
func TestParseWSQueryParams_Empty(t *testing.T) {
|
|
query := url.Values{}
|
|
params := ParseWSQueryParams(query)
|
|
assert.Empty(t, params)
|
|
}
|
|
|
|
func TestExtractWSToken_QueryToken(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
c, _ := gin.CreateTestContext(nil)
|
|
c.Request = newTestRequest("GET", "/ws?token=abc123")
|
|
token := extractWSToken(c)
|
|
assert.Equal(t, "abc123", token)
|
|
}
|
|
|
|
func TestExtractWSToken_AccessToken(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
c, _ := gin.CreateTestContext(nil)
|
|
c.Request = newTestRequest("GET", "/ws?access-token=xyz789")
|
|
token := extractWSToken(c)
|
|
assert.Equal(t, "xyz789", token)
|
|
}
|
|
|
|
func TestExtractWSToken_BearerHeader(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
c, _ := gin.CreateTestContext(nil)
|
|
c.Request = newTestRequest("GET", "/ws")
|
|
c.Request.Header.Set("Authorization", "Bearer bearer-token")
|
|
token := extractWSToken(c)
|
|
assert.Equal(t, "bearer-token", token)
|
|
}
|
|
|
|
func TestExtractWSToken_None(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
c, _ := gin.CreateTestContext(nil)
|
|
c.Request = newTestRequest("GET", "/ws")
|
|
token := extractWSToken(c)
|
|
assert.Equal(t, "", token)
|
|
}
|
|
|
|
func TestWSClaims_JSON(t *testing.T) {
|
|
claims := WSClaims{
|
|
UserID: 1,
|
|
AccountID: 2,
|
|
Role: "agent",
|
|
}
|
|
assert.Equal(t, uint(1), claims.UserID)
|
|
assert.Equal(t, uint(2), claims.AccountID)
|
|
assert.Equal(t, "agent", claims.Role)
|
|
}
|