Files
affiliate_dash/backend/internal/service/rock_package_link_test.go
T

108 lines
3.2 KiB
Go

package service
import (
"context"
"encoding/json"
"strings"
"testing"
"affiliate_dash/internal/model"
)
func TestTokenPackageLink_BuildsUpstreamURL(t *testing.T) {
db := newRockTestDB(t)
svc := NewRockService(db, NewRockClient("https://example.com"))
packageID := int64(1507)
token := model.RockToken{
UpstreamTokenID: "9101",
RedeemCode: "CODE-LINK",
Color: model.RockColorBlack,
Status: model.RockStatusMismatch,
PackageID: &packageID,
PackageShareCode: "share-abc",
}
if err := db.Create(&token).Error; err != nil {
t.Fatalf("创建 Token 失败: %v", err)
}
res, err := svc.TokenPackageLink(context.Background(), token.ID)
if err != nil {
t.Fatalf("生成包链接失败: %v", err)
}
if res.PackageID != 1507 || res.ShareCode != "share-abc" {
t.Fatalf("包信息不符: %+v", res)
}
if res.URL != "https://0666.pro/#/package/share-abc" {
t.Fatalf("包链接不符: %s", res.URL)
}
}
func TestTokenPackageLink_RejectsWithoutPackage(t *testing.T) {
db := newRockTestDB(t)
svc := NewRockService(db, NewRockClient("https://example.com"))
token := model.RockToken{
UpstreamTokenID: "9102",
RedeemCode: "CODE-NOPKG",
Color: model.RockColorBlack,
Status: model.RockStatusMismatch,
}
if err := db.Create(&token).Error; err != nil {
t.Fatalf("创建 Token 失败: %v", err)
}
if _, err := svc.TokenPackageLink(context.Background(), token.ID); err == nil || !strings.Contains(err.Error(), "没有关联上游打包记录") {
t.Fatalf("无包 Token 应被拒绝,实际 err=%v", err)
}
}
func TestTokenPackageLink_RejectsMissingShareCode(t *testing.T) {
db := newRockTestDB(t)
svc := NewRockService(db, NewRockClient("https://example.com"))
packageID := int64(1508)
token := model.RockToken{
UpstreamTokenID: "9103",
RedeemCode: "CODE-NOSHARE",
Color: model.RockColorBlack,
Status: model.RockStatusMismatch,
PackageID: &packageID,
}
if err := db.Create(&token).Error; err != nil {
t.Fatalf("创建 Token 失败: %v", err)
}
if _, err := svc.TokenPackageLink(context.Background(), token.ID); err == nil || !strings.Contains(err.Error(), "缺少上游包分享码") {
t.Fatalf("缺少分享码应被拒绝,实际 err=%v", err)
}
}
func TestImportPackageDetail_StoresPackageShareCode(t *testing.T) {
db := newRockTestDB(t)
svc := NewRockService(db, NewRockClient("https://example.com"))
var detail RockPackageDetailResponse
raw := `{
"package": {"id": 9009, "share_code": "share-import"},
"tokens": [
{"id": 39001, "token": "t1", "redeem_code": "c1", "color": "black", "status": "using", "created_at": "2026-10-27 23:31:59"}
]
}`
if err := json.Unmarshal([]byte(raw), &detail); err != nil {
t.Fatalf("解析包详情失败: %v", err)
}
if _, _, _, err := svc.importPackageDetail(context.Background(), &detail, nil); err != nil {
t.Fatalf("导入包详情失败: %v", err)
}
var row model.RockToken
if err := db.Where("upstream_token_id = ?", "39001").First(&row).Error; err != nil {
t.Fatalf("查询导入 Token 失败: %v", err)
}
if row.PackageShareCode != "share-import" {
t.Fatalf("package_share_code 未写入,实际 %q", row.PackageShareCode)
}
}