mirror of
https://github.com/alexhopeoconnor/dnsmasq-webui.git
synced 2026-10-03 22:12:00 +10:00
Unify parser, editor, and save-time validation around semantic metadata and handlers, add path-aware and structured option checks, and improve effective-config editing placeholders and unset behavior.
57 lines
2.4 KiB
C#
57 lines
2.4 KiB
C#
using DnsmasqWebUI.Infrastructure.Helpers.Config;
|
|
using DnsmasqWebUI.Infrastructure.Services.EffectiveConfig;
|
|
using DnsmasqWebUI.Infrastructure.Services.EffectiveConfig.Validation;
|
|
using DnsmasqWebUI.Models.Dnsmasq.EffectiveConfig;
|
|
|
|
namespace DnsmasqWebUI.Tests;
|
|
|
|
/// <summary>
|
|
/// Wiring tests that ensure special-option semantics actually feed parser and registry behavior.
|
|
/// </summary>
|
|
public class EffectiveConfigSemanticsWiringTests
|
|
{
|
|
[Fact]
|
|
public void ParserBehaviorMap_UsesSpecialSemantics_ForAllSpecialOptions()
|
|
{
|
|
foreach (var option in EffectiveConfigSpecialOptionSemantics.GetAllOptionNames())
|
|
{
|
|
var semantics = EffectiveConfigSpecialOptionSemantics.TryGetSemantics(option)!;
|
|
Assert.Equal(semantics.ParserBehavior, EffectiveConfigParserBehaviorMap.GetBehavior(option));
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void Registry_WiresLeasequeryMultiValidator_FromSpecialSemantics()
|
|
{
|
|
var registry = new EffectiveConfigRenderFragmentRegistry(new OptionSemanticValidator([new LeasequerySemanticHandler()]));
|
|
var factory = registry.GetMultiDescriptorFactory(EffectiveConfigFieldBuilder.SectionDhcp, DnsmasqConfKeys.Leasequery);
|
|
Assert.NotNull(factory);
|
|
|
|
var descriptor = factory!(
|
|
EffectiveConfigFieldBuilder.SectionDhcp,
|
|
DnsmasqConfKeys.Leasequery,
|
|
status: null,
|
|
getItems: _ => null);
|
|
|
|
Assert.NotNull(descriptor.Validator);
|
|
Assert.NotNull(descriptor.Validator!.ValidateItem("not-an-ip", Array.Empty<string>()));
|
|
Assert.Null(descriptor.Validator.ValidateItem("10.0.0.0/24", Array.Empty<string>()));
|
|
}
|
|
|
|
/// <summary>Pre-save semantic blocking: invalid leasequery value produces errors; SaveService uses this and returns SemanticValidationFailed before write.</summary>
|
|
[Fact]
|
|
public void SemanticValidationService_InvalidLeasequery_ReturnsError()
|
|
{
|
|
var validator = new OptionSemanticValidator([new LeasequerySemanticHandler()]);
|
|
var service = new EffectiveConfigSemanticValidationService(validator);
|
|
var changes = new List<PendingEffectiveConfigChange>
|
|
{
|
|
new(EffectiveConfigSections.SectionDhcp, DnsmasqConfKeys.Leasequery, null,
|
|
new List<string> { "not-an-ip" }, null)
|
|
};
|
|
var issues = service.Validate(changes);
|
|
Assert.NotEmpty(issues);
|
|
Assert.Contains(issues, i => i.Severity == FieldIssueSeverity.Error);
|
|
}
|
|
}
|