diff --git a/PatchPanda.Units/Helpers/ParsingHelperTests.cs b/PatchPanda.Units/Helpers/ParsingHelperTests.cs index dd49b35..4a8640a 100644 --- a/PatchPanda.Units/Helpers/ParsingHelperTests.cs +++ b/PatchPanda.Units/Helpers/ParsingHelperTests.cs @@ -170,7 +170,7 @@ public async Task SetGitHubRepo_CollapsesDifferentCandidates_WhenReleaseUrlsMatc var response = new ContainerListResponse { Image = - $"ghcr.io/{TestData.GITHUB_OWNER}/{TestData.GITHUB_REPO}:1.0,https://github.com/{TestData.OWNER_B}/{TestData.REPO_B}" + $"ghcr.io/{TestData.GITHUB_OWNER}/{TestData.GITHUB_REPO}:1.0,https://github.com/{TestData.OWNER_B}/{TestData.REPO_B}", }; var sharedRelease = CreateRelease(TestData.RELEASE_TAG, TestData.GITHUB_URL); @@ -212,6 +212,45 @@ public async Task SetGitHubRepo_CollapsesDifferentCandidates_WhenReleaseUrlsMatc ); } + [Fact] + public async Task SetGitHubRepo_SetsRepo_WhenRepositoryContainsDot() + { + var image = $"ghcr.io/{TestData.DOT_OWNER}/{TestData.DOT_REPO}:{TestData.VERSION}"; + var repoUrl = $"https://github.com/{TestData.DOT_OWNER}/{TestData.DOT_REPO}"; + + var stack = Helper.GetTestStack(TestData.VERSION, null, image); + var container = stack.Apps[0]; + + var response = new ContainerListResponse { Image = image }; + + var release = CreateRelease(TestData.NEW_VERSION, repoUrl); + + var versionServiceMock = new Mock(); + + versionServiceMock + .Setup(vs => + vs.GetVersions( + It.Is>(t => + t.Item1 == TestData.DOT_OWNER && t.Item2 == TestData.DOT_REPO + ) + ) + ) + .ReturnsAsync([release]); + + var logger = new Mock().Object; + + await container.SetGitHubRepo(response, versionServiceMock.Object, logger); + + Assert.Equal( + new Tuple(TestData.DOT_OWNER, TestData.DOT_REPO), + container.GitHubRepo + ); + Assert.Equal( + VersionHelper.BuildRegexFromVersion(TestData.NEW_VERSION), + container.GitHubVersionRegex + ); + } + private static Release CreateRelease(string tagName, string url) { var relType = typeof(Release); diff --git a/PatchPanda.Units/TestData.cs b/PatchPanda.Units/TestData.cs index 0a3eb0f..d1417ce 100644 --- a/PatchPanda.Units/TestData.cs +++ b/PatchPanda.Units/TestData.cs @@ -28,4 +28,7 @@ public static class TestData public const string RELEASE_TAG_A = "v1.0.0"; public const string RELEASE_TAG_B = "v2.0.0"; public const string ALPINE_IMAGE = "alpine:3.16"; + + public const string DOT_OWNER = "dgtlmoon"; + public const string DOT_REPO = "changedetection.io"; } diff --git a/PatchPanda.Web/Helpers/ParsingHelper.cs b/PatchPanda.Web/Helpers/ParsingHelper.cs index 9099d95..41a40a4 100644 --- a/PatchPanda.Web/Helpers/ParsingHelper.cs +++ b/PatchPanda.Web/Helpers/ParsingHelper.cs @@ -21,15 +21,15 @@ ILogger logger var githubMatches = Regex.Matches( fullResponse, - @"https://github.com\/([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)" + @"https://github.com\/([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+)" ); var ghcrMatches = Regex.Matches( fullResponse, - @"ghcr.io\/([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)" + @"ghcr.io\/([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+)" ); - var imageMatches = Regex.Matches(response.Image, @"([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+):"); + var imageMatches = Regex.Matches(response.Image, @"([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+):"); Dictionary, IReadOnlyList> versionCounts = [];