preset_test.go
⎇
Raw
1package service
2
3import (
4 "testing"
5
6 "vidarchive/internal/models"
7)
8
9func TestPresetServiceBuildArgs(t *testing.T) {
10 // Create a mock preset
11 preset := &models.Preset{
12 FormatMode: "preset",
13 Format: "best",
14 Quality: "1080",
15 ExtractAudio: true,
16 AudioFormat: "mp3",
17 EmbedSubs: true,
18 SubLangs: "en,de",
19 EmbedThumbnail: true,
20 EmbedMetadata: true,
21 WriteInfoJSON: true,
22 CustomFlags: "--no-playlist",
23 }
24
25 svc := &PresetService{}
26 args := svc.BuildArgs(preset, "", "")
27
28 // Check that expected args are present
29 hasFormat := false
30 hasAudio := false
31 hasSubs := false
32 hasOutput := false
33
34 for i := 0; i < len(args); i++ {
35 switch args[i] {
36 case "-f":
37 if i+1 < len(args) {
38 if args[i+1] == "best[height<=1080]/best" {
39 hasFormat = true
40 }
41 }
42 case "--extract-audio":
43 hasAudio = true
44 case "--embed-subs":
45 hasSubs = true
46 case "-o":
47 if i+1 < len(args) {
48 if args[i+1] == "item-%(autonumber)05d/%(title)s.%(ext)s" {
49 hasOutput = true
50 }
51 }
52 }
53 }
54
55 if !hasFormat {
56 t.Error("expected format arg with quality limit")
57 }
58 if !hasAudio {
59 t.Error("expected --extract-audio flag")
60 }
61 if !hasSubs {
62 t.Error("expected --embed-subs flag")
63 }
64 if hasOutput {
65 t.Error("output template should not be added by BuildArgs; it is enforced by the download service")
66 }
67}
68
69func TestPresetServiceBuildArgsWithOverride(t *testing.T) {
70 preset := &models.Preset{
71 Format: "best",
72 }
73
74 svc := &PresetService{}
75 args := svc.BuildArgs(preset, "22", "--verbose")
76
77 // Format override should take precedence
78 hasOverride := false
79 hasCustom := false
80
81 for i := 0; i < len(args); i++ {
82 if args[i] == "-f" && i+1 < len(args) && args[i+1] == "22" {
83 hasOverride = true
84 }
85 if args[i] == "--verbose" {
86 hasCustom = true
87 }
88 }
89
90 if !hasOverride {
91 t.Error("expected format override to be present")
92 }
93 if !hasCustom {
94 t.Error("expected custom flags to be present")
95 }
96}
97
98func TestPresetServiceEffectiveFlags(t *testing.T) {
99 preset := &models.Preset{
100 FormatMode: "preset",
101 Format: "best",
102 Quality: "720",
103 }
104
105 svc := &PresetService{}
106 flags := svc.EffectiveFlags(preset, "", "")
107
108 if flags == "" {
109 t.Error("expected non-empty flags string")
110 }
111 if flags != "-f best[height<=720]/best" {
112 t.Errorf("expected '-f best[height<=720]/best', got %q", flags)
113 }
114}
115
116func TestPresetServiceEffectiveFlagsWithCustom(t *testing.T) {
117 preset := &models.Preset{
118 FormatMode: "preset",
119 Format: "best",
120 CustomFlags: "--no-warnings",
121 }
122
123 svc := &PresetService{}
124 flags := svc.EffectiveFlags(preset, "", "--verbose")
125
126 if flags == "" {
127 t.Error("expected non-empty flags string")
128 }
129 // Should contain both preset custom flags and passed custom flags
130 if !contains(flags, "--no-warnings") {
131 t.Errorf("expected flags to contain '--no-warnings', got %q", flags)
132 }
133 if !contains(flags, "--verbose") {
134 t.Errorf("expected flags to contain '--verbose', got %q", flags)
135 }
136}
137
138func contains(s, substr string) bool {
139 return len(s) >= len(substr) && (s == substr || len(s) > 0 && containsHelper(s, substr))
140}
141
142func containsHelper(s, substr string) bool {
143 for i := 0; i <= len(s)-len(substr); i++ {
144 if s[i:i+len(substr)] == substr {
145 return true
146 }
147 }
148 return false
149}
150