TwitchDownloader/dotnet/src/TwitchArchive.Tests/ProcessorServiceTests.cs

57 lines
2 KiB
C#

using System;
using System.IO;
using System.Threading.Tasks;
using Moq;
using Xunit;
using TwitchArchive.Core.Services;
namespace TwitchArchive.Tests
{
public class ProcessorServiceTests : IDisposable
{
private readonly string _tmp;
public ProcessorServiceTests()
{
_tmp = Path.Combine(Path.GetTempPath(), "ta_proc_" + Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(_tmp);
}
[Fact]
public async Task ProcessRawStream_CallsFfmpeg_CopyMode()
{
var mock = new Mock<IProcessRunner>();
mock.Setup(r => r.RunAsync(It.IsAny<ProcessRunOptions>(), default)).ReturnsAsync(new ProcessRunResult { ExitCode = 0 });
var svc = new ProcessorService(mock.Object);
var raw = Path.Combine(_tmp, "in.ts");
var outp = Path.Combine(_tmp, "out.mp4");
File.WriteAllText(raw, "x");
var ok = await svc.ProcessRawStreamAsync(raw, outp, "best");
Assert.True(ok);
mock.Verify(r => r.RunAsync(It.Is<ProcessRunOptions>(o => o.FileName == "ffmpeg" && o.Arguments.Contains("-c:v copy")), default), Times.Once);
}
[Fact]
public async Task ProcessRawStream_AudioOnly_UsesAac()
{
var mock = new Mock<IProcessRunner>();
mock.Setup(r => r.RunAsync(It.IsAny<ProcessRunOptions>(), default)).ReturnsAsync(new ProcessRunResult { ExitCode = 0 });
var svc = new ProcessorService(mock.Object);
var raw = Path.Combine(_tmp, "in.ts");
var outp = Path.Combine(_tmp, "out.mp4");
File.WriteAllText(raw, "x");
var ok = await svc.ProcessRawStreamAsync(raw, outp, "audio_only");
Assert.True(ok);
mock.Verify(r => r.RunAsync(It.Is<ProcessRunOptions>(o => o.FileName == "ffmpeg" && o.Arguments.Contains("-vn") && o.Arguments.Contains("-c:a aac")), default), Times.Once);
}
public void Dispose()
{
try { Directory.Delete(_tmp, true); } catch { }
}
}
}