Implement media storage and processing features: update configuration in .env.example and appsettings files, enhance Docker setup for media storage, and add media-related services and database entities. Include ffmpeg for media handling and adjust Kestrel settings for large file uploads.
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
using TeleWave.Domain.Media;
|
||||
using Xunit;
|
||||
|
||||
namespace TeleWave.Domain.Tests.Media;
|
||||
|
||||
public class MediaAssetTests
|
||||
{
|
||||
[Fact]
|
||||
public void Register_CreatesPendingAsset_WithNormalizedExtension()
|
||||
{
|
||||
var asset = MediaAsset.Register("Simpsons S05E01.MKV", ".MKV", MediaSource.Upload);
|
||||
|
||||
Assert.Equal(MediaAssetStatus.Pending, asset.Status);
|
||||
Assert.Equal(".mkv", asset.OriginalExtension);
|
||||
Assert.Equal("Simpsons S05E01.MKV", asset.OriginalFileName);
|
||||
Assert.Equal(MediaSource.Upload, asset.Source);
|
||||
Assert.NotEqual(Guid.Empty, asset.Id);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MarkProcessing_SetsProcessingAndClearsError()
|
||||
{
|
||||
var asset = MediaAsset.Register("a.mp4", ".mp4", MediaSource.Inbox);
|
||||
asset.MarkFailed("boom");
|
||||
|
||||
asset.MarkProcessing();
|
||||
|
||||
Assert.Equal(MediaAssetStatus.Processing, asset.Status);
|
||||
Assert.Null(asset.ErrorMessage);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MarkReady_StoresSegmentationMetadata()
|
||||
{
|
||||
var asset = MediaAsset.Register("a.mp4", ".mp4", MediaSource.Upload);
|
||||
|
||||
asset.MarkReady(
|
||||
TimeSpan.FromSeconds(120),
|
||||
segmentSeconds: 2,
|
||||
segmentCount: 60,
|
||||
width: 1920,
|
||||
height: 1080,
|
||||
videoCodec: "h264",
|
||||
audioCodec: "aac",
|
||||
relativePath: "assets/abc"
|
||||
);
|
||||
|
||||
Assert.Equal(MediaAssetStatus.Ready, asset.Status);
|
||||
Assert.Equal(TimeSpan.FromSeconds(120), asset.Duration);
|
||||
Assert.Equal(2, asset.SegmentSeconds);
|
||||
Assert.Equal(60, asset.SegmentCount);
|
||||
Assert.Equal(1920, asset.Width);
|
||||
Assert.Equal(1080, asset.Height);
|
||||
Assert.Equal("assets/abc", asset.RelativePath);
|
||||
Assert.Null(asset.ErrorMessage);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MarkFailed_StoresError()
|
||||
{
|
||||
var asset = MediaAsset.Register("a.mp4", ".mp4", MediaSource.Upload);
|
||||
|
||||
asset.MarkFailed("ffmpeg exited 1");
|
||||
|
||||
Assert.Equal(MediaAssetStatus.Failed, asset.Status);
|
||||
Assert.Equal("ffmpeg exited 1", asset.ErrorMessage);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ResetToPending_FromProcessing_ReturnsToQueue()
|
||||
{
|
||||
var asset = MediaAsset.Register("a.mp4", ".mp4", MediaSource.Upload);
|
||||
asset.MarkProcessing();
|
||||
|
||||
asset.ResetToPending();
|
||||
|
||||
Assert.Equal(MediaAssetStatus.Pending, asset.Status);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user