mirror of
https://github.com/Sonarr/Sonarr.git
synced 2025-03-25 22:00:54 +02:00
Add API validation and tests for quality limits
This commit is contained in:
parent
e893ca4f1c
commit
2f193ac58a
@ -0,0 +1,99 @@
|
||||
using FluentValidation.TestHelper;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using Sonarr.Api.V3.Qualities;
|
||||
|
||||
namespace NzbDrone.Api.Test.v3.Qualities;
|
||||
|
||||
[Parallelizable(ParallelScope.All)]
|
||||
public class QualityDefinitionResourceValidatorTests
|
||||
{
|
||||
private readonly QualityDefinitionResourceValidator _validator;
|
||||
private readonly QualityDefinitionLimits _limits;
|
||||
|
||||
public QualityDefinitionResourceValidatorTests()
|
||||
{
|
||||
_limits = new QualityDefinitionLimits();
|
||||
_validator = new QualityDefinitionResourceValidator(_limits);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Validate_fails_when_min_size_is_below_min_limit()
|
||||
{
|
||||
var resource = new QualityDefinitionResource { MinSize = _limits.MinLimit - 1 };
|
||||
|
||||
var result = _validator.TestValidate(resource);
|
||||
|
||||
result.ShouldHaveValidationErrorFor(r => r.MinSize)
|
||||
.WithErrorCode("GreaterThanOrEqualTo");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Validate_fails_when_min_size_is_above_preferred_size()
|
||||
{
|
||||
var resource = new QualityDefinitionResource
|
||||
{
|
||||
MinSize = 10,
|
||||
PreferredSize = 5
|
||||
};
|
||||
|
||||
var result = _validator.TestValidate(resource);
|
||||
|
||||
result.ShouldHaveValidationErrorFor(r => r.MinSize)
|
||||
.WithErrorCode("LessThanOrEqualTo");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Validate_passes_when_min_size_is_within_limits()
|
||||
{
|
||||
var resource = new QualityDefinitionResource
|
||||
{
|
||||
MinSize = _limits.MinLimit,
|
||||
PreferredSize = _limits.MaxLimit
|
||||
};
|
||||
|
||||
var result = _validator.TestValidate(resource);
|
||||
|
||||
result.ShouldNotHaveAnyValidationErrors();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Validate_fails_when_max_size_is_below_preferred_size()
|
||||
{
|
||||
var resource = new QualityDefinitionResource
|
||||
{
|
||||
MaxSize = 5,
|
||||
PreferredSize = 10
|
||||
};
|
||||
|
||||
var result = _validator.TestValidate(resource);
|
||||
|
||||
result.ShouldHaveValidationErrorFor(r => r.MaxSize)
|
||||
.WithErrorCode("GreaterThanOrEqualTo");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Validate_fails_when_max_size_exceeds_max_limit()
|
||||
{
|
||||
var resource = new QualityDefinitionResource { MaxSize = _limits.MaxLimit + 1 };
|
||||
|
||||
var result = _validator.TestValidate(resource);
|
||||
|
||||
result.ShouldHaveValidationErrorFor(r => r.MaxSize)
|
||||
.WithErrorCode("LessThanOrEqualTo");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Validate_passes_when_max_size_is_within_limits()
|
||||
{
|
||||
var resource = new QualityDefinitionResource
|
||||
{
|
||||
MaxSize = _limits.MaxLimit,
|
||||
PreferredSize = _limits.MinLimit
|
||||
};
|
||||
|
||||
var result = _validator.TestValidate(resource);
|
||||
|
||||
result.ShouldNotHaveAnyValidationErrors();
|
||||
}
|
||||
}
|
@ -20,6 +20,15 @@ namespace Sonarr.Api.V3.Qualities
|
||||
: base(signalRBroadcaster)
|
||||
{
|
||||
_qualityDefinitionService = qualityDefinitionService;
|
||||
|
||||
SetupValidation(qualityDefinitionService);
|
||||
}
|
||||
|
||||
private void SetupValidation(IQualityDefinitionService qualityDefinitionService)
|
||||
{
|
||||
var limits = qualityDefinitionService.GetLimits();
|
||||
SharedValidator.RuleFor(c => c)
|
||||
.SetValidator(new QualityDefinitionResourceValidator(limits));
|
||||
}
|
||||
|
||||
[RestPutById]
|
||||
|
@ -0,0 +1,28 @@
|
||||
using FluentValidation;
|
||||
using NzbDrone.Core.Qualities;
|
||||
|
||||
namespace Sonarr.Api.V3.Qualities;
|
||||
|
||||
public class QualityDefinitionResourceValidator : AbstractValidator<QualityDefinitionResource>
|
||||
{
|
||||
public QualityDefinitionResourceValidator(QualityDefinitionLimits limits)
|
||||
{
|
||||
When(c => c.MinSize is not null, () =>
|
||||
{
|
||||
RuleFor(c => c.MinSize)
|
||||
.GreaterThanOrEqualTo(limits.MinLimit)
|
||||
.WithErrorCode("GreaterThanOrEqualTo")
|
||||
.LessThanOrEqualTo(c => c.PreferredSize ?? limits.MaxLimit)
|
||||
.WithErrorCode("LessThanOrEqualTo");
|
||||
});
|
||||
|
||||
When(c => c.MaxSize is not null, () =>
|
||||
{
|
||||
RuleFor(c => c.MaxSize)
|
||||
.GreaterThanOrEqualTo(c => c.PreferredSize ?? limits.MinLimit)
|
||||
.WithErrorCode("GreaterThanOrEqualTo")
|
||||
.LessThanOrEqualTo(limits.MaxLimit)
|
||||
.WithErrorCode("LessThanOrEqualTo");
|
||||
});
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user