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.
177 lines
3.9 KiB
177 lines
3.9 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"flag" |
|
"math/rand" |
|
"testing" |
|
"time" |
|
|
|
"go-common/app/job/main/figure-timer/conf" |
|
"go-common/app/job/main/figure-timer/dao/mock_dao" |
|
"go-common/app/job/main/figure-timer/model" |
|
"go-common/library/log" |
|
|
|
"github.com/golang/mock/gomock" |
|
. "github.com/smartystreets/goconvey/convey" |
|
) |
|
|
|
var ( |
|
s *Service |
|
c = context.TODO() |
|
) |
|
|
|
func init() { |
|
var err error |
|
flag.Set("conf", "../cmd/figure-timer-job-test.toml") |
|
if err = conf.Init(); err != nil { |
|
panic(err) |
|
} |
|
log.Init(conf.Conf.Log) |
|
s = New(conf.Conf) |
|
|
|
} |
|
|
|
func TestSplitMids(t *testing.T) { |
|
Convey("TEST split mids", t, func() { |
|
var ( |
|
mids []int64 |
|
concurrency int64 = 100 |
|
midsSize int64 = 233 |
|
) |
|
for i := int64(0); i < midsSize; i++ { |
|
mids = append(mids, i) |
|
} |
|
smids := splitMids(mids, concurrency) |
|
actualC := concurrency |
|
if actualC == 0 { |
|
actualC = 1 |
|
} |
|
if actualC > midsSize { |
|
actualC = midsSize |
|
} |
|
So(len(smids), ShouldEqual, 233/3+1) |
|
total := 0 |
|
for s := range smids { |
|
total += len(smids[s]) |
|
} |
|
So(total, ShouldEqual, len(mids)) |
|
}) |
|
} |
|
|
|
func TestVersion(t *testing.T) { |
|
Convey("TEST week version", t, func() { |
|
var ( |
|
ts = []time.Time{ |
|
time.Date(2017, 9, 25, 0, 0, 0, 0, time.Local), |
|
time.Date(2017, 10, 1, 23, 59, 59, 99, time.Local), |
|
time.Date(2017, 9, 29, 12, 12, 12, 12, time.Local), |
|
} |
|
actual = time.Date(2017, 9, 25, 0, 0, 0, 0, time.Local) |
|
) |
|
for _, t := range ts { |
|
ver := weekVersion(t) |
|
So(ver, ShouldResemble, actual.Unix()) |
|
} |
|
}) |
|
} |
|
|
|
func TestCalcFigure(t *testing.T) { |
|
Convey("TEST calc offset", t, func() { |
|
var ( |
|
max = 100.0 |
|
k = 0.1 |
|
x1 = 10.0 |
|
x2 = 0.0 |
|
) |
|
r := calcOffset(max, k, x1) |
|
So(r, ShouldEqual, 63) |
|
r = calcOffset(max, k, x2) |
|
So(r, ShouldEqual, 0) |
|
}) |
|
Convey("TEST calc figure", t, func() { |
|
var ( |
|
userInfo = &model.UserInfo{ |
|
Mid: 233, |
|
Exp: 673, |
|
SpyScore: 100, |
|
ArchiveViews: 0, |
|
VIPStatus: 0, |
|
} |
|
actionCounters = []*model.ActionCounter{ |
|
{ |
|
Mid: 233, |
|
CoinCount: 0, |
|
ReplyCount: 0, |
|
CoinLowRisk: 0, |
|
CoinHighRisk: 0, |
|
ReplyLowRisk: 0, |
|
ReplyHighRisk: 0, |
|
ReplyLiked: 0, |
|
ReplyUnliked: 0, |
|
Version: time.Date(2017, 10, 2, 0, 0, 0, 0, time.Local), |
|
}, |
|
} |
|
records = []*model.FigureRecord{ |
|
{ |
|
XPosCreativity: 0, |
|
XNegFriendly: 0, |
|
XPosFriendly: 0, |
|
XNegLawful: 80, |
|
Version: time.Date(2017, 9, 25, 0, 0, 0, 0, time.Local), |
|
}, |
|
} |
|
weekVer = time.Date(2018, 1, 2, 0, 0, 0, 0, time.Local).Unix() |
|
) |
|
figure, newRecord := s.CalcFigure(c, userInfo, actionCounters, records, weekVer) |
|
So(figure, ShouldNotBeNil) |
|
So(newRecord, ShouldNotBeNil) |
|
So(figure.LawfulScore, ShouldEqual, 2859) |
|
So(newRecord.XNegLawful, ShouldEqual, 0) |
|
So(newRecord.XPosLawful, ShouldEqual, 0) |
|
}) |
|
} |
|
|
|
func TestRank(t *testing.T) { |
|
rand.Seed(time.Now().Unix()) |
|
rank.Init() |
|
for i := 0; i < 1; i++ { |
|
rank.AddScore(rand.Int31n(5000)) |
|
} |
|
s.calcRank(c, time.Now().Unix()) |
|
} |
|
|
|
func TestFix(t *testing.T) { |
|
ctrl := gomock.NewController(t) |
|
defer ctrl.Finish() |
|
|
|
mockDao := mock_dao.NewMockDaoInt(ctrl) |
|
mockDao.EXPECT().Figures(gomock.Any(), gomock.Any(), gomock.Any()).Return( |
|
[]*model.Figure{ |
|
{Mid: 1000}, |
|
{Mid: 2000}, |
|
}, |
|
true, |
|
nil, |
|
).AnyTimes() |
|
mockDao.EXPECT().CalcRecords(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return( |
|
[]*model.FigureRecord{ |
|
{Version: time.Date(2018, 1, 2, 0, 0, 0, 0, time.Local)}, |
|
}, |
|
nil, |
|
).AnyTimes() |
|
mockDao.EXPECT().ActionCounter(gomock.Any(), gomock.Any(), gomock.Any()).Return( |
|
&model.ActionCounter{ |
|
PayLiveMoney: 2000, |
|
Version: time.Date(2018, 1, 2, 0, 0, 0, 0, time.Local), |
|
}, |
|
nil, |
|
).AnyTimes() |
|
mockDao.EXPECT().PutCalcRecord(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() |
|
|
|
s.dao = mockDao |
|
|
|
Convey("TEST fix record", t, func() { |
|
s.fixproc() |
|
}) |
|
}
|
|
|