Files
huangguo_server/web/service/mediacontentser/drama_web_test.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

122 lines
3.6 KiB
Go

package mediacontentser
import (
"testing"
"91porn-server/models/v/mediacontentmod"
"91porn-server/models/v/vidmod"
)
func TestValidateDramaEpisodeState(t *testing.T) {
tests := []struct {
name string
episodeNumber int
listenPermission int
price int64
videoURL string
active bool
status int
wantErr bool
}{
{name: "free", episodeNumber: 1, listenPermission: 2, videoURL: "1.m3u8", active: true, status: 1},
{name: "coin", episodeNumber: 2, listenPermission: 1, price: 30, videoURL: "2.m3u8", active: true, status: 1},
{name: "free with price", episodeNumber: 1, listenPermission: 2, price: 30, wantErr: true},
{name: "coin without price", episodeNumber: 2, listenPermission: 1, wantErr: true},
{name: "active while transcoding", episodeNumber: 1, listenPermission: 2, videoURL: "1.m3u8", active: true, status: 0, wantErr: true},
{name: "active without resource", episodeNumber: 1, listenPermission: 2, active: true, status: 1, wantErr: true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := validateDramaEpisodeState(tt.episodeNumber, tt.listenPermission, tt.price, "第1集", tt.videoURL, "", tt.active, tt.status)
if gotErr := err != nil; gotErr != tt.wantErr {
t.Fatalf("validateDramaEpisodeState() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestValidateDramaEpisodeStateAllowsNonContinuousFreeEpisodes(t *testing.T) {
episodes := []struct {
episodeNumber int
listenPermission int
price int64
}{
{episodeNumber: 2, listenPermission: 1, price: 30},
{episodeNumber: 3, listenPermission: 2, price: 0},
}
for _, episode := range episodes {
if err := validateDramaEpisodeState(
episode.episodeNumber,
episode.listenPermission,
episode.price,
"剧集",
"episode.m3u8",
"",
true,
1,
); err != nil {
t.Fatalf("episode %d validation failed: %v", episode.episodeNumber, err)
}
}
}
func TestFileStatusToEpisodeStatus(t *testing.T) {
tests := map[string]int{
vidmod.Converting: 0,
vidmod.ConvertCompleted: 1,
vidmod.Completed: 1,
vidmod.ConvertError: 2,
vidmod.MergeError: 2,
}
for input, want := range tests {
if got := fileStatusToEpisodeStatus(input); got != want {
t.Fatalf("fileStatusToEpisodeStatus(%q) = %d, want %d", input, got, want)
}
}
}
func TestWebBatchUpdateReqValidatedIDs(t *testing.T) {
id := "507f1f77bcf86cd799439011"
price := int64(30)
permission := 1
freeEpisode := 1
req := WebBatchUpdateReq{
IDS: []string{id, id},
Price: &price,
Permission: &permission,
FreeEpisode: &freeEpisode,
}
ids, err := req.ValidatedIDs()
if err != nil {
t.Fatalf("ValidatedIDs() error: %v", err)
}
if len(ids) != 1 {
t.Fatalf("ValidatedIDs() length = %d, want 1", len(ids))
}
if _, err = (&WebBatchUpdateReq{IDS: []string{id}}).ValidatedIDs(); err == nil {
t.Fatal("request without update fields unexpectedly accepted")
}
req.IDS = []string{"bad-id"}
if _, err = req.ValidatedIDs(); err == nil {
t.Fatal("invalid ObjectID unexpectedly accepted")
}
}
func TestWebBatchUpdateReqAppliesPricingWithoutIsActive(t *testing.T) {
price := int64(30)
permission := 1
req := WebBatchUpdateReq{Price: &price, Permission: &permission}
content := mediacontentmod.MediaContent{IsActive: true, Price: 10, ListenPermission: 2}
next := req.applyContentFields(content)
if !next.IsActive {
t.Fatal("isActive changed when omitted")
}
if next.Price != price {
t.Fatalf("price = %d, want %d", next.Price, price)
}
if next.ListenPermission != permission {
t.Fatalf("listenPermission = %d, want %d", next.ListenPermission, permission)
}
}