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