bilibili-backup/app/service/bbq/topic/internal/dao/topic_test.go

287 lines
9.4 KiB
Go
Raw Normal View History

2019-04-22 10:59:20 +08:00
package dao
import (
"context"
"fmt"
"go-common/app/service/bbq/topic/api"
"go-common/app/service/bbq/topic/internal/model"
"go-common/library/ecode"
"go-common/library/log"
"math/rand"
"testing"
"github.com/smartystreets/goconvey/convey"
)
func TestDaoRawTopicInfo(t *testing.T) {
convey.Convey("RawTopicInfo", t, func(convCtx convey.C) {
var (
ctx = context.Background()
topicIDs = []int64{1}
)
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
res, err := d.RawTopicInfo(ctx, topicIDs)
log.Infow(ctx, "topics", res)
convCtx.Convey("Then err should be nil.res should not be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(res, convey.ShouldNotBeNil)
})
})
})
}
func TestDaoCacheTopicInfo(t *testing.T) {
convey.Convey("CacheTopicInfo", t, func(convCtx convey.C) {
var (
ctx = context.Background()
topicIDs = []int64{1}
)
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
res, err := d.CacheTopicInfo(ctx, topicIDs)
log.Infow(ctx, "res", res)
convCtx.Convey("Then err should be nil.res should not be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(res, convey.ShouldNotBeNil)
})
})
})
}
func TestDaoAddCacheTopicInfo(t *testing.T) {
convey.Convey("AddCacheTopicInfo", t, func(convCtx convey.C) {
var (
ctx = context.Background()
topicInfos map[int64]*api.TopicInfo
)
topicInfos = make(map[int64]*api.TopicInfo)
topicInfos[1] = &api.TopicInfo{TopicId: 1, Name: "Test", State: 0, Desc: "test for tester"}
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
err := d.AddCacheTopicInfo(ctx, topicInfos)
convCtx.Convey("Then err should be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
})
})
})
}
func TestDaoDelCacheTopicInfo(t *testing.T) {
convey.Convey("DelCacheTopicInfo", t, func(convCtx convey.C) {
var (
ctx = context.Background()
topicID = int64(1)
)
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
d.DelCacheTopicInfo(ctx, topicID)
res, _ := d.CacheTopicInfo(ctx, []int64{topicID})
topicInfo := res[topicID]
convCtx.Convey("No return values", func(convCtx convey.C) {
convCtx.So(topicInfo, convey.ShouldBeNil)
})
})
})
}
func TestDaoInsertTopics(t *testing.T) {
convey.Convey("InsertTopics", t, func(convCtx convey.C) {
var (
ctx = context.Background()
topics map[string]*api.TopicInfo
)
topics = make(map[string]*api.TopicInfo)
//topicName := fmt.Sprintf("test_%d", rand.Int()%10000000)
topicName := "Test"
topics[topicName] = &api.TopicInfo{Name: topicName, Score: float64(rand.Int()%10000) / float64(10000)}
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
_, err := d.InsertTopics(ctx, topics)
convCtx.Convey("Then err should be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
})
})
log.Infow(ctx, "log", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:"+topicName)
topicName = fmt.Sprintf("test_%d", rand.Int()%10000000)
topics[topicName] = &api.TopicInfo{Name: topicName, Score: float64(rand.Int()%10000) / float64(10000)}
topicName = fmt.Sprintf("test_%d", rand.Int()%10000000)
topics[topicName] = &api.TopicInfo{Name: topicName, Score: float64(rand.Int()%10000) / float64(10000)}
convCtx.Convey("multi insert", func(convCtx convey.C) {
_, err := d.InsertTopics(ctx, topics)
convCtx.Convey("Then err should be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
})
})
longTopics := make(map[string]*api.TopicInfo)
longName := "test_toolonggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg"
longTopics[longName] = &api.TopicInfo{Name: longName}
convCtx.Convey("error case", func(convCtx convey.C) {
_, duplicateErr := d.InsertTopics(ctx, longTopics)
convCtx.Convey("Then err should not be nil.", func(convCtx convey.C) {
convCtx.So(duplicateErr, convey.ShouldAlmostEqual, ecode.TopicNameLenErr)
})
})
})
}
func TestDaoTopicID(t *testing.T) {
convey.Convey("TopicID", t, func(convCtx convey.C) {
var (
ctx = context.Background()
names = []string{"Test"}
)
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
topics, err := d.TopicID(ctx, names)
log.Infow(ctx, "names", names, "topics", topics)
convCtx.Convey("Then err should be nil.topics should not be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(topics, convey.ShouldNotBeNil)
})
})
})
}
func TestDaoUpdateTopic(t *testing.T) {
convey.Convey("TopicID", t, func(convCtx convey.C) {
convCtx.Convey("update desc", func(convCtx convey.C) {
var (
ctx = context.Background()
topicID = int64(1)
field = "desc"
value = "update_desc"
)
origin, _ := d.TopicInfo(ctx, []int64{topicID})
originTopic := origin[topicID]
err := d.UpdateTopic(ctx, topicID, field, value)
curr, _ := d.TopicInfo(ctx, []int64{topicID})
currTopic := curr[topicID]
d.UpdateTopic(ctx, topicID, field, originTopic.Desc)
convCtx.Convey("Then err should be nil.topics should not be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(currTopic.Desc, convey.ShouldEqual, value)
})
})
convCtx.Convey("update state", func(convCtx convey.C) {
var (
ctx = context.Background()
topicID = int64(1)
field = "state"
value = model.TopicStateUnavailable
)
err := d.UpdateTopic(ctx, topicID, field, value)
curr, _ := d.TopicInfo(ctx, []int64{topicID})
currTopic := curr[topicID]
d.UpdateTopic(ctx, topicID, field, model.TopicStateAvailable)
convCtx.Convey("Then err should be nil.topics should not be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(currTopic.State, convey.ShouldEqual, value)
})
})
})
}
func TestDaoListUnAvailableTopics(t *testing.T) {
convey.Convey("ListUnAvailableTopics", t, func(convCtx convey.C) {
var (
ctx = context.Background()
page = int32(1)
)
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
list, hasMore, err := d.ListUnAvailableTopics(ctx, page, model.CmsTopicSize)
log.Infow(ctx, "list", list, "has_more", hasMore)
convCtx.Convey("Then err should be nil.list,hasMore should not be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(list, convey.ShouldNotBeNil)
})
})
})
}
func TestDaoListRankTopics(t *testing.T) {
convey.Convey("ListRankTopics", t, func(convCtx convey.C) {
var (
ctx = context.Background()
page = int32(1)
)
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
list, hasMore, err := d.ListRankTopics(ctx, page, model.DiscoveryTopicSize)
log.Infow(ctx, "list", list, "topics", hasMore)
convCtx.Convey("Then err should be nil.list,hasMore should not be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(hasMore, convey.ShouldBeTrue)
convCtx.So(list, convey.ShouldNotBeNil)
})
})
convCtx.Convey("stick test", func(convCtx convey.C) {
originStickList, _ := d.GetStickTopic(ctx)
d.setStickTopic(ctx, []int64{111111110, 111111111, 111111112})
list, hasMore, err := d.ListRankTopics(ctx, 1, model.DiscoveryTopicSize)
log.Infow(ctx, "list", list, "has_more", hasMore)
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(list[0], convey.ShouldEqual, 111111110)
convCtx.So(list[1], convey.ShouldEqual, 111111111)
convCtx.So(list[2], convey.ShouldEqual, 111111112)
convCtx.So(len(list), convey.ShouldEqual, 3+model.DiscoveryTopicSize)
// 恢复原来的置顶话题
if len(originStickList) > 0 {
d.setStickTopic(ctx, originStickList)
}
})
})
}
func TestDaogetStickTopic(t *testing.T) {
convey.Convey("GetStickTopic", t, func(convCtx convey.C) {
var (
ctx = context.Background()
)
convCtx.Convey("When everything goes positive", func(convCtx convey.C) {
list, err := d.GetStickTopic(ctx)
convCtx.Convey("Then err should be nil.list should not be nil.", func(convCtx convey.C) {
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(list, convey.ShouldNotBeNil)
})
})
})
}
func TestDaoStickTopic(t *testing.T) {
convey.Convey("StickTopic", t, func(convCtx convey.C) {
var (
ctx = context.Background()
opTopicID = int64(1)
op = int64(1)
)
originStickList, _ := d.GetStickTopic(ctx)
convCtx.Convey("common stick operate", func(convCtx convey.C) {
err := d.StickTopic(ctx, opTopicID, op)
newStickList, _ := d.GetStickTopic(ctx)
log.V(1).Infow(ctx, "new_stick_list", newStickList)
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(newStickList[0], convey.ShouldEqual, 1)
})
convCtx.Convey("common cancel stick operate", func(convCtx convey.C) {
err := d.StickTopic(ctx, opTopicID, 0)
newCancelStickList, _ := d.GetStickTopic(ctx)
log.V(1).Infow(ctx, "new_cancel_stick_list", newCancelStickList)
convCtx.So(err, convey.ShouldBeNil)
convCtx.So(newCancelStickList[0], convey.ShouldNotEqual, 1)
})
convCtx.Convey("stick num test", func(convCtx convey.C) {
for i := 1; i < model.MaxStickTopicNum+3; i++ {
d.StickTopic(ctx, int64(i), 1)
}
list, _ := d.GetStickTopic(ctx)
log.V(1).Infow(ctx, "list", list)
convCtx.So(len(list), convey.ShouldEqual, model.MaxStickTopicNum)
})
// 恢复原来的置顶话题
if len(originStickList) > 0 {
d.setStickTopic(ctx, originStickList)
}
})
}