91 lines
2.5 KiB
Go
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)
|
|
}
|
|
}
|