57 lines
2 KiB
C#
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 { }
|
|
}
|
|
}
|
|
}
|