|
8 | 8 | using System.Threading.Tasks; |
9 | 9 | using System.Xml.Linq; |
10 | 10 | using NuGet.Common; |
| 11 | +using NuGet.Packaging.Core; |
11 | 12 | using NuGet.Protocol.Core.Types; |
12 | 13 | using NuGet.Protocol.Tests.Plugins.Helpers; |
13 | 14 | using NuGet.Test.Utility; |
@@ -732,5 +733,77 @@ public async Task LocalPackageSearchResource_SearchNoFilter_AllversionsMatch(boo |
732 | 733 | Assert.Equal(0, testLogger.Errors); |
733 | 734 | } |
734 | 735 | } |
| 736 | + |
| 737 | + [Fact] |
| 738 | + public void LocalPackageSearchResource_SupportsPackageTypeFiltering() |
| 739 | + { |
| 740 | + // Arrange |
| 741 | + var localResource = new FindLocalPackagesResourceV2(root: "."); |
| 742 | + var resource = new LocalPackageSearchResource(localResource); |
| 743 | + |
| 744 | + // Act & Assert |
| 745 | + Assert.True(resource.SupportsPackageTypeFiltering); |
| 746 | + } |
| 747 | + |
| 748 | + [Theory] |
| 749 | + [InlineData("Dependency")] |
| 750 | + [InlineData("dependency")] |
| 751 | + public async Task LocalPackageSearchResource_FilterOnPackageType_MatchesExplicitTypeAndImplicitDependencyAsync(string packageTypeFilter) |
| 752 | + { |
| 753 | + using (var root = TestDirectory.Create()) |
| 754 | + { |
| 755 | + // Arrange |
| 756 | + var testLogger = new TestLogger(); |
| 757 | + |
| 758 | + // Package that explicitly declares the Dependency package type. |
| 759 | + var dependencyPackage = new SimpleTestPackageContext() |
| 760 | + { |
| 761 | + Id = "dependencyPackage", |
| 762 | + Version = "1.0.0", |
| 763 | + PackageTypes = { PackageType.Dependency } |
| 764 | + }; |
| 765 | + |
| 766 | + // Package that does not declare any package type (implicitly Dependency). |
| 767 | + var implicitPackage = new SimpleTestPackageContext() |
| 768 | + { |
| 769 | + Id = "implicitPackage", |
| 770 | + Version = "1.0.0" |
| 771 | + }; |
| 772 | + |
| 773 | + // Package with a different package type that should be filtered out. |
| 774 | + var toolPackage = new SimpleTestPackageContext() |
| 775 | + { |
| 776 | + Id = "toolPackage", |
| 777 | + Version = "1.0.0", |
| 778 | + PackageTypes = { PackageType.DotnetTool } |
| 779 | + }; |
| 780 | + |
| 781 | + await SimpleTestPackageUtility.CreatePackagesAsync(root, dependencyPackage, implicitPackage, toolPackage); |
| 782 | + |
| 783 | + var localResource = new FindLocalPackagesResourceV2(root); |
| 784 | + var resource = new LocalPackageSearchResource(localResource); |
| 785 | + |
| 786 | + var filter = new SearchFilter(includePrerelease: true) |
| 787 | + { |
| 788 | + PackageType = packageTypeFilter |
| 789 | + }; |
| 790 | + |
| 791 | + // Act |
| 792 | + var packages = (await resource.SearchAsync( |
| 793 | + searchTerm: "", |
| 794 | + filter, |
| 795 | + skip: 0, |
| 796 | + take: 30, |
| 797 | + log: testLogger, |
| 798 | + token: CancellationToken.None)) |
| 799 | + .OrderBy(p => p.Identity.Id) |
| 800 | + .ToList(); |
| 801 | + |
| 802 | + // Assert |
| 803 | + Assert.Equal(2, packages.Count); |
| 804 | + Assert.Equal("dependencyPackage", packages[0].Identity.Id); |
| 805 | + Assert.Equal("implicitPackage", packages[1].Identity.Id); |
| 806 | + } |
| 807 | + } |
735 | 808 | } |
736 | 809 | } |
0 commit comments