mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-03 01:01:56 +08:00
67 lines
2.2 KiB
Go
67 lines
2.2 KiB
Go
|
|
//
|
||
|
|
// Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
|
||
|
|
//
|
||
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
|
// you may not use this file except in compliance with the License.
|
||
|
|
// You may obtain a copy of the License at
|
||
|
|
//
|
||
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
//
|
||
|
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
|
// See the License for the specific language governing permissions and
|
||
|
|
// limitations under the License.
|
||
|
|
//
|
||
|
|
|
||
|
|
package handler
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"net/http"
|
||
|
|
"net/http/httptest"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
|
||
|
|
"ragflow/internal/common"
|
||
|
|
)
|
||
|
|
|
||
|
|
// TestBetaAuthMiddleware_MissingHeader pins the no-header branch —
|
||
|
|
// the middleware must short-circuit with 401/CodeUnauthorized and
|
||
|
|
// must not call into UserService. The other branches (regular JWT
|
||
|
|
// and beta token) require a live DB to resolve, so they are covered
|
||
|
|
// by the cross-cutting TestBotRoutes_RequireAuth criterion in
|
||
|
|
// bot_test.go.
|
||
|
|
func TestBetaAuthMiddleware_MissingHeader(t *testing.T) {
|
||
|
|
gin.SetMode(gin.TestMode)
|
||
|
|
ah := &AuthHandler{userService: nil}
|
||
|
|
rec := httptest.NewRecorder()
|
||
|
|
c, _ := gin.CreateTestContext(rec)
|
||
|
|
c.Request = httptest.NewRequest(http.MethodGet, "/", nil)
|
||
|
|
|
||
|
|
mw := ah.BetaAuthMiddleware()
|
||
|
|
mw(c)
|
||
|
|
|
||
|
|
if !c.IsAborted() {
|
||
|
|
t.Fatalf("context not aborted, want aborted (no Authorization header)")
|
||
|
|
}
|
||
|
|
if rec.Code != http.StatusOK {
|
||
|
|
t.Errorf("status = %d, want %d", rec.Code, http.StatusOK)
|
||
|
|
}
|
||
|
|
// jsonError writes 200 with a CodeUnauthorized body. Confirm the
|
||
|
|
// body shape matches the wire contract used by the rest of the
|
||
|
|
// bot handlers by decoding the JSON envelope and asserting the
|
||
|
|
// code field rather than just checking for a non-empty body.
|
||
|
|
var resp struct {
|
||
|
|
Code common.ErrorCode `json:"code"`
|
||
|
|
}
|
||
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil {
|
||
|
|
t.Fatalf("unmarshal response: %v; body = %s", err, rec.Body.String())
|
||
|
|
}
|
||
|
|
if resp.Code != common.CodeUnauthorized {
|
||
|
|
t.Errorf("code = %d, want %d; body = %s",
|
||
|
|
resp.Code, common.CodeUnauthorized, rec.Body.String())
|
||
|
|
}
|
||
|
|
}
|