You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.9 KiB
49 lines
1.9 KiB
package user
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"yunyan/pb"
|
|
)
|
|
|
|
// 守住单位口径:翻译/会议是**秒**,智能体是**次**。
|
|
// 三个桶不同构,照抄隔壁桶的写法就会送错量级(比如给 AI 送 6000 次)。
|
|
func TestApplyNewUserGift(t *testing.T) {
|
|
const now int64 = 1_700_000_000
|
|
u := &pb.DBUser{}
|
|
applyNewUserGift(u, now)
|
|
|
|
if got, want := u.Vipexptime, now+30*24*60*60; got != want {
|
|
t.Errorf("Vipexptime = %d, want %d(30 天)", got, want)
|
|
}
|
|
if got, want := u.Tradeintegral, int64(6000); got != want {
|
|
t.Errorf("Tradeintegral = %d, want %d(100 分钟 = 6000 秒)", got, want)
|
|
}
|
|
if got, want := u.Meetintegral, int64(6000); got != want {
|
|
t.Errorf("Meetintegral = %d, want %d(100 分钟 = 6000 秒)", got, want)
|
|
}
|
|
if got, want := u.Aichatintegral, int64(100); got != want {
|
|
t.Errorf("Aichatintegral = %d, want %d(100 **次**,不是秒)", got, want)
|
|
}
|
|
// total 系列是「累计获得」,前端拿它算进度条,必须同步给上
|
|
if u.Tradetotalintegral != u.Tradeintegral ||
|
|
u.Meettotalintegral != u.Meetintegral ||
|
|
u.Aichattotalintegral != u.Aichatintegral {
|
|
t.Error("total 系列未与余额同步,前端进度条会算错")
|
|
}
|
|
}
|
|
|
|
// 老用户不该被碰:applyNewUserGift 只在「新建用户」分支调用,
|
|
// 这里顺带守住它是直接赋值而非累加(新对象都是零值,累加与赋值等价;
|
|
// 万一将来有人挪去老用户路径,这个测试会提醒他先想清楚语义)。
|
|
func TestApplyNewUserGiftIsAssignNotAccumulate(t *testing.T) {
|
|
const now int64 = 1_700_000_000
|
|
u := &pb.DBUser{Tradeintegral: 999, Aichatintegral: 7, Vipexptime: now + 12345}
|
|
applyNewUserGift(u, now)
|
|
if u.Tradeintegral != 6000 || u.Aichatintegral != 100 {
|
|
t.Errorf("应为赋值语义,得到 Trade=%d Ai=%d", u.Tradeintegral, u.Aichatintegral)
|
|
}
|
|
if u.Vipexptime != now+30*24*60*60 {
|
|
t.Errorf("VIP 应为赋值语义,得到 %d", u.Vipexptime)
|
|
}
|
|
}
|
|
|