public async Task ReturnsNothingWhenThePackageTypeDoesNotExist()
        {
            var searchBuilder = new V3SearchBuilder
            {
                PackageType = Guid.NewGuid().ToString(),
            };

            var results = await V3SearchAsync(searchBuilder);

            Assert.Empty(results.Data);
        }
        public async Task ReturnsNothingWhenThePackageTypeIsInvalid()
        {
            var searchBuilder = new V3SearchBuilder
            {
                PackageType = "cannot$be:a;package|type",
            };

            var results = await V3SearchAsync(searchBuilder);

            Assert.Empty(results.Data);
        }
        public async Task HidesUnlistedPackagesByDefault(string query)
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query = query,
            };

            var results = await V3SearchAsync(searchBuilder);

            Assert.Empty(results.Data);
        }
        public async Task ExcludesPackagesWithMismatchingPackageType()
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query       = $"packageid:{Constants.TestPackageId_PackageType}",
                PackageType = "Dependency",
            };

            var results = await V3SearchAsync(searchBuilder);

            Assert.Empty(results.Data);
        }
        public async Task TreatsPackageTypeAsCaseInsensitive(string packageTypeQuery, string expected, string id)
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query       = $"packageid:{id}",
                PackageType = packageTypeQuery,
            };

            var results = await V3SearchAsync(searchBuilder);

            var package = Assert.Single(results.Data);

            Assert.Equal(id, package.Id);
            Assert.Equal(expected, Assert.Single(package.PackageTypes).Name);
        }
        public async Task ByDefaultReturnsAnyPackageType()
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query = $"packageid:{Constants.TestPackageId_PackageType}",
            };

            var results = await V3SearchAsync(searchBuilder);

            var package = Assert.Single(results.Data);

            Assert.Equal(Constants.TestPackageId_PackageType, package.Id);
            Assert.Equal(Constants.TestPackageVersion_PackageType, package.Version);
            Assert.Equal("DotnetTool", Assert.Single(package.PackageTypes).Name);
        }
        public async Task LatestVersionChangesWithRespectToSearchFilters(bool prerelease, bool includeSemVer2, string version)
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query          = $"packageid:{Constants.TestPackageId_SearchFilters}",
                Prerelease     = prerelease,
                IncludeSemVer2 = includeSemVer2,
            };

            var results = await V3SearchAsync(searchBuilder);

            var package = Assert.Single(results.Data);

            Assert.Equal(Constants.TestPackageId_SearchFilters, package.Id);
            Assert.Equal(version, package.Version);
        }
        public async Task PackagesWithoutPackageTypesAreAssumedToBeDependency()
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query       = $"packageid:{Constants.TestPackageId}",
                PackageType = "Dependency",
            };

            var results = await V3SearchAsync(searchBuilder);

            var package = Assert.Single(results.Data);

            Assert.Equal(Constants.TestPackageId, package.Id);
            Assert.Equal(Constants.TestPackageVersion, package.Version);
            Assert.Equal("Dependency", Assert.Single(package.PackageTypes).Name);
        }
        public async Task IncludesPackagesWithMatchingPackageType()
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query       = $"packageid:{Constants.TestPackageId_PackageType}",
                PackageType = "DotNetTool",
            };

            var results = await V3SearchAsync(searchBuilder);

            var package = Assert.Single(results.Data);

            Assert.Equal(Constants.TestPackageId_PackageType, package.Id);
            Assert.Equal(Constants.TestPackageVersion_PackageType, package.Version);
            Assert.Equal("DotnetTool", Assert.Single(package.PackageTypes).Name);
        }
        public async Task NormalizesVersion()
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query          = $"packageid:{Constants.TestPackageId_SearchFilters} version:1.04.0.0-delta.4+git",
                Prerelease     = true,
                IncludeSemVer2 = true
            };

            var results = await V3SearchAsync(searchBuilder);

            var package = Assert.Single(results.Data);

            Assert.Equal(Constants.TestPackageId_SearchFilters, package.Id);
            Assert.Equal(Constants.TestPackageVersion_SearchFilters_PrerelSemVer2, package.Version);
        }
        public async Task ComparesVersionAsCaseInsensitive()
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query          = $"packageid:{Constants.TestPackageId_SearchFilters} version:{Constants.TestPackageVersion_SearchFilters_PrerelSemVer2.ToUpperInvariant()}",
                Prerelease     = true,
                IncludeSemVer2 = true
            };

            var results = await V3SearchAsync(searchBuilder);

            var package = Assert.Single(results.Data);

            Assert.Equal(Constants.TestPackageId_SearchFilters, package.Id);
            Assert.Equal(Constants.TestPackageVersion_SearchFilters_PrerelSemVer2, package.Version);
        }
        public async Task ComparesIdAsCaseInsensitive()
        {
            var searchBuilder = new V3SearchBuilder
            {
                Query          = $"packageid:{Constants.TestPackageId_SearchFilters.ToUpperInvariant()}",
                Prerelease     = false,
                IncludeSemVer2 = false,
            };

            var results = await V3SearchAsync(searchBuilder);

            var package = results.Data.OrderBy(x => x.Version).FirstOrDefault();

            Assert.NotNull(package);
            Assert.Equal(Constants.TestPackageId_SearchFilters, package.Id);
            Assert.Equal(Constants.TestPackageVersion_SearchFilters_Default, package.Version);
        }
 protected async Task <V3SearchResult> V3SearchAsync(V3SearchBuilder searchBuilder)
 {
     return(await SearchAsync <V3SearchResult>(searchBuilder));
 }