Files
dnsmasq-webui/src/DnsmasqWebUI.Tests/Serialization/EffectiveConfigDirectiveSerializerTests.cs
T
alex 1b3a09996f Effective config: unified save pipeline, descriptors, serialization, WriteFailed rollback
- EffectiveConfigFieldRef as value type; PendingDnsmasqChange/PendingOptionChange/PendingManagedHostsChange
- Multi-file save plan (DnsmasqSaveWritePlan, DnsmasqManagedBackup) and backup/restore in save flow
- Hosts integrated into effective-config save; Hosts.razor uses shared save modal
- IEffectiveConfigDescriptorProvider + IEffectiveConfigFieldBuilder (DI); descriptors from EffectiveConfigSections
- IEffectiveConfigPageEditor, shared descriptor resolution; addn-hosts/dhcp-host descriptor fix
- DnsmasqConfText, IEffectiveConfigDirectiveSerializer; DnsmasqConfigService uses serializer for writes
- IStructuredOptionValueHandler/Registry, DhcpHostOptionValueHandler; Dhcp.razor index-based DeleteRow fix
- SaveService: roll back partial writes on failure; SaveModal: WriteFailed shows backups and Restore button
2026-03-12 01:48:19 +10:00

67 lines
2.1 KiB
C#

using DnsmasqWebUI.Infrastructure.Serialization;
using DnsmasqWebUI.Infrastructure.Services.EffectiveConfig.Metadata;
using DnsmasqWebUI.Models.Dnsmasq.EffectiveConfig;
namespace DnsmasqWebUI.Tests.Serialization;
public class EffectiveConfigDirectiveSerializerTests
{
private readonly EffectiveConfigDirectiveSerializer _sut = new();
[Fact]
public void SerializeSingle_Flag_True_WritesBareKey()
{
var result = _sut.SerializeSingle(DnsmasqConfKeys.Conntrack, true);
Assert.Equal(DnsmasqConfKeys.Conntrack, result);
}
[Fact]
public void SerializeSingle_Flag_False_WritesEmpty()
{
var result = _sut.SerializeSingle(DnsmasqConfKeys.Conntrack, false);
Assert.Equal("", result);
}
[Fact]
public void SerializeSingle_SingleValue_WritesKeyEqualsValue()
{
var result = _sut.SerializeSingle(DnsmasqConfKeys.Port, 5353);
Assert.Equal("port=5353", result);
}
[Fact]
public void SerializeSingle_KeyOnlyOrValue_Empty_WritesBareKey()
{
var result = _sut.SerializeSingle(DnsmasqConfKeys.UseStaleCache, "");
Assert.Equal(DnsmasqConfKeys.UseStaleCache, result);
}
[Fact]
public void SerializeMulti_MultiValue_WritesEachDirective()
{
var result = _sut.SerializeMulti(DnsmasqConfKeys.Server, ["1.1.1.1", "8.8.8.8"]);
Assert.Equal(["server=1.1.1.1", "server=8.8.8.8"], result);
}
[Fact]
public void SerializeMulti_MultiKeyOnlyOrValue_WritesMixedForms()
{
var result = _sut.SerializeMulti(DnsmasqConfKeys.Leasequery, ["", "net:tag"]);
Assert.Equal(["leasequery", "leasequery=net:tag"], result);
}
[Fact]
public void SerializeSingle_InversePair_Enabled_WritesPositiveKey()
{
var result = _sut.SerializeSingle(DnsmasqConfKeys.Do0x20Encode, ExplicitToggleState.Enabled);
Assert.Equal(DnsmasqConfKeys.Do0x20Encode, result);
}
[Fact]
public void SerializeSingle_InversePair_Disabled_WritesNegativeKey()
{
var result = _sut.SerializeSingle(DnsmasqConfKeys.Do0x20Encode, ExplicitToggleState.Disabled);
Assert.Equal(DnsmasqConfKeys.No0x20Encode, result);
}
}