diff --git a/starsky/starsky.feature.health/UpdateCheck/Services/SpecificVersionReleaseInfo.cs b/starsky/starsky.feature.health/UpdateCheck/Services/SpecificVersionReleaseInfo.cs index 1cc51d705d..67e3da6fc7 100644 --- a/starsky/starsky.feature.health/UpdateCheck/Services/SpecificVersionReleaseInfo.cs +++ b/starsky/starsky.feature.health/UpdateCheck/Services/SpecificVersionReleaseInfo.cs @@ -85,11 +85,12 @@ internal string Parse(string json, string? latestVersion) internal static string ConvertMarkdownLinkToHtml(string markdown) { // Regular expression to match Markdown links + // [Link text Here](https://link-url-here.org) const string pattern = @"\[(.*?)\]\((.*?)\)"; // Replace Markdown links with HTML anchor tags return Regex.Replace(markdown, pattern, - "$1", RegexOptions.None, + "$1", RegexOptions.None, TimeSpan.FromMilliseconds(100)); } diff --git a/starsky/starskytest/starsky.feature.health/Services/SpecificVersionReleaseInfoTest.cs b/starsky/starskytest/starsky.feature.health/Services/SpecificVersionReleaseInfoTest.cs index a91ac2ff03..4cb9a091a2 100644 --- a/starsky/starskytest/starsky.feature.health/Services/SpecificVersionReleaseInfoTest.cs +++ b/starsky/starskytest/starsky.feature.health/Services/SpecificVersionReleaseInfoTest.cs @@ -126,7 +126,7 @@ public async Task SpecificVersionMessage_CacheEnabledGetValue_SetInCache() .BuildServiceProvider(); const string example = - "{\n \"v0.6.0\" : {\n \"en\": \"Content\"\n },\n \"v0.6.0-beta.0\" : {\n \"en\": \"Content\"\n }\n}"; + "{\n \"0.6.0\" : {\n \"en\": \"Content\"\n },\n \"0.6.0-beta.0\" : {\n \"en\": \"Content\"\n }\n}"; var memoryCache = serviceProvider.GetRequiredService(); @@ -157,4 +157,169 @@ public async Task SpecificVersionMessage_CacheEnabledGetValue_SetInCache() Assert.IsNotNull(result); Assert.AreEqual(example, result); } + + [TestMethod] + public void ParseTest_String_Empty() + { + var fakeIHttpProvider = new FakeIHttpProvider(); + + var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, null, new FakeIWebLogger()); + + var specificVersionReleaseInfo = + new SpecificVersionReleaseInfo(httpClientHelper, + new AppSettings { AddMemoryCache = true }, null, + new FakeIWebLogger()); + + var result = specificVersionReleaseInfo.Parse(string.Empty, "0.6.0"); + Assert.AreEqual(string.Empty, result); + } + + [TestMethod] + public void ParseTest_VersionNotFound() + { + var fakeIHttpProvider = new FakeIHttpProvider(); + + var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, null, new FakeIWebLogger()); + const string example = + "{\n \"0.6.0\" : {\n \"en\": \"Content\"\n },\n \"0.6.0-beta.0\" : {\n \"en\": \"Content\"\n }\n}"; + + + var specificVersionReleaseInfo = + new SpecificVersionReleaseInfo(httpClientHelper, + new AppSettings { AddMemoryCache = true }, null, + new FakeIWebLogger()); + + var result = specificVersionReleaseInfo.Parse(example, "0.1.0"); + Assert.AreEqual(string.Empty, result); + } + + [TestMethod] + public void ParseTest_VersionFound() + { + var fakeIHttpProvider = new FakeIHttpProvider(); + + var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, null, new FakeIWebLogger()); + const string example = + "{\n \"0.6.0\" : {\n \"en\": \"Content\"\n },\n \"0.6.0-beta.0\" : {\n \"en\": \"Content\"\n }\n}"; + + + var specificVersionReleaseInfo = + new SpecificVersionReleaseInfo(httpClientHelper, + new AppSettings { AddMemoryCache = true }, null, + new FakeIWebLogger()); + + var result = specificVersionReleaseInfo.Parse(example, "0.6.0-beta.0"); + Assert.AreEqual("Content", result); + } + + [TestMethod] + public void ParseTest_InvalidJson() + { + var fakeIHttpProvider = new FakeIHttpProvider(); + + var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, null, new FakeIWebLogger()); + const string example = + "{\n \"0.6.0\" : {\n --"; + + + var specificVersionReleaseInfo = + new SpecificVersionReleaseInfo(httpClientHelper, + new AppSettings { AddMemoryCache = true }, null, + new FakeIWebLogger()); + + var result = specificVersionReleaseInfo.Parse(example, "0.6.0-beta.0"); + Assert.AreEqual(string.Empty, result); + } + + [TestMethod] + public void ParseTest_LanguageKeyNotFound() + { + var fakeIHttpProvider = new FakeIHttpProvider(); + + var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, null, new FakeIWebLogger()); + const string example = + "{\n \"0.6.0\" : {\n }\n}"; + + var specificVersionReleaseInfo = + new SpecificVersionReleaseInfo(httpClientHelper, + new AppSettings { AddMemoryCache = true }, null, + new FakeIWebLogger()); + + var result = specificVersionReleaseInfo.Parse(example, "0.6.0"); + Assert.AreEqual(string.Empty, result); + } + + [TestMethod] + public void ParseTest_VersionFound_HtmlLink() + { + var fakeIHttpProvider = new FakeIHttpProvider(); + + var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, null, new FakeIWebLogger()); + const string example = + "{\n \"0.6.0\" : {\n \"en\": \"[Link text Here](https://link-url-here.org)\"\n },\n \"0.6.0-beta.0\" : {\n \"en\": \"Content\"\n }\n}"; + + + var specificVersionReleaseInfo = + new SpecificVersionReleaseInfo(httpClientHelper, + new AppSettings { AddMemoryCache = true }, null, + new FakeIWebLogger()); + + var result = specificVersionReleaseInfo.Parse(example, "0.6.0"); + Assert.AreEqual( + "Link text Here", + result); + } + + [TestMethod] + public void ConvertMarkdownLinkToHtml_Test() + { + var markdownLinkToHtml = SpecificVersionReleaseInfo.ConvertMarkdownLinkToHtml( + "Content [Link text Here](https://link-url-here.org) " + + "[link1](https://example.com)"); + + Assert.AreEqual( + "Content Link text Here " + + "link1", + markdownLinkToHtml); + } + + [TestMethod] + public async Task QuerySpecificVersionInfo_GetResult() + { + const string example = + "{\n \"0.6.0\" : {\n \"en\": \"Content\"\n },\n \"0.6.0-beta.0\" : {\n \"en\": \"Content\"\n }\n}"; + + var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary + { + // Mocking the response from the fake HTTP provider + { + "https://" + SpecificVersionReleaseInfo.SpecificVersionReleaseInfoUrl, + new StringContent(example) + } + }); + + var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, null, new FakeIWebLogger()); + var specificVersionReleaseInfo = + new SpecificVersionReleaseInfo(httpClientHelper, null, null, + new FakeIWebLogger()); + + var result = await specificVersionReleaseInfo.QuerySpecificVersionInfo(); + + Assert.AreEqual(example, result); + } + + [TestMethod] + public async Task QuerySpecificVersionInfo_NotFound() + { + var fakeIHttpProvider = new FakeIHttpProvider(); + + var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, null, new FakeIWebLogger()); + var specificVersionReleaseInfo = + new SpecificVersionReleaseInfo(httpClientHelper, null, null, + new FakeIWebLogger()); + + var result = await specificVersionReleaseInfo.QuerySpecificVersionInfo(); + + Assert.AreEqual(string.Empty, result); + } }