You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
recyclarr/src/Recyclarr.TrashLib.Tests/Config/ServiceConfigurationValidat...

243 lines
6.9 KiB

using FluentValidation.TestHelper;
using Recyclarr.Cli.TestLibrary;
using Recyclarr.TrashLib.Config.Services;
using Recyclarr.TrashLib.TestLibrary;
namespace Recyclarr.TrashLib.Tests.Config;
[TestFixture]
[Parallelizable(ParallelScope.All)]
public class ServiceConfigurationValidatorTest : IntegrationFixture
{
[Test]
public void Validation_succeeds()
{
var config = new TestConfig
{
ApiKey = "valid",
BaseUrl = new Uri("http://valid"),
InstanceName = "valid",
LineNumber = 1,
CustomFormats = new List<CustomFormatConfig>
{
new()
{
TrashIds = new List<string> {"valid"},
QualityProfiles = new List<QualityProfileScoreConfig>
{
new()
{
Name = "valid"
}
}
}
},
QualityDefinition = new QualityDefinitionConfig
{
Type = "valid"
}
};
var validator = Resolve<ServiceConfigurationValidator>();
var result = validator.TestValidate(config);
result.ShouldNotHaveAnyValidationErrors();
}
[Test]
public void Validation_failure_when_api_key_missing()
{
var config = new TestConfig
{
ApiKey = "", // Must not be empty
BaseUrl = new Uri("http://valid"),
CustomFormats = new List<CustomFormatConfig>
{
new()
{
TrashIds = new[] {"valid"},
QualityProfiles = new List<QualityProfileScoreConfig>
{
new()
{
Name = "valid"
}
}
}
},
QualityDefinition = new QualityDefinitionConfig
{
Type = "valid"
}
};
var validator = Resolve<ServiceConfigurationValidator>();
var result = validator.TestValidate(config);
result.ShouldHaveValidationErrorFor(x => x.ApiKey);
}
[Test]
public void Validation_failure_when_base_url_empty()
{
var config = new TestConfig
{
ApiKey = "valid",
BaseUrl = new Uri("about:empty"),
CustomFormats = new List<CustomFormatConfig>
{
new()
{
TrashIds = new[] {"valid"},
QualityProfiles = new List<QualityProfileScoreConfig>
{
new()
{
Name = "valid"
}
}
}
},
QualityDefinition = new QualityDefinitionConfig
{
Type = "valid"
}
};
var validator = Resolve<ServiceConfigurationValidator>();
var result = validator.TestValidate(config);
result.ShouldHaveValidationErrorFor(x => x.BaseUrl);
}
public static string FirstCf { get; } = $"{nameof(TestConfig.CustomFormats)}[0].";
[Test]
public void Validation_failure_when_cf_trash_ids_empty()
{
var config = new TestConfig
{
ApiKey = "valid",
BaseUrl = new Uri("http://valid"),
CustomFormats = new List<CustomFormatConfig>
{
new()
{
TrashIds = Array.Empty<string>(),
QualityProfiles = new List<QualityProfileScoreConfig>
{
new()
{
Name = "valid"
}
}
}
},
QualityDefinition = new QualityDefinitionConfig
{
Type = "valid"
}
};
var validator = Resolve<ServiceConfigurationValidator>();
var result = validator.TestValidate(config);
result.ShouldHaveValidationErrorFor(FirstCf + nameof(CustomFormatConfig.TrashIds));
}
[Test]
public void Validation_failure_when_quality_definition_type_empty()
{
var config = new TestConfig
{
ApiKey = "valid",
BaseUrl = new Uri("http://valid"),
CustomFormats = new List<CustomFormatConfig>
{
new()
{
TrashIds = new List<string> {"valid"},
QualityProfiles = new List<QualityProfileScoreConfig>
{
new()
{
Name = "valid"
}
}
}
},
QualityDefinition = new QualityDefinitionConfig
{
Type = ""
}
};
var validator = Resolve<ServiceConfigurationValidator>();
var result = validator.TestValidate(config);
result.ShouldHaveValidationErrorFor(x => x.QualityDefinition!.Type);
}
[Test]
public void Validation_failure_when_quality_profile_name_empty()
{
var config = new TestConfig
{
ApiKey = "valid",
BaseUrl = new Uri("http://valid"),
CustomFormats = new List<CustomFormatConfig>
{
new()
{
TrashIds = new List<string> {"valid"},
QualityProfiles = new List<QualityProfileScoreConfig>
{
new()
{
Name = ""
}
}
}
},
QualityDefinition = new QualityDefinitionConfig
{
Type = "valid"
}
};
var validator = Resolve<ServiceConfigurationValidator>();
var result = validator.TestValidate(config);
result.ShouldHaveValidationErrorFor(FirstCf +
$"{nameof(CustomFormatConfig.QualityProfiles)}[0].{nameof(QualityProfileScoreConfig.Name)}");
}
[Test]
public void Validation_failure_when_instance_name_empty()
{
var config = new TestConfig
{
InstanceName = ""
};
var validator = Resolve<ServiceConfigurationValidator>();
var result = validator.TestValidate(config);
result.ShouldHaveValidationErrorFor(x => x.InstanceName);
}
[Test]
public void Validation_failure_when_line_number_equals_zero()
{
var config = new TestConfig
{
LineNumber = 0
};
var validator = Resolve<ServiceConfigurationValidator>();
var result = validator.TestValidate(config);
result.ShouldHaveValidationErrorFor(x => x.LineNumber);
}
}