go-common/app/service/live/wallet/dao/wallet_test.go
2019-04-22 18:49:16 +08:00

284 lines
7.4 KiB
Go

package dao
import (
"context"
"os"
"sync"
"testing"
"time"
"go-common/app/service/live/wallet/conf"
"go-common/library/log"
. "github.com/smartystreets/goconvey/convey"
"go-common/app/service/live/wallet/model"
"math/rand"
)
var (
once sync.Once
d *Dao
ctx = context.Background()
testUID int64
r *rand.Rand
)
func initConf() {
if err := conf.Init(); err != nil {
panic(err)
}
log.Init(conf.Conf.Log)
defer log.Close()
}
func TestMain(m *testing.M) {
conf.ConfPath = "../cmd/live-wallet-test.toml"
once.Do(startService)
os.Exit(m.Run())
}
func startService() {
initConf()
d = New(conf.Conf)
r = rand.New(rand.NewSource(time.Now().UnixNano()))
testUID = r.Int63n(100000000)
log.Info("test uid:%ld", testUID)
time.Sleep(time.Second * 1)
}
func TestInitWallet(t *testing.T) {
Convey("Init Wallet", t, func() {
once.Do(startService)
_, err := d.InitWallet(ctx, testUID, 0, 0, 0)
So(err, ShouldBeNil)
})
}
func TestMelonseed(t *testing.T) {
Convey("Melon seed", t, func() {
once.Do(startService)
var wallet *model.Melonseed
wallet, err := d.Melonseed(ctx, testUID)
So(err, ShouldBeNil)
So(wallet.Gold, ShouldEqual, 0)
})
}
func TestDetail(t *testing.T) {
Convey("Detail", t, func() {
once.Do(startService)
var detail *model.Detail
detail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(detail.Gold, ShouldEqual, 0)
So(detail.Silver, ShouldEqual, 0)
So(detail.SilverPayCnt, ShouldEqual, 0)
So(detail.IapGold, ShouldEqual, 0)
So(detail.GoldRechargeCnt, ShouldEqual, 0)
So(detail.GoldPayCnt, ShouldEqual, 0)
})
}
func TestDao_AddGold(t *testing.T) {
Convey("Add Gold", t, func() {
once.Do(startService)
var testUID = r.Int63n(100000000)
var odetail *model.Detail
odetail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
num := 1000
affect, err := d.AddGold(ctx, testUID, num)
So(err, ShouldBeNil)
So(affect, ShouldBeGreaterThanOrEqualTo, 1) // 插入affect=1 更新affect=2
var ndetail *model.Detail
ndetail, err = d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(ndetail.Gold-odetail.Gold, ShouldEqual, num)
So(ndetail.GoldRechargeCnt, ShouldEqual, odetail.GoldRechargeCnt)
})
}
func TestDao_RechargeGold(t *testing.T) {
Convey("recharge gold", t, func() {
once.Do(startService)
var testUID = r.Int63n(100000000)
var odetail *model.Detail
odetail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
num := 1000
affect, err := d.RechargeGold(ctx, testUID, num)
So(err, ShouldBeNil)
So(affect, ShouldBeGreaterThanOrEqualTo, 1) // 插入affect=1 更新affect=2
var ndetail *model.Detail
ndetail, err = d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(ndetail.Gold-odetail.Gold, ShouldEqual, num)
So(ndetail.IapGold-odetail.IapGold, ShouldEqual, 0)
So(ndetail.GoldRechargeCnt-odetail.GoldRechargeCnt, ShouldEqual, num)
})
}
func TestDao_RechargeIapGold(t *testing.T) {
Convey("recharge iap gold", t, func() {
once.Do(startService)
var testUID = r.Int63n(100000000)
var odetail *model.Detail
odetail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
num := 1000
affect, err := d.RechargeIapGold(ctx, testUID, num)
So(err, ShouldBeNil)
So(affect, ShouldBeGreaterThanOrEqualTo, 1) // 插入affect=1 更新affect=2
var ndetail *model.Detail
ndetail, err = d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(ndetail.Gold-odetail.Gold, ShouldEqual, 0)
So(ndetail.IapGold-odetail.IapGold, ShouldEqual, num)
So(ndetail.GoldRechargeCnt-odetail.GoldRechargeCnt, ShouldEqual, num)
})
}
func TestDao_AddIapGold(t *testing.T) {
Convey("Add iap Gold", t, func() {
once.Do(startService)
var testUID = r.Int63n(100000000)
var odetail *model.Detail
odetail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
num := 1000
affect, err := d.AddIapGold(ctx, testUID, num)
So(err, ShouldBeNil)
So(affect, ShouldBeGreaterThanOrEqualTo, 1) // 插入affect=1 更新affect=2
var ndetail *model.Detail
ndetail, err = d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(ndetail.Gold-odetail.Gold, ShouldEqual, 0)
So(ndetail.IapGold-odetail.IapGold, ShouldEqual, num)
So(ndetail.GoldRechargeCnt, ShouldEqual, odetail.GoldRechargeCnt)
})
}
func TestDao_AddSilver(t *testing.T) {
Convey("Add silver", t, func() {
once.Do(startService)
var testUID = r.Int63n(100000000)
var odetail *model.Detail
odetail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
num := 1000
affect, err := d.AddSilver(ctx, testUID, num)
So(err, ShouldBeNil)
So(affect, ShouldBeGreaterThanOrEqualTo, 1) // 插入affect=1 更新affect=2
var ndetail *model.Detail
ndetail, err = d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(ndetail.Gold-odetail.Gold, ShouldEqual, 0)
So(ndetail.IapGold-odetail.IapGold, ShouldEqual, 0)
So(ndetail.Silver-odetail.Silver, ShouldEqual, num)
})
}
func TestDao_ConsumeGold(t *testing.T) {
Convey("Consume Gold", t, func() {
once.Do(startService)
var testUID = r.Int63n(100000000)
var odetail *model.Detail
odetail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
num := 1000
affect, err := d.RechargeGold(ctx, testUID, num)
So(err, ShouldBeNil)
So(affect, ShouldBeGreaterThanOrEqualTo, 1) // 插入affect=1 更新affect=2
pay := 500
affect, err = d.ConsumeGold(ctx, testUID, pay)
So(err, ShouldBeNil)
So(affect, ShouldEqual, 1)
var ndetail *model.Detail
ndetail, err = d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(ndetail.Gold-odetail.Gold, ShouldEqual, num-pay)
So(ndetail.IapGold-odetail.IapGold, ShouldEqual, 0)
So(ndetail.GoldRechargeCnt-odetail.GoldRechargeCnt, ShouldEqual, num)
So(ndetail.GoldPayCnt-odetail.GoldPayCnt, ShouldEqual, pay)
})
}
func TestDao_ConsumeIapGold(t *testing.T) {
Convey("Consume Iap Gold", t, func() {
once.Do(startService)
var testUID = r.Int63n(100000000)
var odetail *model.Detail
odetail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
num := 1000
affect, err := d.RechargeIapGold(ctx, testUID, num)
So(err, ShouldBeNil)
So(affect, ShouldBeGreaterThanOrEqualTo, 1) // 插入affect=1 更新affect=2
pay := 500
affect, err = d.ConsumeIapGold(ctx, testUID, pay)
So(err, ShouldBeNil)
So(affect, ShouldEqual, 1)
var ndetail *model.Detail
ndetail, err = d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(ndetail.IapGold-odetail.IapGold, ShouldEqual, num-pay)
So(ndetail.Gold-odetail.Gold, ShouldEqual, 0)
So(ndetail.GoldRechargeCnt-odetail.GoldRechargeCnt, ShouldEqual, num)
So(ndetail.GoldPayCnt-odetail.GoldPayCnt, ShouldEqual, pay)
})
}
func TestDao_ConsumeSilver(t *testing.T) {
Convey("Consume Silver", t, func() {
once.Do(startService)
var testUID = r.Int63n(100000000)
var odetail *model.Detail
odetail, err := d.Detail(ctx, testUID)
So(err, ShouldBeNil)
num := 1000
affect, err := d.AddSilver(ctx, testUID, num)
So(err, ShouldBeNil)
So(affect, ShouldBeGreaterThanOrEqualTo, 1) // 插入affect=1 更新affect=2
pay := 500
affect, err = d.ConsumeSilver(ctx, testUID, pay)
So(err, ShouldBeNil)
So(affect, ShouldEqual, 1)
var ndetail *model.Detail
ndetail, err = d.Detail(ctx, testUID)
So(err, ShouldBeNil)
So(ndetail.IapGold-odetail.IapGold, ShouldEqual, 0)
So(ndetail.Gold-odetail.Gold, ShouldEqual, 0)
So(ndetail.Silver-odetail.Silver, ShouldEqual, num-pay)
So(ndetail.GoldRechargeCnt-odetail.GoldRechargeCnt, ShouldEqual, 0)
So(ndetail.GoldPayCnt-odetail.GoldPayCnt, ShouldEqual, 0)
So(ndetail.SilverPayCnt-odetail.SilverPayCnt, ShouldEqual, pay)
})
}