归档一次性佣金配置落库与累计触发修复,同步规范文档到主 specs
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m45s
- 归档 fix-one-time-commission-config-and-accumulation 到 archive/2026-01-29-* - 同步 delta specs 到主规范(one-time-commission-trigger、commission-calculation) - 新增累计触发逻辑文档和测试用例 - 修复一次性佣金配置落库和累计充值更新逻辑
This commit is contained in:
@@ -354,6 +354,165 @@ func TestShopSeriesAllocationAPI_UpdateStatus(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// ==================== 一次性佣金配置测试 ====================
|
||||
|
||||
func TestShopSeriesAllocationAPI_OneTimeCommission(t *testing.T) {
|
||||
env := integ.NewIntegrationTestEnv(t)
|
||||
|
||||
t.Run("创建分配-固定类型一次性佣金配置落库", func(t *testing.T) {
|
||||
shop := env.CreateTestShop("一次性佣金测试店铺1", 1, nil)
|
||||
series := createTestPackageSeries(t, env, "一次性佣金测试系列1")
|
||||
|
||||
body := map[string]interface{}{
|
||||
"shop_id": shop.ID,
|
||||
"series_id": series.ID,
|
||||
"base_commission": map[string]interface{}{
|
||||
"mode": "fixed",
|
||||
"value": 1000,
|
||||
},
|
||||
"enable_one_time_commission": true,
|
||||
"one_time_commission_config": map[string]interface{}{
|
||||
"type": "fixed",
|
||||
"trigger": "accumulated_recharge",
|
||||
"threshold": 10000,
|
||||
"mode": "fixed",
|
||||
"value": 500,
|
||||
},
|
||||
}
|
||||
jsonBody, _ := json.Marshal(body)
|
||||
|
||||
resp, err := env.AsSuperAdmin().Request("POST", "/api/admin/shop-series-allocations", jsonBody)
|
||||
require.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
|
||||
var result response.Response
|
||||
err = json.NewDecoder(resp.Body).Decode(&result)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, result.Code, "应返回成功: %s", result.Message)
|
||||
|
||||
dataMap := result.Data.(map[string]interface{})
|
||||
assert.Equal(t, true, dataMap["enable_one_time_commission"])
|
||||
if cfg, ok := dataMap["one_time_commission_config"].(map[string]interface{}); ok {
|
||||
assert.Equal(t, "fixed", cfg["type"])
|
||||
assert.Equal(t, "accumulated_recharge", cfg["trigger"])
|
||||
assert.Equal(t, float64(10000), cfg["threshold"])
|
||||
assert.Equal(t, "fixed", cfg["mode"])
|
||||
assert.Equal(t, float64(500), cfg["value"])
|
||||
} else {
|
||||
t.Error("一次性佣金配置应返回")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("创建分配-梯度类型一次性佣金配置落库", func(t *testing.T) {
|
||||
shop := env.CreateTestShop("一次性佣金测试店铺2", 1, nil)
|
||||
series := createTestPackageSeries(t, env, "一次性佣金测试系列2")
|
||||
|
||||
body := map[string]interface{}{
|
||||
"shop_id": shop.ID,
|
||||
"series_id": series.ID,
|
||||
"base_commission": map[string]interface{}{
|
||||
"mode": "fixed",
|
||||
"value": 1000,
|
||||
},
|
||||
"enable_one_time_commission": true,
|
||||
"one_time_commission_config": map[string]interface{}{
|
||||
"type": "tiered",
|
||||
"trigger": "single_recharge",
|
||||
"threshold": 5000,
|
||||
"tiers": []map[string]interface{}{
|
||||
{"tier_type": "sales_count", "threshold": 10, "mode": "fixed", "value": 100},
|
||||
{"tier_type": "sales_count", "threshold": 50, "mode": "fixed", "value": 500},
|
||||
{"tier_type": "sales_amount", "threshold": 100000, "mode": "percent", "value": 50},
|
||||
},
|
||||
},
|
||||
}
|
||||
jsonBody, _ := json.Marshal(body)
|
||||
|
||||
resp, err := env.AsSuperAdmin().Request("POST", "/api/admin/shop-series-allocations", jsonBody)
|
||||
require.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
|
||||
var result response.Response
|
||||
err = json.NewDecoder(resp.Body).Decode(&result)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, result.Code, "应返回成功: %s", result.Message)
|
||||
|
||||
dataMap := result.Data.(map[string]interface{})
|
||||
assert.Equal(t, true, dataMap["enable_one_time_commission"])
|
||||
if cfg, ok := dataMap["one_time_commission_config"].(map[string]interface{}); ok {
|
||||
assert.Equal(t, "tiered", cfg["type"])
|
||||
assert.Equal(t, "single_recharge", cfg["trigger"])
|
||||
if tiers, ok := cfg["tiers"].([]interface{}); ok {
|
||||
assert.Equal(t, 3, len(tiers), "应有3个梯度档位")
|
||||
} else {
|
||||
t.Error("梯度档位应返回")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("创建分配-启用一次性佣金但未提供配置应失败", func(t *testing.T) {
|
||||
shop := env.CreateTestShop("一次性佣金测试店铺3", 1, nil)
|
||||
series := createTestPackageSeries(t, env, "一次性佣金测试系列3")
|
||||
|
||||
body := map[string]interface{}{
|
||||
"shop_id": shop.ID,
|
||||
"series_id": series.ID,
|
||||
"base_commission": map[string]interface{}{
|
||||
"mode": "fixed",
|
||||
"value": 1000,
|
||||
},
|
||||
"enable_one_time_commission": true,
|
||||
}
|
||||
jsonBody, _ := json.Marshal(body)
|
||||
|
||||
resp, err := env.AsSuperAdmin().Request("POST", "/api/admin/shop-series-allocations", jsonBody)
|
||||
require.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
|
||||
var result response.Response
|
||||
err = json.NewDecoder(resp.Body).Decode(&result)
|
||||
require.NoError(t, err)
|
||||
assert.NotEqual(t, 0, result.Code, "启用一次性佣金但未提供配置应失败")
|
||||
})
|
||||
|
||||
t.Run("更新分配-更新一次性佣金配置", func(t *testing.T) {
|
||||
shop := env.CreateTestShop("一次性佣金测试店铺4", 1, nil)
|
||||
series := createTestPackageSeries(t, env, "一次性佣金测试系列4")
|
||||
allocation := createTestAllocation(t, env, shop.ID, series.ID, 0)
|
||||
|
||||
enableOneTime := true
|
||||
body := map[string]interface{}{
|
||||
"enable_one_time_commission": &enableOneTime,
|
||||
"one_time_commission_config": map[string]interface{}{
|
||||
"type": "fixed",
|
||||
"trigger": "accumulated_recharge",
|
||||
"threshold": 20000,
|
||||
"mode": "percent",
|
||||
"value": 100,
|
||||
},
|
||||
}
|
||||
jsonBody, _ := json.Marshal(body)
|
||||
|
||||
url := fmt.Sprintf("/api/admin/shop-series-allocations/%d", allocation.ID)
|
||||
resp, err := env.AsSuperAdmin().Request("PUT", url, jsonBody)
|
||||
require.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
|
||||
var result response.Response
|
||||
err = json.NewDecoder(resp.Body).Decode(&result)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, result.Code, "更新应成功: %s", result.Message)
|
||||
|
||||
dataMap := result.Data.(map[string]interface{})
|
||||
assert.Equal(t, true, dataMap["enable_one_time_commission"])
|
||||
if cfg, ok := dataMap["one_time_commission_config"].(map[string]interface{}); ok {
|
||||
assert.Equal(t, float64(20000), cfg["threshold"])
|
||||
assert.Equal(t, "percent", cfg["mode"])
|
||||
assert.Equal(t, float64(100), cfg["value"])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// ==================== 梯度佣金 API 测试 ====================
|
||||
|
||||
// ==================== 权限测试 ====================
|
||||
|
||||
Reference in New Issue
Block a user