212 lines
8.3 KiB
Go
212 lines
8.3 KiB
Go
|
package service
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"go-common/app/interface/openplatform/article/model"
|
||
|
|
||
|
. "github.com/smartystreets/goconvey/convey"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
r1 = &model.Recommend{ArticleID: 1, RecImageURL: "xx", RecImageStartTime: 0, RecImageEndTime: 1998603966, Rec: true, RecFlag: true}
|
||
|
r2 = &model.Recommend{ArticleID: 2, RecImageURL: "xx", RecImageStartTime: 0, RecImageEndTime: 1398603966, Rec: true}
|
||
|
r3 = &model.Recommend{ArticleID: 3, Rec: true}
|
||
|
r4 = &model.Recommend{ArticleID: 4, Rec: true}
|
||
|
rs = [][]*model.Recommend{
|
||
|
[]*model.Recommend{r1},
|
||
|
[]*model.Recommend{r2},
|
||
|
[]*model.Recommend{r3},
|
||
|
[]*model.Recommend{r4},
|
||
|
}
|
||
|
cid = int64(4)
|
||
|
recommendAids = map[int64][]int64{
|
||
|
0: []int64{r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID},
|
||
|
cid: []int64{r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID},
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func Test_Recommends_1(t *testing.T) {
|
||
|
Convey("get data from page 1", t, WithCleanCache(func() {
|
||
|
s.setting.ShowRecommendNewArticles = true
|
||
|
//s.updateNewArts(context.TODO(), cid)
|
||
|
s.RecommendsMap = map[int64][][]*model.Recommend{cid: rs}
|
||
|
res, err := s.Recommends(context.TODO(), cid, 1, 3, []int64{}, model.FieldDefault)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 3)
|
||
|
// 不改变原始值
|
||
|
So(r1, ShouldResemble, &model.Recommend{ArticleID: 1, RecImageURL: "xx", RecImageStartTime: 0, RecImageEndTime: 1998603966, Rec: true, RecFlag: true})
|
||
|
So(len(s.RecommendsMap[cid]), ShouldEqual, 4)
|
||
|
So(res[0].Recommend, ShouldResemble, model.Recommend{ArticleID: 0, RecImageURL: "xx", RecImageStartTime: 0, RecImageEndTime: 1998603966, Rec: true, RecFlag: true, RecText: "编辑推荐"})
|
||
|
So(res[0].ID, ShouldEqual, 1)
|
||
|
So(res[1].Recommend, ShouldResemble, model.Recommend{ArticleID: 0, RecImageURL: "", RecImageStartTime: 0, RecImageEndTime: 1398603966, Rec: true, RecText: ""})
|
||
|
So(res[1].ID, ShouldEqual, 2)
|
||
|
So(res[2].ID, ShouldEqual, 3)
|
||
|
}))
|
||
|
|
||
|
Convey("get data from page 1 with aids", t, WithCleanCache(func() {
|
||
|
s.setting.ShowRecommendNewArticles = true
|
||
|
//s.updateNewArts(context.TODO(), cid)
|
||
|
s.RecommendsMap = map[int64][][]*model.Recommend{cid: rs}
|
||
|
res, err := s.Recommends(context.TODO(), cid, 1, 2, []int64{1, 2}, model.FieldDefault)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 2)
|
||
|
So(res[0].ID, ShouldEqual, 3)
|
||
|
So(res[1].ID, ShouldEqual, 4)
|
||
|
}))
|
||
|
}
|
||
|
func Test_Recommends_2(t *testing.T) {
|
||
|
Convey("get data from page 2", t, WithCleanCache(func() {
|
||
|
//s.updateNewArts(context.TODO(), cid)
|
||
|
s.RecommendsMap = map[int64][][]*model.Recommend{cid: rs}
|
||
|
s.recommendAids = recommendAids
|
||
|
Convey("show new art", func() {
|
||
|
s.setting.ShowRecommendNewArticles = true
|
||
|
res, err := s.Recommends(context.TODO(), cid, 2, 3, []int64{}, model.FieldDefault)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 3)
|
||
|
So(res[0].ID, ShouldEqual, 4)
|
||
|
So(res[1].ID, ShouldNotBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
So(res[2].ID, ShouldNotBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
})
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
func Test_Recommends_recomend_category(t *testing.T) {
|
||
|
Convey("get data from page 1", t, WithCleanCache(func() {
|
||
|
//s.updateNewArts(context.TODO(), 0)
|
||
|
rss := [][]*model.Recommend{[]*model.Recommend{r1, r2, r3, r4}}
|
||
|
s.RecommendsMap = map[int64][][]*model.Recommend{0: rss}
|
||
|
s.recommendAids = recommendAids
|
||
|
Convey("show new art", func() {
|
||
|
s.setting.ShowRecommendNewArticles = true
|
||
|
res, err := s.Recommends(context.TODO(), 0, 2, 3, []int64{}, model.FieldDefault)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 3)
|
||
|
So(res[0].ID, ShouldBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
So(res[1].ID, ShouldNotBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
So(res[2].ID, ShouldNotBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
})
|
||
|
Convey("hide new art", func() {
|
||
|
s.setting.ShowRecommendNewArticles = false
|
||
|
res, err := s.Recommends(context.TODO(), 0, 2, 3, []int64{}, model.FieldDefault)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 1)
|
||
|
So(res[0].ID, ShouldBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
})
|
||
|
}))
|
||
|
}
|
||
|
func Test_Recommends_3(t *testing.T) {
|
||
|
Convey("get data from page 3", t, WithCleanCache(func() {
|
||
|
//s.updateNewArts(context.TODO(), cid)
|
||
|
s.RecommendsMap = map[int64][][]*model.Recommend{cid: rs}
|
||
|
s.recommendAids = recommendAids
|
||
|
Convey("show new art", func() {
|
||
|
s.setting.ShowRecommendNewArticles = true
|
||
|
res, err := s.Recommends(context.TODO(), cid, 3, 3, []int64{}, model.FieldDefault)
|
||
|
So(err, ShouldBeNil)
|
||
|
So(len(res), ShouldEqual, 3)
|
||
|
So(res[0].ID, ShouldNotBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
So(res[1].ID, ShouldNotBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
So(res[2].ID, ShouldNotBeIn, r1.ArticleID, r2.ArticleID, r3.ArticleID, r4.ArticleID)
|
||
|
})
|
||
|
}))
|
||
|
Convey("other category no data", t, WithCleanCache(func() {
|
||
|
//s.updateNewArts(context.TODO(), cid)
|
||
|
s.RecommendsMap = map[int64][][]*model.Recommend{cid: rs}
|
||
|
res, err := s.Recommends(context.TODO(), 100, 1, 10, []int64{}, model.FieldDefault)
|
||
|
So(err, ShouldNotBeNil)
|
||
|
So(res, ShouldBeNil)
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
func Test_CalculateRecommends(t *testing.T) {
|
||
|
r10 := &model.Recommend{ArticleID: 1, Position: 2, EndTime: 1}
|
||
|
r12 := &model.Recommend{ArticleID: 2, Position: 2, EndTime: 2}
|
||
|
r13 := &model.Recommend{ArticleID: 2, Position: 2, EndTime: 0}
|
||
|
r14 := &model.Recommend{ArticleID: 2, Position: 2, EndTime: 0}
|
||
|
r20 := &model.Recommend{ArticleID: 1, Position: 1, EndTime: 1}
|
||
|
Convey("diffrent position", t, func() {
|
||
|
res := calculateRecommends([]*model.Recommend{r20, r10})
|
||
|
exp := [][]*model.Recommend{[]*model.Recommend{r10}, []*model.Recommend{r20}}
|
||
|
So(res, ShouldResemble, exp)
|
||
|
})
|
||
|
Convey("same position", t, func() {
|
||
|
res := calculateRecommends([]*model.Recommend{r12, r10})
|
||
|
exp1 := [][]*model.Recommend{[]*model.Recommend{r10, r12}}
|
||
|
exp2 := [][]*model.Recommend{[]*model.Recommend{r12, r10}}
|
||
|
So(res, ShouldBeIn, exp1, exp2)
|
||
|
})
|
||
|
Convey("one no endtime", t, func() {
|
||
|
res := calculateRecommends([]*model.Recommend{r13, r10, r20})
|
||
|
exp := [][]*model.Recommend{[]*model.Recommend{r10}, []*model.Recommend{r20}}
|
||
|
So(res, ShouldResemble, exp)
|
||
|
})
|
||
|
Convey("all no endtime", t, func() {
|
||
|
res := calculateRecommends([]*model.Recommend{r13, r14})
|
||
|
exp1 := [][]*model.Recommend{[]*model.Recommend{r13, r14}}
|
||
|
exp2 := [][]*model.Recommend{[]*model.Recommend{r14, r13}}
|
||
|
So(res, ShouldBeIn, exp1, exp2)
|
||
|
})
|
||
|
|
||
|
Convey("no endtime and have endtime ", t, func() {
|
||
|
res := calculateRecommends([]*model.Recommend{r13, r14, r12})
|
||
|
exp := [][]*model.Recommend{[]*model.Recommend{r12}}
|
||
|
So(res, ShouldResemble, exp)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func Test_DelRecommendArt(t *testing.T) {
|
||
|
Convey("del recommend", t, WithService(func(s *Service) {
|
||
|
s.RecommendsMap = map[int64][][]*model.Recommend{0: rs}
|
||
|
So(s.RecommendsMap, ShouldNotBeNil)
|
||
|
So(len(s.RecommendsMap[0]), ShouldEqual, 4)
|
||
|
s.DelRecommendArt(0, 1)
|
||
|
time.Sleep(50 * time.Millisecond)
|
||
|
So(s.RecommendsMap[0][0][0], ShouldResemble, r2)
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
func Test_genRecommendArtFromPool(t *testing.T) {
|
||
|
Convey("should generate arts", t, WithService(func(s *Service) {
|
||
|
res := s.genRecommendArtFromPool([][]*model.Recommend{[]*model.Recommend{r1, r2, r3, r4}}, s.c.Article.RecommendRegionLen)
|
||
|
So(len(res), ShouldEqual, 4)
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
func Test_sortRecs(t *testing.T) {
|
||
|
Convey("should sort recommends by ptime", t, WithCleanCache(func() {
|
||
|
a1 := &model.RecommendArt{Meta: model.Meta{ID: 1, PublishTime: 1}}
|
||
|
a1.Rec = true
|
||
|
a2 := &model.RecommendArt{Meta: model.Meta{ID: 2, PublishTime: 2}}
|
||
|
a2.Rec = true
|
||
|
a3 := &model.RecommendArt{Meta: model.Meta{ID: 3, PublishTime: 3}}
|
||
|
a3.Rec = true
|
||
|
res := []*model.RecommendArt{a1, a3, a2}
|
||
|
sortRecs(res)
|
||
|
So(res, ShouldResemble, []*model.RecommendArt{a3, a2, a1})
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
func Test_skyHorseGray(t *testing.T) {
|
||
|
Convey("mid", t, func() {
|
||
|
s.c.Article.SkyHorseGray = []int64{}
|
||
|
s.c.Article.SkyHorseGrayUsers = []int64{123}
|
||
|
So(s.skyHorseGray("1", 123), ShouldBeTrue)
|
||
|
So(s.skyHorseGray("", 12), ShouldBeFalse)
|
||
|
So(s.skyHorseGray("", 0), ShouldBeFalse)
|
||
|
So(s.skyHorseGray("1", 0), ShouldBeFalse)
|
||
|
})
|
||
|
Convey("gray", t, func() {
|
||
|
s.c.Article.SkyHorseGray = []int64{3}
|
||
|
s.c.Article.SkyHorseGrayUsers = []int64{}
|
||
|
So(s.skyHorseGray("1", 123), ShouldBeTrue)
|
||
|
So(s.skyHorseGray("", 3), ShouldBeTrue)
|
||
|
So(s.skyHorseGray("", 5), ShouldBeFalse)
|
||
|
So(s.skyHorseGray("", 0), ShouldBeFalse)
|
||
|
So(s.skyHorseGray("1", 0), ShouldBeFalse)
|
||
|
})
|
||
|
}
|