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) } }