Skip to content

Commit 0e21635

Browse files
committed
Make resource throw if not found instead of null
1 parent 0b5db64 commit 0e21635

6 files changed

Lines changed: 19 additions & 32 deletions

File tree

src/NuGet.Core/NuGet.Protocol/Providers/OwnerDetailsUriResourceV3Provider.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ public OwnerDetailsUriResourceV3Provider()
2929
ServiceIndexResourceV3? serviceIndex = await source.GetResourceAsync<ServiceIndexResourceV3>(token);
3030
if (serviceIndex != null)
3131
{
32-
Uri uriTemplate = serviceIndex.GetServiceEntryUri(ServiceTypes.OwnerDetailsUriTemplate);
33-
resource = OwnerDetailsUriTemplateResourceV3.CreateOrNull(uriTemplate);
32+
Uri? uriTemplate = serviceIndex.GetServiceEntryUri(ServiceTypes.OwnerDetailsUriTemplate);
33+
34+
if (uriTemplate != null)
35+
{
36+
resource = OwnerDetailsUriTemplateResourceV3.CreateOrNull(uriTemplate);
37+
}
3438
}
3539

3640
return new Tuple<bool, INuGetResource?>(resource != null, resource);

src/NuGet.Core/NuGet.Protocol/PublicAPI/net472/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ NuGet.Protocol.Providers.OwnerDetailsUriResourceV3Provider.OwnerDetailsUriResour
44
NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3
55
NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.GetUri(string! owner) -> System.Uri!
66
override NuGet.Protocol.Providers.OwnerDetailsUriResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository! source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Tuple<bool, NuGet.Protocol.Core.Types.INuGetResource?>!>!
7-
static NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.CreateOrNull(System.Uri? uriTemplate) -> NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3?
7+
static NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.CreateOrNull(System.Uri! uriTemplate) -> NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3?
88
~NuGet.Protocol.Core.Types.IPackageSearchMetadata.OwnersList.get -> System.Collections.Generic.IReadOnlyList<string>
99
~NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.OwnersList.get -> System.Collections.Generic.IReadOnlyList<string>
1010
~NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.OwnersList.set -> void

src/NuGet.Core/NuGet.Protocol/PublicAPI/netcoreapp5.0/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ NuGet.Protocol.Providers.OwnerDetailsUriResourceV3Provider.OwnerDetailsUriResour
44
NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3
55
NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.GetUri(string! owner) -> System.Uri!
66
override NuGet.Protocol.Providers.OwnerDetailsUriResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository! source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Tuple<bool, NuGet.Protocol.Core.Types.INuGetResource?>!>!
7-
static NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.CreateOrNull(System.Uri? uriTemplate) -> NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3?
7+
static NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.CreateOrNull(System.Uri! uriTemplate) -> NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3?
88
~NuGet.Protocol.Core.Types.IPackageSearchMetadata.OwnersList.get -> System.Collections.Generic.IReadOnlyList<string>
99
~NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.OwnersList.get -> System.Collections.Generic.IReadOnlyList<string>
1010
~NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.OwnersList.set -> void

src/NuGet.Core/NuGet.Protocol/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ NuGet.Protocol.Providers.OwnerDetailsUriResourceV3Provider.OwnerDetailsUriResour
44
NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3
55
NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.GetUri(string! owner) -> System.Uri!
66
override NuGet.Protocol.Providers.OwnerDetailsUriResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository! source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task<System.Tuple<bool, NuGet.Protocol.Core.Types.INuGetResource?>!>!
7-
static NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.CreateOrNull(System.Uri? uriTemplate) -> NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3?
7+
static NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3.CreateOrNull(System.Uri! uriTemplate) -> NuGet.Protocol.Resources.OwnerDetailsUriTemplateResourceV3?
88
~NuGet.Protocol.Core.Types.IPackageSearchMetadata.OwnersList.get -> System.Collections.Generic.IReadOnlyList<string>
99
~NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.OwnersList.get -> System.Collections.Generic.IReadOnlyList<string>
1010
~NuGet.Protocol.Core.Types.PackageSearchMetadataBuilder.ClonedPackageSearchMetadata.OwnersList.set -> void

src/NuGet.Core/NuGet.Protocol/Resources/OwnerDetailsUriTemplateResourceV3.cs

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,21 @@ private OwnerDetailsUriTemplateResourceV3(string template)
2525
/// </summary>
2626
/// <param name="uriTemplate">The Absolute Uri template provided by the server.</param>
2727
/// <returns>A valid Owner Details Uri template, or null.</returns>
28-
public static OwnerDetailsUriTemplateResourceV3? CreateOrNull(Uri? uriTemplate)
28+
public static OwnerDetailsUriTemplateResourceV3? CreateOrNull(Uri uriTemplate)
2929
{
30-
if (uriTemplate == null || uriTemplate.OriginalString.Length == 0 || !uriTemplate.IsAbsoluteUri)
30+
if (uriTemplate is null)
3131
{
32-
return null;
32+
throw new ArgumentNullException(nameof(uriTemplate));
3333
}
3434

35-
string absoluteUri = uriTemplate.OriginalString;
36-
if (string.IsNullOrWhiteSpace(absoluteUri)
37-
|| !IsValidUriTemplate(absoluteUri))
35+
if (uriTemplate.OriginalString.Length == 0
36+
|| !uriTemplate.IsAbsoluteUri
37+
|| !uriTemplate.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase))
3838
{
3939
return null;
4040
}
4141

42-
return new OwnerDetailsUriTemplateResourceV3(absoluteUri);
43-
}
44-
45-
private static bool IsValidUriTemplate(string absoluteUri)
46-
{
47-
Uri? uri;
48-
var isValidUri = Uri.TryCreate(absoluteUri, UriKind.Absolute, out uri);
49-
50-
// Only allow HTTPS owner details URLs.
51-
if (isValidUri && uri?.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase) != true)
52-
{
53-
return false;
54-
}
55-
56-
return isValidUri;
42+
return new OwnerDetailsUriTemplateResourceV3(uriTemplate.OriginalString);
5743
}
5844

5945
/// <summary>

test/NuGet.Core.Tests/NuGet.Protocol.Tests/Resources/OwnerDetailsUriTemplateResourceV3Tests.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,13 @@ public class OwnerDetailsUriTemplateResourceV3Tests
1515
private readonly Uri _template = new Uri("https://nuget.test/profiles/{owner}?_src=template");
1616

1717
[Fact]
18-
public void CreateOrNull_WhenNullTemplate_CreatesNullResource()
18+
public void CreateOrNull_WhenNullTemplate_Throws()
1919
{
2020
// Arrange
2121
Uri? template = null;
2222

23-
// Act
24-
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(template);
25-
26-
// Assert
27-
target.Should().BeNull();
23+
// Act & Assert
24+
Assert.Throws<ArgumentNullException>(() => OwnerDetailsUriTemplateResourceV3.CreateOrNull(template!));
2825
}
2926

3027
[Fact]

0 commit comments

Comments
 (0)