public void NullAndMissingUrlValues()
        {
            // When URL is null (which should never really happen), the URI string
            // should be empty.
            IKeePassEntry nullUrl = new MockEntry
            {
                Url = null
            };

            Assert.AreEqual(string.Empty, nullUrl.ConstructUriString());
            Assert.IsNull(nullUrl.GetLaunchableUri());

            // Basic test case for empty string (common case)
            IKeePassEntry emptyUrl = new MockEntry
            {
                Url = new UnprotectedString(string.Empty)
            };

            Assert.AreEqual(string.Empty, emptyUrl.ConstructUriString());
            Assert.IsNull(emptyUrl.GetLaunchableUri());

            // When OverrideUrl is not null, but empty, it is ignored
            IKeePassEntry emptyOverride = new MockEntry
            {
                Url = new UnprotectedString("http://example.com/"),
                OverrideUrl = string.Empty
            };

            Assert.AreEqual(emptyOverride.Url.ClearValue, emptyOverride.ConstructUriString());
            Assert.IsNotNull(emptyOverride.GetLaunchableUri());
        }
        public void InvalidOverrideUrl()
        {
            IKeePassEntry entry = new MockEntry
            {
                Url = new UnprotectedString(ValidUrl),
                OverrideUrl = InvalidUrl
            };

            Assert.AreEqual(InvalidUrl, entry.ConstructUriString());
            Assert.IsNull(entry.GetLaunchableUri());
        }
        public void ValidOverrideUrl()
        {
            IKeePassEntry entry = new MockEntry
            {
                Url = new UnprotectedString(ValidUrl),
                OverrideUrl = ValidOverride
            };

            Assert.AreEqual(ValidOverride, entry.ConstructUriString());
            Assert.AreEqual(ValidOverride, entry.GetLaunchableUri().AbsoluteUri);
        }