bindbox-game/internal/service/activity/strategy/ichiban_verify_test.go
邹方成 e2782a69d3 feat: 添加对对碰游戏功能与Redis支持
refactor: 重构抽奖逻辑以支持可验证凭据
feat(redis): 集成Redis客户端并添加配置支持
fix: 修复订单取消时的优惠券和库存处理逻辑
docs: 添加对对碰游戏前端对接指南和示例JSON
test: 添加对对碰游戏模拟测试和验证逻辑
2025-12-21 17:31:32 +08:00

67 lines
2.0 KiB
Go

package strategy
import (
"bindbox-game/internal/repository/mysql/dao"
"bindbox-game/internal/repository/mysql/model"
"context"
"crypto/sha256"
"fmt"
"testing"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
func TestIchibanProofHasSeedHash(t *testing.T) {
// 1. Setup In-Memory DB
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
if err != nil {
t.Fatalf("db open err: %v", err)
}
// 2. Migrate Tables
db.Exec(`CREATE TABLE activities (id INTEGER PRIMARY KEY AUTOINCREMENT, commitment_seed_master BLOB, commitment_state_version INTEGER, deleted_at DATETIME);`)
db.Exec(`CREATE TABLE activity_reward_settings (id INTEGER PRIMARY KEY AUTOINCREMENT, created_at DATETIME, updated_at DATETIME, issue_id INTEGER NOT NULL, product_id INTEGER, name TEXT NOT NULL, weight INTEGER NOT NULL, quantity INTEGER NOT NULL, original_qty INTEGER NOT NULL, level INTEGER NOT NULL, sort INTEGER NOT NULL, is_boss INTEGER NOT NULL, deleted_at DATETIME);`)
q := dao.Use(db)
// 3. Insert Test Data
seedBytes := []byte("testseedvalue")
expectedHash := fmt.Sprintf("%x", sha256.Sum256(seedBytes))
db.Exec("INSERT INTO activities (id, commitment_seed_master, commitment_state_version) VALUES (?, ?, ?)", 100, seedBytes, 1)
r1 := &model.ActivityRewardSettings{IssueID: 10, Name: "A", Weight: 10, Quantity: 10, OriginalQty: 5, Level: 1, Sort: 1}
q.ActivityRewardSettings.Create(r1)
// 4. Test SelectItemBySlot
s := NewIchiban(q, q)
ctx := context.Background()
_, proof, err := s.SelectItemBySlot(ctx, 100, 10, 0)
if err != nil {
t.Fatalf("SelectItemBySlot failed: %v", err)
}
// 5. Verify seed_hash is in proof
if proof == nil {
t.Fatal("proof is nil")
}
val, ok := proof["seed_hash"]
if !ok {
t.Fatal("seed_hash missing from proof")
}
seedHash, ok := val.(string)
if !ok {
t.Fatalf("seed_hash is not a string, got %T", val)
}
if seedHash != expectedHash {
t.Fatalf("seed_hash mismatch. got %s, want %s", seedHash, expectedHash)
}
t.Logf("Success: seed_hash found in proof: %s", seedHash)
}