Skip to content

Commit efce758

Browse files
authored
IconUrl deprecation message. (#7556)
* IconUrl deprecation message. Tests.
1 parent 90eb2bb commit efce758

File tree

6 files changed

+90
-7
lines changed

6 files changed

+90
-7
lines changed

src/NuGetGallery/NuGetGallery.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@
261261
<DependentUpon>201906262145129_EmbeddedIconFlag.cs</DependentUpon>
262262
</Compile>
263263
<Compile Include="Services\ConfigurationIconFileProvider.cs" />
264+
<Compile Include="Services\IconUrlDeprecationValidationMessage.cs" />
264265
<Compile Include="Services\IconUrlTemplateProcessor.cs" />
265266
<Compile Include="Services\IIconUrlTemplateProcessor.cs" />
266267
<Compile Include="Services\IIconUrlProvider.cs" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
namespace NuGetGallery
5+
{
6+
public class IconUrlDeprecationValidationMessage : IValidationMessage
7+
{
8+
public string PlainTextMessage => $"{Strings.UploadPackage_IconUrlDeprecated} https://aka.ms/deprecateIconUrl";
9+
10+
public bool HasRawHtmlRepresentation => true;
11+
12+
public string RawHtmlMessage => $"{Strings.UploadPackage_IconUrlDeprecated.Replace("<", "&lt;").Replace(">", "&gt;")} <a href=\"https://aka.ms/deprecateIconUrl\">{Strings.UploadPackage_LearnMore}</a>.";
13+
}
14+
}

src/NuGetGallery/Services/PackageUploadService.cs

+9-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using NuGetGallery.Diagnostics;
2020
using NuGetGallery.Helpers;
2121
using NuGetGallery.Packaging;
22+
using NuGetGallery.Services;
2223

2324
namespace NuGetGallery
2425
{
@@ -148,7 +149,7 @@ public async Task<PackageValidationResult> ValidateBeforeGeneratePackageAsync(
148149
return result;
149150
}
150151

151-
result = await CheckIconMetadataAsync(nuGetPackage, currentUser);
152+
result = await CheckIconMetadataAsync(nuGetPackage, warnings, currentUser);
152153
if (result != null)
153154
{
154155
//_telemetryService.TrackIconValidationFailure();
@@ -341,18 +342,22 @@ private async Task<PackageValidationResult> CheckLicenseMetadataAsync(PackageArc
341342
return null;
342343
}
343344

344-
private async Task<PackageValidationResult> CheckIconMetadataAsync(PackageArchiveReader nuGetPackage, User user)
345+
private async Task<PackageValidationResult> CheckIconMetadataAsync(PackageArchiveReader nuGetPackage, List<IValidationMessage> warnings, User user)
345346
{
346347
var nuspecReader = GetNuspecReader(nuGetPackage);
347-
348348
var iconElement = nuspecReader.IconElement;
349+
var embeddedIconsEnabled = _featureFlagService.AreEmbeddedIconsEnabled(user);
349350

350351
if (iconElement == null)
351352
{
353+
if (embeddedIconsEnabled && nuspecReader.GetIconUrl() != null)
354+
{
355+
warnings.Add(new IconUrlDeprecationValidationMessage());
356+
}
352357
return null;
353358
}
354359

355-
if (!_featureFlagService.AreEmbeddedIconsEnabled(user))
360+
if (!embeddedIconsEnabled)
356361
{
357362
return PackageValidationResult.Invalid(Strings.UploadPackage_EmbeddedIconNotAccepted);
358363
}

src/NuGetGallery/Strings.Designer.cs

+10-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/NuGetGallery/Strings.resx

+4-1
Original file line numberDiff line numberDiff line change
@@ -1006,7 +1006,7 @@ The {1} Team</value>
10061006
<value>Unknown error!</value>
10071007
</data>
10081008
<data name="UploadPackage_DeprecatingLicenseUrl" xml:space="preserve">
1009-
<value>&lt;licenseUrl&gt; element will be deprecated, please consider switching to specifying the license in the package.</value>
1009+
<value>The &lt;licenseUrl&gt; element is deprecated. Consider using the &lt;license&gt; element instead.</value>
10101010
</data>
10111011
<data name="UploadPackage_DeprecationUrlUsage" xml:space="preserve">
10121012
<value>The license deprecation URL must be used in conjunction with specifying the license in the package.</value>
@@ -1150,4 +1150,7 @@ The {1} Team</value>
11501150
<data name="SiteAdminNotLoggedInWithRequiredTenant" xml:space="preserve">
11511151
<value>The site admins are required to sign in with the '{0}' tenant only.</value>
11521152
</data>
1153+
<data name="UploadPackage_IconUrlDeprecated" xml:space="preserve">
1154+
<value>The &lt;iconUrl&gt; element is deprecated. Consider using the &lt;icon&gt; element instead.</value>
1155+
</data>
11531156
</root>

tests/NuGetGallery.Facts/Services/PackageUploadServiceFacts.cs

+52-1
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ public async Task HandlesLegacyLicenseUrlPackageAccordingToSettings(bool blockLe
554554
Assert.Equal(PackageValidationResultType.Accepted, result.Type);
555555
Assert.Null(result.Message);
556556
Assert.Single(result.Warnings);
557-
Assert.StartsWith("<licenseUrl> element will be deprecated, please consider switching to specifying the license in the package.", result.Warnings[0].PlainTextMessage);
557+
Assert.StartsWith("The <licenseUrl> element is deprecated. Consider using the <license> element instead.", result.Warnings[0].PlainTextMessage);
558558
Assert.IsType<LicenseUrlDeprecationValidationMessage>(result.Warnings[0]);
559559
}
560560
}
@@ -1141,6 +1141,53 @@ public async Task AcceptsPackagesWithEmbeddedIconForFlightedUsers()
11411141
Assert.Empty(result.Warnings);
11421142
}
11431143

1144+
[Fact]
1145+
public async Task WarnsAboutPackagesWithIconUrlForFlightedUsers()
1146+
{
1147+
_nuGetPackage = GeneratePackageWithUserContent(
1148+
iconUrl: new Uri("https://nuget.test/icon"),
1149+
iconFilename: null,
1150+
licenseExpression: "MIT",
1151+
licenseUrl: new Uri("https://licenses.nuget.org/MIT"));
1152+
_featureFlagService
1153+
.Setup(ffs => ffs.AreEmbeddedIconsEnabled(_currentUser))
1154+
.Returns(true);
1155+
1156+
var result = await _target.ValidateBeforeGeneratePackageAsync(
1157+
_nuGetPackage.Object,
1158+
GetPackageMetadata(_nuGetPackage),
1159+
_currentUser);
1160+
1161+
Assert.Equal(PackageValidationResultType.Accepted, result.Type);
1162+
Assert.Null(result.Message);
1163+
var warning = Assert.Single(result.Warnings);
1164+
Assert.IsType<IconUrlDeprecationValidationMessage>(warning);
1165+
Assert.StartsWith("The <iconUrl> element is deprecated. Consider using the <icon> element instead.", warning.PlainTextMessage);
1166+
Assert.StartsWith("The &lt;iconUrl&gt; element is deprecated. Consider using the &lt;icon&gt; element instead.", warning.RawHtmlMessage);
1167+
}
1168+
1169+
[Fact]
1170+
public async Task DoesntWarnAboutPackagesWithIconUrl()
1171+
{
1172+
_nuGetPackage = GeneratePackageWithUserContent(
1173+
iconUrl: new Uri("https://nuget.test/icon"),
1174+
iconFilename: null,
1175+
licenseExpression: "MIT",
1176+
licenseUrl: new Uri("https://licenses.nuget.org/MIT"));
1177+
_featureFlagService
1178+
.Setup(ffs => ffs.AreEmbeddedIconsEnabled(_currentUser))
1179+
.Returns(false);
1180+
1181+
var result = await _target.ValidateBeforeGeneratePackageAsync(
1182+
_nuGetPackage.Object,
1183+
GetPackageMetadata(_nuGetPackage),
1184+
_currentUser);
1185+
1186+
Assert.Equal(PackageValidationResultType.Accepted, result.Type);
1187+
Assert.Null(result.Message);
1188+
Assert.Empty(result.Warnings);
1189+
}
1190+
11441191
[Theory]
11451192
[InlineData("<icon><something/></icon>")]
11461193
[InlineData("<icon><something>icon.png</something></icon>")]
@@ -2218,6 +2265,7 @@ protected static Mock<TestPackageReader> GeneratePackageWithUserContent(
22182265
bool isSigned = true,
22192266
int? desiredTotalEntryCount = null,
22202267
Func<string> getCustomNuspecNodes = null,
2268+
Uri iconUrl = null,
22212269
Uri licenseUrl = null,
22222270
string licenseExpression = null,
22232271
string licenseFilename = null,
@@ -2232,6 +2280,7 @@ protected static Mock<TestPackageReader> GeneratePackageWithUserContent(
22322280
isSigned: isSigned,
22332281
desiredTotalEntryCount: desiredTotalEntryCount,
22342282
getCustomNuspecNodes: getCustomNuspecNodes,
2283+
iconUrl: iconUrl,
22352284
licenseUrl: licenseUrl,
22362285
licenseExpression: licenseExpression,
22372286
licenseFilename: licenseFilename,
@@ -2249,6 +2298,7 @@ protected static MemoryStream GeneratePackageStream(
22492298
bool isSigned = true,
22502299
int? desiredTotalEntryCount = null,
22512300
Func<string> getCustomNuspecNodes = null,
2301+
Uri iconUrl = null,
22522302
Uri licenseUrl = null,
22532303
string licenseExpression = null,
22542304
string licenseFilename = null,
@@ -2265,6 +2315,7 @@ protected static MemoryStream GeneratePackageStream(
22652315
desiredTotalEntryCount: desiredTotalEntryCount,
22662316
getCustomNuspecNodes: getCustomNuspecNodes,
22672317
licenseUrl: licenseUrl,
2318+
iconUrl: iconUrl,
22682319
licenseExpression: licenseExpression,
22692320
licenseFilename: licenseFilename,
22702321
licenseFileContents: GetBinaryLicenseFileContents(licenseFileBinaryContents, licenseFileContents),

0 commit comments

Comments
 (0)