Files
datamarket/internal/handler/assets_test.go
2026-04-01 17:05:08 +08:00

91 lines
2.5 KiB
Go

package handler
import (
"bytes"
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"gitea.starryskymeow.cn/B309/datamarket/internal/service"
)
type fakeAssetService struct {
listResult service.ListResult[service.Asset]
listErr error
}
func (f fakeAssetService) CreateAsset(context.Context, service.AssetCreateInput) (service.AssetStatusResult, error) {
return service.AssetStatusResult{}, nil
}
func (f fakeAssetService) GetAsset(context.Context, string) (service.Asset, error) {
return service.Asset{}, nil
}
func (f fakeAssetService) ListAssets(context.Context, service.AssetListInput) (service.ListResult[service.Asset], error) {
return f.listResult, f.listErr
}
func (f fakeAssetService) UpdateAssetStatus(context.Context, string, service.StatusUpdate) (service.AssetStatusResult, error) {
return service.AssetStatusResult{}, nil
}
func TestCreateAssetHandlerRejectsInvalidJSON(t *testing.T) {
req := httptest.NewRequest(http.MethodPost, "/api/assets", bytes.NewBufferString("{"))
rec := httptest.NewRecorder()
CreateAsset(fakeAssetService{}).ServeHTTP(rec, req)
if rec.Code != http.StatusBadRequest {
t.Fatalf("status = %d, want %d", rec.Code, http.StatusBadRequest)
}
}
func TestListAssetsHandlerReturnsListPayload(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, "/api/assets?limit=5&offset=0", nil)
rec := httptest.NewRecorder()
handler := ListAssets(fakeAssetService{
listResult: service.ListResult[service.Asset]{
List: []service.Asset{
{
ID: "asset-1",
AssetName: "机械臂抓取演示数据集A",
AssetType: "视频+轨迹",
Domain: "机器人",
DataDescription: "包含工业抓取场景的机械臂操作视频与轨迹",
DataScale: "1200条轨迹",
CollectionMethod: "真实采集",
PrivacyLevel: "中",
PermissionMode: "授权访问",
SupportsValidation: true,
AssetStatus: "已上架",
},
},
Total: 1,
Limit: 5,
Offset: 0,
},
})
handler.ServeHTTP(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("status = %d, want %d", rec.Code, http.StatusOK)
}
var body Response[ListResponse[service.Asset]]
if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil {
t.Fatalf("json.Unmarshal() error = %v", err)
}
if body.Code != 0 {
t.Fatalf("code = %d, want 0", body.Code)
}
if body.Data.Total != 1 || len(body.Data.List) != 1 {
t.Fatalf("unexpected payload: %+v", body.Data)
}
}