diff --git a/DecaTec.WebDav/LockToken.cs b/DecaTec.WebDav/LockToken.cs index e75b224..c1629fd 100644 --- a/DecaTec.WebDav/LockToken.cs +++ b/DecaTec.WebDav/LockToken.cs @@ -8,6 +8,32 @@ namespace DecaTec.WebDav /// public class LockToken { + /// + /// Constructs a based on the . + /// + /// The lock token in absolute-URI format as defined in https://tools.ietf.org/html/rfc3986#section-4.3. + /// Use the strong-typed constructors to create a new . + public LockToken(string lockToken) + { + if (string.IsNullOrEmpty(lockToken)) + throw new ArgumentException($"The {nameof(lockToken)} cannot be null"); + + if (AbsoluteUri.TryParse(lockToken, out var absoluteUri)) + { + AbsoluteUri = absoluteUri; + var codedUrl = new CodedUrl(absoluteUri); + LockTokenHeaderFormat = codedUrl; + IfHeaderNoTagListFormat = new NoTagList(codedUrl); + } + else if (CodedUrl.TryParse(lockToken, out var codedUrl)) + { + LockTokenHeaderFormat = codedUrl; + IfHeaderNoTagListFormat = new NoTagList(codedUrl); + } + else + IfHeaderNoTagListFormat = new NoTagList(lockToken); + } + /// /// Constructs a based on the . /// diff --git a/UnitTests/DecaTec.WebDav.UnitTest/UnitTestLockToken.cs b/UnitTests/DecaTec.WebDav.UnitTest/UnitTestLockToken.cs index 6a0ed49..ceebfea 100644 --- a/UnitTests/DecaTec.WebDav.UnitTest/UnitTestLockToken.cs +++ b/UnitTests/DecaTec.WebDav.UnitTest/UnitTestLockToken.cs @@ -17,6 +17,21 @@ public void UT_LockToken_IfHeaderNoTagListFormat_IfHeaderWithoutBrackets() Assert.IsTrue(parseResult); } + [TestMethod] + public void UT_LockToken_Construct_IfHeaderNoTagListFormat_IfHeaderWithoutBracketsWithString() + { + var lockTokenString = "urn:uuid:my-lock-token"; + + var lockToken = new LockToken(lockTokenString); + var absoluteUri = lockToken.AbsoluteUri; + var lockTokenHeaderFormat = lockToken.LockTokenHeaderFormat; + var noTagList = lockToken.IfHeaderNoTagListFormat; + + Assert.AreEqual("urn:uuid:my-lock-token", absoluteUri.ToString()); + Assert.AreEqual("", lockTokenHeaderFormat.ToString()); + Assert.AreEqual("()", noTagList.ToString()); + } + [TestMethod] public void UT_LockToken_IfHeaderNoTagListFormat_IfHeaderWithBrackets() { @@ -29,6 +44,21 @@ public void UT_LockToken_IfHeaderNoTagListFormat_IfHeaderWithBrackets() Assert.IsTrue(parseResult); } + [TestMethod] + public void UT_LockToken_Construct_IfHeaderNoTagListFormat_IfHeaderWithBracketsWithString() + { + var lockTokenString = ""; + + var lockToken = new LockToken(lockTokenString); + var absoluteUri = lockToken.AbsoluteUri; + var noTagList = lockToken.IfHeaderNoTagListFormat; + var lockTokenHeaderFormat = lockToken.LockTokenHeaderFormat; + + Assert.IsNull(absoluteUri); + Assert.AreEqual("", lockTokenHeaderFormat.ToString()); + Assert.AreEqual("()", noTagList.ToString()); + } + [TestMethod] public void UT_LockToken_LockTokenHeaderFormat_LockTokenHeaderWithoutBrackets() { @@ -41,6 +71,21 @@ public void UT_LockToken_LockTokenHeaderFormat_LockTokenHeaderWithoutBrackets() Assert.IsTrue(parseResult); } + [TestMethod] + public void UT_LockToken_Construct_LockTokenHeaderFormat_LockTokenHeaderWithoutBracketsWithString() + { + var lockTokenString = "urn:uuid:my-lock-token"; + + var lockToken = new LockToken(lockTokenString); + var absoluteUri = lockToken.AbsoluteUri; + var codedUrl = lockToken.LockTokenHeaderFormat; + var ifHeaderNoTagListFormat = lockToken.IfHeaderNoTagListFormat; + + Assert.AreEqual("urn:uuid:my-lock-token", absoluteUri.ToString()); + Assert.AreEqual("", codedUrl.ToString()); + Assert.AreEqual("()", ifHeaderNoTagListFormat.ToString()); + } + [TestMethod] public void UT_LockToken_LockTokenHeaderFormat_LockTokenHeaderWithBrackets() { @@ -53,6 +98,21 @@ public void UT_LockToken_LockTokenHeaderFormat_LockTokenHeaderWithBrackets() Assert.IsTrue(parseResult); } + [TestMethod] + public void UT_LockToken_Construct_LockTokenHeaderFormat_LockTokenHeaderWithBracketsWithString() + { + var lockTokenString = ""; + + var lockToken = new LockToken(lockTokenString); + var absoluteUri = lockToken.AbsoluteUri; + var lockTokenHeaderFormat = lockToken.LockTokenHeaderFormat; + var ifHeaderNoTagListFormat = lockToken.IfHeaderNoTagListFormat; + + Assert.IsNull(absoluteUri); + Assert.AreEqual("", lockTokenHeaderFormat.ToString()); + Assert.AreEqual("()", ifHeaderNoTagListFormat.ToString()); + } + [TestMethod] public void UT_LockToken_LockTokenHeaderFormat_LockTokenHeaderWithBothBrackets() { @@ -64,5 +124,20 @@ public void UT_LockToken_LockTokenHeaderFormat_LockTokenHeaderWithBothBrackets() Assert.AreEqual("()", lockTokenHeaderFormat.ToString()); Assert.IsTrue(parseResult); } + + [TestMethod] + public void UT_LockToken_Construct_LockTokenHeaderFormat_LockTokenHeaderWithBothBracketsWithString() + { + var lockTokenString = "()"; + + var lockToken = new LockToken(lockTokenString); + var absoluteUri = lockToken.AbsoluteUri; + var codedUrl = lockToken.LockTokenHeaderFormat; + var lockTokenHeaderFormat = lockToken.IfHeaderNoTagListFormat; + + Assert.IsNull(absoluteUri); + Assert.IsNull(codedUrl); + Assert.AreEqual("()", lockTokenHeaderFormat.ToString()); + } } }