diff --git a/mRemoteNGTests/Config/Serializers/ConfConsEnsureConnectionsHaveIdsTests.cs b/mRemoteNGTests/Config/Serializers/ConfConsEnsureConnectionsHaveIdsTests.cs new file mode 100644 index 000000000..cc6c0f903 --- /dev/null +++ b/mRemoteNGTests/Config/Serializers/ConfConsEnsureConnectionsHaveIdsTests.cs @@ -0,0 +1,46 @@ +using System; +using System.Xml.Linq; +using mRemoteNG.Config.Serializers; +using NUnit.Framework; + + +namespace mRemoteNGTests.Config.Serializers +{ + public class ConfConsEnsureConnectionsHaveIdsTests + { + private ConfConsEnsureConnectionsHaveIds _consEnsureConnectionsHaveIds; + + [SetUp] + public void Setup() + { + _consEnsureConnectionsHaveIds = new ConfConsEnsureConnectionsHaveIds(); + } + + [Test] + public void IdAttributeIsAddedIfItDidntExist() + { + var xdoc = CreateTestDocument(); + _consEnsureConnectionsHaveIds.EnsureElementsHaveIds(xdoc); + var attribute = xdoc.Root?.Element("Node")?.Attribute("Id"); + Assert.That(attribute, Is.Not.Null); + } + + [Test] + public void NewIdAttributeShouldNotBeAnEmptyGuid() + { + var xdoc = CreateTestDocument(); + _consEnsureConnectionsHaveIds.EnsureElementsHaveIds(xdoc); + var attribute = xdoc.Root?.Element("Node")?.Attribute("Id"); + Assert.That(attribute?.Value, Is.Not.EqualTo(Guid.Empty.ToString())); + } + + private XDocument CreateTestDocument() + { + var xdoc = new XDocument(); + xdoc.Add(new XElement("Root", + new XElement("Node", + new XAttribute("Thingy","")))); + return xdoc; + } + } +} diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj index 96673c9d7..8c5bc2b02 100644 --- a/mRemoteNGTests/mRemoteNGTests.csproj +++ b/mRemoteNGTests/mRemoteNGTests.csproj @@ -112,6 +112,7 @@ + diff --git a/mRemoteV1/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs b/mRemoteV1/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs new file mode 100644 index 000000000..085d948ab --- /dev/null +++ b/mRemoteV1/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs @@ -0,0 +1,19 @@ +using System; +using System.Xml.Linq; + + +namespace mRemoteNG.Config.Serializers +{ + public class ConfConsEnsureConnectionsHaveIds + { + public void EnsureElementsHaveIds(XDocument xdoc) + { + foreach (var element in xdoc.Descendants("Node")) + { + if (element.Attribute("Id") != null) continue; + var id = Guid.NewGuid(); + element.Add(new XAttribute("Id", id)); + } + } + } +} \ No newline at end of file diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index f08f32e73..aecb83070 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -168,6 +168,7 @@ +