Fix queue rules upper bound to never allow 0 (#543)

This commit is contained in:
Flaminel
2026-04-03 16:11:12 +03:00
committed by GitHub
parent 81f6de03e7
commit ef280ec398
5 changed files with 32 additions and 10 deletions

View File

@@ -20,7 +20,7 @@ public abstract record QueueRuleDto
[Range(0, 100, ErrorMessage = "Minimum completion percentage must be between 0 and 100")]
public ushort MinCompletionPercentage { get; set; }
[Range(0, 100, ErrorMessage = "Maximum completion percentage must be between 0 and 100")]
[Range(1, 100, ErrorMessage = "Maximum completion percentage must be between 1 and 100")]
public ushort MaxCompletionPercentage { get; set; }
public bool DeletePrivateTorrentsFromClient { get; set; } = false;

View File

@@ -188,11 +188,26 @@ public sealed class QueueRuleTests
};
var exception = Should.Throw<ValidationException>(() => rule.Validate());
exception.Message.ShouldBe("Maximum completion percentage must be between 0 and 100");
exception.Message.ShouldBe("Maximum completion percentage must be between 1 and 100");
}
[Fact]
public void Validate_WithZeroMaxCompletionPercentage_ThrowsValidationException()
{
var rule = new StallRule
{
Name = "test-rule",
MaxStrikes = 3,
MinCompletionPercentage = 0,
MaxCompletionPercentage = 0
};
var exception = Should.Throw<ValidationException>(() => rule.Validate());
exception.Message.ShouldBe("Maximum completion percentage must be greater than 0");
}
[Theory]
[InlineData((ushort)0)]
[InlineData((ushort)1)]
[InlineData((ushort)50)]
[InlineData((ushort)100)]
public void Validate_WithValidMaxCompletionPercentage_DoesNotThrow(ushort maxCompletionPercentage)

View File

@@ -24,8 +24,8 @@ public abstract record QueueRule : IConfig, IQueueRule
public TorrentPrivacyType PrivacyType { get; init; } = TorrentPrivacyType.Public;
public ushort MinCompletionPercentage { get; init; } = 0;
public ushort MaxCompletionPercentage { get; init; }
public ushort MaxCompletionPercentage { get; init; } = 100;
public bool DeletePrivateTorrentsFromClient { get; init; } = false;
@@ -48,9 +48,14 @@ public abstract record QueueRule : IConfig, IQueueRule
throw new Cleanuparr.Domain.Exceptions.ValidationException("Minimum completion percentage must be between 0 and 100");
}
if (MaxCompletionPercentage == 0)
{
throw new Cleanuparr.Domain.Exceptions.ValidationException("Maximum completion percentage must be greater than 0");
}
if (MaxCompletionPercentage > 100)
{
throw new Cleanuparr.Domain.Exceptions.ValidationException("Maximum completion percentage must be between 0 and 100");
throw new Cleanuparr.Domain.Exceptions.ValidationException("Maximum completion percentage must be between 1 and 100");
}
if (MaxCompletionPercentage < MinCompletionPercentage)