feat: 方案100%匹配 — RBAC动态权限+Grafana监控+目录库独立微服务+全国目录中心+标识同步
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tcs-iptv/tcs/internal/catalog"
|
||||
"github.com/tcs-iptv/tcs/internal/chain"
|
||||
"github.com/tcs-iptv/tcs/internal/model"
|
||||
)
|
||||
|
||||
func TestCatalogHandler_QueryByMA(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
c := chain.NewMemoryChain()
|
||||
|
||||
// 发码
|
||||
_, err := c.IssueMA(chain.RoleRegulator, chain.IssueRequest{
|
||||
MACode: "MA.156.8531.6101/WD/20260000001", ContentTwinID: "ctid-cat-svc-001",
|
||||
FileHash: "fh-cat-svc-001", MerkleRoot: "mr-cat-svc-001",
|
||||
Content: model.Content{Title: "目录库服务测试", MAType: "WD", Issuer: "测试局"},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
cat := catalog.New(c)
|
||||
h := NewCatalogHandler(cat)
|
||||
|
||||
r := gin.New()
|
||||
rg := r.Group("/api/v1")
|
||||
h.Register(rg)
|
||||
|
||||
// 按 MA 码查询
|
||||
w := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/api/v1/catalog/query-by-ma?ma_code=MA.156.8531.6101/WD/20260000001", nil)
|
||||
r.ServeHTTP(w, req)
|
||||
assert.Equal(t, http.StatusOK, w.Code)
|
||||
|
||||
var resp struct {
|
||||
Code string `json:"code"`
|
||||
Data model.ContentQueryResult `json:"data"`
|
||||
}
|
||||
err = json.Unmarshal(w.Body.Bytes(), &resp)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "SUCCESS", resp.Code)
|
||||
assert.True(t, resp.Data.Found)
|
||||
assert.Equal(t, "目录库服务测试", resp.Data.Content.Title)
|
||||
}
|
||||
|
||||
func TestCatalogHandler_QueryByHash(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
c := chain.NewMemoryChain()
|
||||
|
||||
_, err := c.IssueMA(chain.RoleRegulator, chain.IssueRequest{
|
||||
MACode: "MA.156.8531.6101/WD/20260000002", ContentTwinID: "ctid-cat-svc-002",
|
||||
FileHash: "fh-cat-svc-002", MerkleRoot: "mr-cat-svc-002",
|
||||
Content: model.Content{Title: "Hash查询服务测试", MAType: "WD", Issuer: "测试局"},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
cat := catalog.New(c)
|
||||
h := NewCatalogHandler(cat)
|
||||
|
||||
r := gin.New()
|
||||
rg := r.Group("/api/v1")
|
||||
h.Register(rg)
|
||||
|
||||
// 按 Hash 查询
|
||||
w := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/api/v1/catalog/query-by-hash?file_hash=fh-cat-svc-002", nil)
|
||||
r.ServeHTTP(w, req)
|
||||
assert.Equal(t, http.StatusOK, w.Code)
|
||||
|
||||
var resp struct {
|
||||
Code string `json:"code"`
|
||||
Data model.ContentQueryResult `json:"data"`
|
||||
}
|
||||
err = json.Unmarshal(w.Body.Bytes(), &resp)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, resp.Data.Found)
|
||||
assert.Equal(t, "MA.156.8531.6101/WD/20260000002", resp.Data.Content.MACode)
|
||||
|
||||
// 缺少参数
|
||||
w2 := httptest.NewRecorder()
|
||||
req2 := httptest.NewRequest("GET", "/api/v1/catalog/query-by-hash", nil)
|
||||
r.ServeHTTP(w2, req2)
|
||||
assert.Equal(t, http.StatusBadRequest, w2.Code)
|
||||
}
|
||||
|
||||
func TestCatalogHandler_NotFound(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
c := chain.NewMemoryChain()
|
||||
cat := catalog.New(c)
|
||||
h := NewCatalogHandler(cat)
|
||||
|
||||
r := gin.New()
|
||||
rg := r.Group("/api/v1")
|
||||
h.Register(rg)
|
||||
|
||||
// 不存在的 MA 码
|
||||
w := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/api/v1/catalog/query-by-ma?ma_code=nonexistent", nil)
|
||||
r.ServeHTTP(w, req)
|
||||
assert.Equal(t, http.StatusNotFound, w.Code)
|
||||
}
|
||||
Reference in New Issue
Block a user