mirror of
https://github.com/alexhopeoconnor/dnsmasq-webui.git
synced 2026-10-21 19:32:35 +10:00
Refactor settings modal to use ISettingsModalService and SettingsModalSections
- Replace SettingsModalContext with SettingsModalSections - Add SettingsModalService for modal state management - Add StatusSection.razor.css for status-dot styles - Update layout, NavMenu, and modal components - Update tests for config/settings changes
This commit is contained in:
@@ -19,73 +19,89 @@ public class DnsmasqConfFileLineParserTests
|
||||
[Fact]
|
||||
public void ParseFile_BlankLine_BlankKind()
|
||||
{
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([""]);
|
||||
var raw = "";
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([raw]);
|
||||
Assert.Single(lines);
|
||||
var blank = Assert.IsType<BlankLine>(lines[0]);
|
||||
Assert.Equal(1, blank.LineNumber);
|
||||
Assert.Equal("", blank.RawLine);
|
||||
Assert.Equal(raw, blank.RawLine);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseFile_BlankLineWithSpaces_BlankKind()
|
||||
{
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([" \t "]);
|
||||
var raw = " \t ";
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([raw]);
|
||||
Assert.Single(lines);
|
||||
var blank = Assert.IsType<BlankLine>(lines[0]);
|
||||
Assert.Equal(" \t ", blank.RawLine);
|
||||
Assert.Equal(raw, blank.RawLine);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseFile_CommentLine_CommentKind()
|
||||
{
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile(["# Not managed by this app."]);
|
||||
var commentLine = "# Not managed by this app.";
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([commentLine]);
|
||||
Assert.Single(lines);
|
||||
var comment = Assert.IsType<CommentLine>(lines[0]);
|
||||
Assert.Equal(1, comment.LineNumber);
|
||||
Assert.Equal("# Not managed by this app.", comment.RawLine);
|
||||
Assert.Equal(commentLine, comment.RawLine);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseFile_OtherDirective_OtherKind()
|
||||
{
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile(["domain=local"]);
|
||||
var raw = "domain=local";
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([raw]);
|
||||
Assert.Single(lines);
|
||||
var other = Assert.IsType<OtherLine>(lines[0]);
|
||||
Assert.Equal("domain=local", other.RawLine);
|
||||
Assert.Equal(raw, other.RawLine);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseFile_AddnHostsLine_AddnHostsKind()
|
||||
{
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile(["addn-hosts=/var/lib/dnsmasq/hosts"]);
|
||||
var path = "/var/lib/dnsmasq/hosts";
|
||||
var line = $"addn-hosts={path}";
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([line]);
|
||||
Assert.Single(lines);
|
||||
var addn = Assert.IsType<AddnHostsLine>(lines[0]);
|
||||
Assert.Equal("/var/lib/dnsmasq/hosts", addn.AddnHostsPath);
|
||||
Assert.Equal(path, addn.AddnHostsPath);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToLine_AddnHosts_EmitsAddnHostsLine()
|
||||
{
|
||||
var line = new AddnHostsLine { LineNumber = 1, AddnHostsPath = "/etc/hosts" };
|
||||
Assert.Equal("addn-hosts=/etc/hosts", DnsmasqConfFileLineParser.ToLine(line));
|
||||
var path = "/etc/hosts";
|
||||
var line = new AddnHostsLine { LineNumber = 1, AddnHostsPath = path };
|
||||
Assert.Equal($"addn-hosts={path}", DnsmasqConfFileLineParser.ToLine(line));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseFile_DhcpHostLine_DhcpHostKind()
|
||||
{
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile(["dhcp-host=aa:bb:cc:dd:ee:ff,192.168.1.10,testpc,infinite"]);
|
||||
string mac = "aa:bb:cc:dd:ee:ff";
|
||||
string address = "192.168.1.10";
|
||||
string name = "testpc";
|
||||
string lease = "infinite";
|
||||
var line = $"dhcp-host={mac},{address},{name},{lease}";
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([line]);
|
||||
Assert.Single(lines);
|
||||
var dhcpLine = Assert.IsType<DhcpHostLine>(lines[0]);
|
||||
Assert.Single(dhcpLine.DhcpHost.MacAddresses);
|
||||
Assert.Equal("aa:bb:cc:dd:ee:ff", dhcpLine.DhcpHost.MacAddresses[0]);
|
||||
Assert.Equal("192.168.1.10", dhcpLine.DhcpHost.Address);
|
||||
Assert.Equal(mac, dhcpLine.DhcpHost.MacAddresses[0]);
|
||||
Assert.Equal(address, dhcpLine.DhcpHost.Address);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseFile_CommentedDhcpHost_TreatedAsComment()
|
||||
{
|
||||
// Parser treats any line starting with # as Comment (does not parse dhcp-host content)
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile(["#dhcp-host=aa:bb:cc:dd:ee:ff,192.168.1.10,oldpc"]);
|
||||
string mac = "aa:bb:cc:dd:ee:ff";
|
||||
string address = "192.168.1.10";
|
||||
string name = "oldpc";
|
||||
var line = $"#dhcp-host={mac},{address},{name}";
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile([line]);
|
||||
Assert.Single(lines);
|
||||
Assert.Equal(DnsmasqConfLineKind.Comment, lines[0].Kind);
|
||||
}
|
||||
@@ -93,13 +109,21 @@ public class DnsmasqConfFileLineParserTests
|
||||
[Fact]
|
||||
public void ParseFile_MixedFile_ParsesAll()
|
||||
{
|
||||
var domainLine = "domain=local";
|
||||
string dhcpMac = "11:22:33:44:55:66";
|
||||
string dhcpAddress = "192.168.1.11";
|
||||
string dhcpName = "laptop";
|
||||
string dhcpLease = "infinite";
|
||||
var rangeLine = "dhcp-range=192.168.1.100,192.168.1.200";
|
||||
var dhcpLine = $"dhcp-host={dhcpMac},{dhcpAddress},{dhcpName},{dhcpLease}";
|
||||
|
||||
var input = new[]
|
||||
{
|
||||
"# Sample config",
|
||||
"",
|
||||
"domain=local",
|
||||
"dhcp-host=11:22:33:44:55:66,192.168.1.11,laptop,infinite",
|
||||
"dhcp-range=192.168.1.100,192.168.1.200"
|
||||
domainLine,
|
||||
dhcpLine,
|
||||
rangeLine
|
||||
};
|
||||
var lines = DnsmasqConfFileLineParser.ParseFile(input);
|
||||
Assert.Equal(5, lines.Count);
|
||||
@@ -107,48 +131,55 @@ public class DnsmasqConfFileLineParserTests
|
||||
Assert.IsType<CommentLine>(lines[0]);
|
||||
Assert.IsType<BlankLine>(lines[1]);
|
||||
var other2 = Assert.IsType<OtherLine>(lines[2]);
|
||||
Assert.Equal("domain=local", other2.RawLine);
|
||||
Assert.Equal(domainLine, other2.RawLine);
|
||||
var dhcp3 = Assert.IsType<DhcpHostLine>(lines[3]);
|
||||
Assert.Equal("192.168.1.11", dhcp3.DhcpHost.Address);
|
||||
Assert.Equal(dhcpAddress, dhcp3.DhcpHost.Address);
|
||||
var other4 = Assert.IsType<OtherLine>(lines[4]);
|
||||
Assert.Equal("dhcp-range=192.168.1.100,192.168.1.200", other4.RawLine);
|
||||
Assert.Equal(rangeLine, other4.RawLine);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToLine_Blank_PreservesRawLine()
|
||||
{
|
||||
var line = new BlankLine { LineNumber = 1, RawLine = " " };
|
||||
Assert.Equal(" ", DnsmasqConfFileLineParser.ToLine(line));
|
||||
var raw = " ";
|
||||
var line = new BlankLine { LineNumber = 1, RawLine = raw };
|
||||
Assert.Equal(raw, DnsmasqConfFileLineParser.ToLine(line));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToLine_Comment_PreservesRawLine()
|
||||
{
|
||||
var line = new CommentLine { LineNumber = 1, RawLine = "# comment" };
|
||||
Assert.Equal("# comment", DnsmasqConfFileLineParser.ToLine(line));
|
||||
var raw = "# comment";
|
||||
var line = new CommentLine { LineNumber = 1, RawLine = raw };
|
||||
Assert.Equal(raw, DnsmasqConfFileLineParser.ToLine(line));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToLine_Other_PreservesRawLine()
|
||||
{
|
||||
var line = new OtherLine { LineNumber = 1, RawLine = "domain=local" };
|
||||
Assert.Equal("domain=local", DnsmasqConfFileLineParser.ToLine(line));
|
||||
var raw = "domain=local";
|
||||
var line = new OtherLine { LineNumber = 1, RawLine = raw };
|
||||
Assert.Equal(raw, DnsmasqConfFileLineParser.ToLine(line));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToLine_DhcpHost_SerializesViaDhcpHostLineParser()
|
||||
{
|
||||
string mac = "aa:bb:cc:dd:ee:ff";
|
||||
string address = "192.168.1.10";
|
||||
string name = "testpc";
|
||||
string lease = "infinite";
|
||||
var dhcp = new DhcpHostEntry
|
||||
{
|
||||
LineNumber = 1,
|
||||
MacAddresses = ["aa:bb:cc:dd:ee:ff"],
|
||||
Address = "192.168.1.10",
|
||||
Name = "testpc",
|
||||
Lease = "infinite"
|
||||
MacAddresses = [mac],
|
||||
Address = address,
|
||||
Name = name,
|
||||
Lease = lease
|
||||
};
|
||||
var line = new DhcpHostLine { LineNumber = 1, DhcpHost = dhcp };
|
||||
var back = DnsmasqConfFileLineParser.ToLine(line);
|
||||
Assert.Equal("dhcp-host=aa:bb:cc:dd:ee:ff, testpc, 192.168.1.10, infinite", back);
|
||||
Assert.Equal($"dhcp-host={mac}, {name}, {address}, {lease}", back);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
Reference in New Issue
Block a user