using Moq; using sh.actions.package_cleanup.Models; using sh.actions.package_cleanup.Service; using Xunit; namespace sh.actions.package_cleanup.Tests.Service; public class PackageFilterTests { private readonly IPackageService _packageService; private readonly Mock _giteaPackageServiceMock = new Mock(); private readonly List _packages; public PackageFilterTests() { _packageService = new PackageService(_giteaPackageServiceMock.Object); _packages = _versions.Select(v => new GiteaPackage { Version = v, Name = $"test-{v}" }).ToList(); } [Fact] public void TestPackageNameParsing() { var inputString = "@sh-edraft.de/core, sh-edraft.core.api, sh-edraft.core.api.auth, sh-edraft.core.api.configuration, sh-edraft.core.api.db, sh-edraft.core.api.graphql, sh-edraft.core.api.service, sh-edraft.core.utils"; List expected = [ "@sh-edraft.de/core", "sh-edraft.core.api", "sh-edraft.core.api.auth", "sh-edraft.core.api.configuration", "sh-edraft.core.api.db", "sh-edraft.core.api.graphql", "sh-edraft.core.api.service", "sh-edraft.core.utils" ]; var actual = inputString .Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); Assert.Equal(expected.Count, actual.Length); Assert.Equal(expected, actual); } [Fact] public void TestFilterPackagesToDelete() { var toDelete = _packageService.FilterPackagesToDelete(_packages); var toDeleteVersions = toDelete .Select(x => x.Version) .OrderByDescending(x => x) .ToList(); var expected = _expectDeleted.OrderByDescending(x => x).ToList(); Assert.Equal(expected.Count, toDeleteVersions.Count); Assert.Equal(expected, toDeleteVersions); } private readonly List _versions = [ "0.1.0", "0.1.1", "0.1.2", "1.0", "1.1", "1.2", "2024.8.6.0", "2024.8.7.0", "2024.8.8.0", "2024.8.9.0", "2024.8.10.0", "2024.8.11.0", "latest", // dev "0-dev", "1-dev", "2-dev", "1.0-dev", "1.1-dev", "1.2-dev", "0.1.0-dev", "0.1.1-dev", "0.1.2-dev", "2024.8.6.0-dev", "2024.8.6.1-dev", "2024.8.7.0-dev", "2024.8.7.1-dev", "2024.8.8.0-dev", "2024.8.8.1-dev", "2024.8.9.0-dev", "2024.8.9.1-dev", "2024.8.10.0-dev", "2024.8.10.1-dev", "2024.8.11.0-dev", "2024.8.11.1-dev", // test "0.1.0-test", "0.1.1-test", "0.1.2-test", "2024.8.6.0-test", "2024.8.6.1-test", "2024.8.7.0-test", "2024.8.7.1-test", "2024.8.8.0-test", "2024.8.8.1-test", "2024.8.9.0-test", "2024.8.9.1-test", "2024.8.10.0-test", "2024.8.10.1-test", "2024.8.11.0-test", // exp "0.1.0-exp", "0.1.1-exp", "0.1.2-exp", "2024.8.6.0-exp", "2024.8.6.1-exp", "2024.8.7.0-exp", "2024.8.7.1-exp", "2024.8.8.0-exp", "2024.8.8.1-exp", "2024.8.9.0-exp", "2024.8.9.1-exp", "2024.8.10.0-exp", "2024.8.10.1-exp", "2024.8.11.0-exp", "2024.8.11.2-exp", "2026.2.21.27-dev", "2026.2.21.26-dev", "2026.2.21.25-dev", "2026.2.21.24-dev", "2026.2.21.23-dev", "2026.2.21.22-dev", "2026.2.21.21-dev", "2026.2.21.20-dev", "2026.2.21.19-dev", "2026.2.21.18-dev", "2026.2.21.17-dev", "2026.2.21.15-dev", "2026.2.21.14-dev", "2026.2.21.13-dev", "2026.2.21.12-dev", "2026.2.21.11-dev", "2026.2.21.10-dev", "2026.2.21.9-dev", "2026.2.21.8-dev", ]; private readonly List _versionsToHold = [ // prod (no suffix) "0.1.0", "0.1.1", "0.1.2", "1.0", "1.1", "1.2", "2024.8.6.0", "2024.8.7.0", "2024.8.8.0", "2024.8.9.0", "2024.8.10.0", "2024.8.11.0", "latest", // dev "1-dev", "2-dev", "1.1-dev", "1.2-dev", "0.1.1-dev", "0.1.2-dev", "2024.8.11.0-dev", "2024.8.11.1-dev", // test "0.1.1-test", "0.1.2-test", "2024.8.10.1-test", "2024.8.11.0-test", // exp "0.1.1-exp", "0.1.2-exp", "2024.8.11.0-exp", "2024.8.11.2-exp", "2026.2.21.27-dev", "2026.2.21.26-dev", ]; private List _expectDeleted => _versions.Except(_versionsToHold).ToList(); }