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.
211 lines
8.3 KiB
211 lines
8.3 KiB
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) |
|
}) |
|
}
|
|
|