public async ValueTask <PackageDeprecationMetadataContextInfo?> GetDeprecationMetadataAsync( PackageIdentity identity, IReadOnlyCollection <PackageSourceContextInfo> packageSources, bool includePrerelease, CancellationToken cancellationToken) { Assumes.NotNull(identity); Assumes.NotNullOrEmpty(packageSources); string cacheId = PackageSearchMetadataCacheItem.GetCacheId(identity.Id, includePrerelease, packageSources); PackageSearchMetadataCacheItem?backgroundDataCache = PackageSearchMetadataMemoryCache.Get(cacheId) as PackageSearchMetadataCacheItem; if (backgroundDataCache != null) { PackageSearchMetadataCacheItemEntry cacheItem = await backgroundDataCache.GetPackageSearchMetadataCacheVersionedItemAsync(identity, cancellationToken); return(await cacheItem.PackageDeprecationMetadataContextInfo); } IPackageMetadataProvider packageMetadataProvider = await GetPackageMetadataProviderAsync(packageSources, cancellationToken); IPackageSearchMetadata packageMetadata = await packageMetadataProvider.GetPackageMetadataAsync(identity, includePrerelease, cancellationToken); PackageDeprecationMetadata deprecationMetadata = await packageMetadata.GetDeprecationMetadataAsync(); if (deprecationMetadata == null) { return(null); } return(PackageDeprecationMetadataContextInfo.Create(deprecationMetadata)); }
public void SerializeThenDeserialize_WithValidArguments_RoundTrips(PackageDeprecationMetadataContextInfo expectedResult) { PackageDeprecationMetadataContextInfo actualResult = SerializeThenDeserialize(PackageDeprecationMetadataContextInfoFormatter.Instance, expectedResult); Assert.Equal(expectedResult.Message, actualResult.Message); Assert.Equal(expectedResult.AlternatePackage.PackageId, actualResult.AlternatePackage.PackageId); Assert.Equal(expectedResult.AlternatePackage.VersionRange, actualResult.AlternatePackage.VersionRange); Assert.Equal(expectedResult.Reasons, actualResult.Reasons); }
public DetailedPackageMetadata(PackageSearchMetadataContextInfo serverData, PackageDeprecationMetadataContextInfo deprecationMetadata, long?downloadCount) { Id = serverData.Identity.Id; Version = serverData.Identity.Version; Summary = serverData.Summary; Description = serverData.Description; Authors = serverData.Authors; Owners = serverData.Owners; IconUrl = serverData.IconUrl; LicenseUrl = serverData.LicenseUrl; ProjectUrl = serverData.ProjectUrl; ReadmeUrl = serverData.ReadmeUrl; ReportAbuseUrl = serverData.ReportAbuseUrl; // Some server implementations send down an array with an empty string, which ends up as an empty string. // In PM UI, we want Tags to work like most other properties from the server (Authors/Owners), and be null, if there is no value. Tags = string.IsNullOrEmpty(serverData.Tags) ? null : serverData.Tags; DownloadCount = downloadCount; Published = serverData.Published; IEnumerable <PackageDependencyGroup> dependencySets = serverData.DependencySets; if (dependencySets != null && dependencySets.Any()) { DependencySets = dependencySets.Select(e => new PackageDependencySetMetadata(e)).ToArray(); } else { DependencySets = NoDependenciesPlaceholder; } PrefixReserved = serverData.PrefixReserved; LicenseMetadata = serverData.LicenseMetadata; DeprecationMetadata = deprecationMetadata; Vulnerabilities = serverData.Vulnerabilities; PackagePath = serverData.PackagePath; // Determine the package details URL and text. PackageDetailsUrl = null; PackageDetailsText = null; if (serverData.PackageDetailsUrl != null && serverData.PackageDetailsUrl.IsAbsoluteUri && serverData.PackageDetailsUrl.Host != null) { PackageDetailsUrl = serverData.PackageDetailsUrl; PackageDetailsText = serverData.PackageDetailsUrl.Host; // Special case the subdomain "www." - we hide it. Other subdomains are not hidden. const string wwwDot = "www."; if (PackageDetailsText.StartsWith(wwwDot, StringComparison.OrdinalIgnoreCase) && PackageDetailsText.Length > wwwDot.Length) { PackageDetailsText = PackageDetailsText.Substring(wwwDot.Length); } } }
public void SerializeThenDeserialize_WithValidArguments_RoundTrips(PackageDeprecationMetadataContextInfo expectedResult) { var formatters = new IMessagePackFormatter[] { AlternatePackageMetadataContextInfoFormatter.Instance, }; var resolvers = new IFormatterResolver[] { MessagePackSerializerOptions.Standard.Resolver }; var options = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData).WithResolver(CompositeResolver.Create(formatters, resolvers)); PackageDeprecationMetadataContextInfo actualResult = SerializeThenDeserialize(PackageDeprecationMetadataContextInfoFormatter.Instance, expectedResult, options); Assert.Equal(expectedResult.Message, actualResult.Message); Assert.Equal(expectedResult.Reasons.First(), actualResult.Reasons.First()); Assert.Equal(expectedResult.AlternatePackage.PackageId, actualResult.AlternatePackage.PackageId); Assert.Equal(expectedResult.AlternatePackage.VersionRange, actualResult.AlternatePackage.VersionRange); }
public static IEnumerable <object[]> GetData() { yield return(new object[] { null, PackageItemDeprecationLabelState.Invisible }); var deprecation = new PackageDeprecationMetadataContextInfo("deprecated", new List <string> { "old APIs" }, alternatePackageContextInfo: null); yield return(new object[] { deprecation, PackageItemDeprecationLabelState.Deprecation }); var alternative = new PackageDeprecationMetadataContextInfo("deprecated", new List <string> { "old APIs" }, alternatePackageContextInfo: new AlternatePackageMetadataContextInfo("alternatePackage", VersionRange.Parse("[1.0, 2.0)"))); yield return(new object[] { alternative, PackageItemDeprecationLabelState.AlternativeAvailable }); }
public async Task GetDeprecationMetadataAsync_WhenDeprecationMetadataExists_ReturnsDeprecationMetadata() { using (NuGetPackageSearchService searchService = SetupSearchService()) { PackageDeprecationMetadataContextInfo deprecationMetadata = await searchService.GetDeprecationMetadataAsync( new PackageIdentity("microsoft.extensions.logging.abstractions", new Versioning.NuGetVersion("5.0.0-rc.2.20475.5")), new List <PackageSourceContextInfo> { PackageSourceContextInfo.Create(_sourceRepository.PackageSource) }, includePrerelease : true, CancellationToken.None); Assert.NotNull(deprecationMetadata); Assert.Equal("This is deprecated.", deprecationMetadata.Message); Assert.Equal("Legacy", deprecationMetadata.Reasons.First()); } }
public void DeprecationToDeprecationLabelStateConverter_MultipleCases_Succeeds(PackageDeprecationMetadataContextInfo input, PackageItemDeprecationLabelState expected) { var converter = new DeprecationToDeprecationLabelStateConverter(); object value = converter.Convert(input, targetType: null, parameter: null, culture: null); Assert.IsType(typeof(PackageItemDeprecationLabelState), value); Assert.Equal(expected, value); }