diff --git a/tests/StreamShorts.Library.Tests/Data/Files/extracted_audio.mp3 b/tests/StreamShorts.Library.Tests/Data/Files/extracted_audio.mp3 new file mode 100644 index 0000000..5c75315 Binary files /dev/null and b/tests/StreamShorts.Library.Tests/Data/Files/extracted_audio.mp3 differ diff --git a/tests/StreamShorts.Library.Tests/Data/Files/video.mp4 b/tests/StreamShorts.Library.Tests/Data/Files/video.mp4 new file mode 100644 index 0000000..19acee5 Binary files /dev/null and b/tests/StreamShorts.Library.Tests/Data/Files/video.mp4 differ diff --git a/tests/StreamShorts.Library.Tests/Data/TestData.cs b/tests/StreamShorts.Library.Tests/Data/TestData.cs new file mode 100644 index 0000000..d9635f1 --- /dev/null +++ b/tests/StreamShorts.Library.Tests/Data/TestData.cs @@ -0,0 +1,24 @@ +namespace StreamShorts.Library.Tests.Data; + +internal static class TestData +{ + private const string TestVideoFile = "video.mp4"; + private const string ExtractedAudioFile = "extracted_audio.mp3"; + + public static FileStream GetTestVideo() + { + var filePath = GetTestFilePath(TestVideoFile); + return File.OpenRead(filePath); + } + + public static FileStream GetExtractedAudio() + { + var filePath = GetTestFilePath(ExtractedAudioFile); + return File.OpenRead(filePath); + } + + private static string GetTestFilePath(string fileName) + { + return Path.Combine(Directory.GetCurrentDirectory(), "Data", "Files", fileName); + } +} \ No newline at end of file diff --git a/tests/StreamShorts.Library.Tests/Integration/Media/Audio/AudioExtractorTests.cs b/tests/StreamShorts.Library.Tests/Integration/Media/Audio/AudioExtractorTests.cs new file mode 100644 index 0000000..39ca12d --- /dev/null +++ b/tests/StreamShorts.Library.Tests/Integration/Media/Audio/AudioExtractorTests.cs @@ -0,0 +1,27 @@ +namespace StreamShorts.Library.Tests.Integration.Media.Audio; + +public class AudioExtractorTests +{ + private readonly AudioExtractor _sut = new(); + + [Fact] + public async Task ExtractMp3FromMp4Async_WhenCalled_ItShouldExtractAudio() + { + using var testVideo = TestData.GetTestVideo(); + using var extractedAudio = TestData.GetExtractedAudio(); + + var result = await _sut.ExtractMp3FromMp4Async(testVideo); + + var audioBytes = await ConvertStreamToBytesAsync(extractedAudio); + var resultBytes = await ConvertStreamToBytesAsync(result); + + resultBytes.Should().Equal(audioBytes); + } + + private static async Task ConvertStreamToBytesAsync(Stream stream) + { + using var ms = new MemoryStream(); + await stream.CopyToAsync(ms); + return ms.ToArray(); + } +} \ No newline at end of file diff --git a/tests/StreamShorts.Library.Tests/StreamShorts.Library.Tests.csproj b/tests/StreamShorts.Library.Tests/StreamShorts.Library.Tests.csproj index 39d9852..88a9f48 100644 --- a/tests/StreamShorts.Library.Tests/StreamShorts.Library.Tests.csproj +++ b/tests/StreamShorts.Library.Tests/StreamShorts.Library.Tests.csproj @@ -17,4 +17,10 @@ + + + PreserveNewest + + + diff --git a/tests/StreamShorts.Library.Tests/Unit/Media/Audio/AudioExtractorTests.cs b/tests/StreamShorts.Library.Tests/Unit/Media/Audio/AudioExtractorTests.cs index 4f0707f..d629a2f 100644 --- a/tests/StreamShorts.Library.Tests/Unit/Media/Audio/AudioExtractorTests.cs +++ b/tests/StreamShorts.Library.Tests/Unit/Media/Audio/AudioExtractorTests.cs @@ -37,6 +37,7 @@ public class AudioExtractorTests public async Task ExtractMp3FromMp4Async_WhenVideoIsNotSeekable_ItShouldThrow() { var mockStream = new Mock(); + mockStream.Setup(s => s.CanRead).Returns(true); mockStream.Setup(s => s.CanSeek).Returns(false); var action = async () => await _sut.ExtractMp3FromMp4Async(mockStream.Object); diff --git a/tests/StreamShorts.Library.Tests/Usings.cs b/tests/StreamShorts.Library.Tests/Usings.cs index 0900feb..ea34be8 100644 --- a/tests/StreamShorts.Library.Tests/Usings.cs +++ b/tests/StreamShorts.Library.Tests/Usings.cs @@ -3,3 +3,4 @@ global using AwesomeAssertions; global using Moq; global using StreamShorts.Library.Media.Audio; +global using StreamShorts.Library.Tests.Data; \ No newline at end of file