Separate responsibilities: start-listening command, API-side JSON converters, bulk track endpoints, mix kinds

This commit is contained in:
2026-09-24 12:14:53 +02:00
parent 75d0c0817e
commit 0fa033faff
64 changed files with 2903 additions and 651 deletions
@@ -0,0 +1,48 @@
using Musify.Api.DataTransferObjects.Tracks;
using Musify.Api.Validators.Tracks;
using Musify.Domain.ValueObjects;
using Xunit;
namespace Musify.Api.Tests.Validators;
public sealed class TrackRequestValidatorTests
{
[Fact]
public void CreateTrack_ValidRequest_Passes()
{
var request = new CreateTrackRequest("Song", Guid.NewGuid(), Guid.NewGuid(), [Genre.Pop, Genre.Rock]);
Assert.True(new CreateTrackRequestValidator().Validate(request).IsValid);
}
[Fact]
public void CreateTrack_NoTags_Fails()
{
var request = new CreateTrackRequest("Song", Guid.NewGuid(), Guid.NewGuid(), []);
Assert.False(new CreateTrackRequestValidator().Validate(request).IsValid);
}
[Fact]
public void CreateTrack_IncompatibleTags_Fails()
{
var request = new CreateTrackRequest("Song", Guid.NewGuid(), Guid.NewGuid(), [Genre.Classical, Genre.Metal]);
Assert.False(new CreateTrackRequestValidator().Validate(request).IsValid);
}
[Theory]
[InlineData(-1)]
[InlineData(double.NaN)]
[InlineData(double.PositiveInfinity)]
public void RecordListeningProgress_InvalidSeconds_Fails(double seconds)
{
Assert.False(new RecordListeningProgressRequestValidator().Validate(new RecordListeningProgressRequest(seconds)).IsValid);
}
[Fact]
public void RecordListeningProgress_ZeroSeconds_Passes()
{
Assert.True(new RecordListeningProgressRequestValidator().Validate(new RecordListeningProgressRequest(0)).IsValid);
}
}