107 lines
3.3 KiB
Go
107 lines
3.3 KiB
Go
package mediaser
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"91porn-server/models/v/mediacontentmod"
|
|
"91porn-server/models/v/mediamod"
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
)
|
|
|
|
func validDramaCreateReq() WebCreateReq {
|
|
return WebCreateReq{
|
|
Title: "测试短剧",
|
|
HorizontalCover: "https://example.com/h.jpg",
|
|
VerticalCover: "https://example.com/v.jpg",
|
|
TotalEpisode: 10,
|
|
UpdateStatus: mediamod.Update,
|
|
MediaType: mediamod.MediaTypeDrama,
|
|
Kind: mediamod.Theater,
|
|
Permission: 1,
|
|
}
|
|
}
|
|
|
|
func TestWebCreateReqValidateDrama(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
mutate func(*WebCreateReq)
|
|
wantErr bool
|
|
}{
|
|
{name: "valid"},
|
|
{name: "missing cover", mutate: func(req *WebCreateReq) { req.VerticalCover = "" }, wantErr: true},
|
|
{name: "published before first episode", mutate: func(req *WebCreateReq) { req.Status = 1 }, wantErr: true},
|
|
{name: "wrong kind", mutate: func(req *WebCreateReq) { req.Kind = 1 }, wantErr: true},
|
|
{name: "wrong permission", mutate: func(req *WebCreateReq) { req.Permission = 2 }, wantErr: true},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
req := validDramaCreateReq()
|
|
if tt.mutate != nil {
|
|
tt.mutate(&req)
|
|
}
|
|
if gotErr := req.Validate() != nil; gotErr != tt.wantErr {
|
|
t.Fatalf("Validate() error = %v, wantErr %v", gotErr, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidateDramaMediaForPublish(t *testing.T) {
|
|
media := mediamod.Media{
|
|
ID: primitive.NewObjectID(),
|
|
MediaType: mediamod.MediaTypeDrama,
|
|
Title: "测试短剧",
|
|
HorizontalCover: "h.jpg",
|
|
VerticalCover: "v.jpg",
|
|
TotalEpisode: 10,
|
|
UpdateStatus: mediamod.Update,
|
|
Kind: mediamod.Theater,
|
|
Permission: 1,
|
|
}
|
|
first := mediacontentmod.MediaContent{
|
|
ID: primitive.NewObjectID(),
|
|
MediaID: media.ID,
|
|
MediaType: mediamod.MediaTypeDrama,
|
|
EpisodeNumber: 1,
|
|
Name: "第1集",
|
|
Status: 1,
|
|
IsActive: true,
|
|
VideoUrl: "https://example.com/1.m3u8",
|
|
}
|
|
if err := validateDramaMediaForPublish(media, first); err != nil {
|
|
t.Fatalf("valid drama cannot publish: %v", err)
|
|
}
|
|
first.Status = 0
|
|
if err := validateDramaMediaForPublish(media, first); err == nil {
|
|
t.Fatal("transcoding first episode unexpectedly allowed to publish")
|
|
}
|
|
first.Status = 1
|
|
first.VideoUrl = ""
|
|
if err := validateDramaMediaForPublish(media, first); err == nil {
|
|
t.Fatal("first episode without play URL unexpectedly allowed to publish")
|
|
}
|
|
}
|
|
|
|
func TestWebListReqFilterUsesScalarValues(t *testing.T) {
|
|
status, kind, mediaCenterID := 1, mediamod.Theater, uint(123)
|
|
req := WebListReq{Status: &status, Kind: &kind, MediaCenterID: &mediaCenterID}
|
|
filter := req.Filter()
|
|
if filter["status"] != status || filter["kind"] != kind || filter["mediaCenterId"] != mediaCenterID {
|
|
t.Fatalf("unexpected filter: %#v", filter)
|
|
}
|
|
}
|
|
|
|
func TestWebBatchUpdateReqRejectsDramaParentPricing(t *testing.T) {
|
|
price := int64(30)
|
|
req := WebBatchUpdateReq{Price: &price}
|
|
medias := []*mediamod.Media{{MediaType: mediamod.MediaTypeDrama}}
|
|
if err := req.validateDramaBatchFields(medias); err == nil {
|
|
t.Fatal("drama parent pricing unexpectedly accepted")
|
|
}
|
|
req.Price = nil
|
|
if err := req.validateDramaBatchFields(medias); err != nil {
|
|
t.Fatalf("drama batch without parent pricing rejected: %v", err)
|
|
}
|
|
}
|