49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|