package convert import ( "strings" "testing" "streamrip-go/internal/config" ) func TestAllowedSampleRates(t *testing.T) { got := allowedSampleRates(96000) want := []string{"44100", "48000", "88200", "96000"} if strings.Join(got, ",") != strings.Join(want, ",") { t.Fatalf("rates=%v want=%v", got, want) } } func TestBuildFFmpegArgsLossless(t *testing.T) { cfg := config.ConversionConfig{Enabled: true, Codec: "FLAC", SamplingRate: 48000, BitDepth: 16} args := buildFFmpegArgs("in.flac", "out.flac", profiles["FLAC"], cfg) joined := strings.Join(args, " ") if !strings.Contains(joined, "-c:a flac") { t.Fatalf("missing flac codec args=%s", joined) } if !strings.Contains(joined, "sample_rates=44100|48000") { t.Fatalf("missing sample rate filter args=%s", joined) } if !strings.Contains(joined, "sample_fmts=s16p|s16") { t.Fatalf("missing bit depth filter args=%s", joined) } if !strings.Contains(joined, "-map 0:v:0?") { t.Fatalf("missing optional cover map args=%s", joined) } if !strings.Contains(joined, "-disposition:v:0 attached_pic") { t.Fatalf("missing attached_pic disposition args=%s", joined) } } func TestBuildFFmpegArgsLossy(t *testing.T) { cfg := config.ConversionConfig{Enabled: true, Codec: "MP3", LossyBitrate: 320} args := buildFFmpegArgs("in.flac", "out.mp3", profiles["MP3"], cfg) joined := strings.Join(args, " ") if !strings.Contains(joined, "-c:a libmp3lame") { t.Fatalf("missing mp3 codec args=%s", joined) } if !strings.Contains(joined, "-b:a 320k") { t.Fatalf("missing bitrate args=%s", joined) } if !strings.Contains(joined, "-id3v2_version 3") { t.Fatalf("missing id3v2 args=%s", joined) } } func TestBuildFFmpegArgsNoCoverForOpus(t *testing.T) { cfg := config.ConversionConfig{Enabled: true, Codec: "OPUS", LossyBitrate: 192} args := buildFFmpegArgs("in.flac", "out.opus", profiles["OPUS"], cfg) joined := strings.Join(args, " ") if strings.Contains(joined, "-map 0:v:0?") { t.Fatalf("unexpected cover map args=%s", joined) } }