Skip to content

Commit ab7626e

Browse files
committed
Add tests for OwnerDetailsUriResourceV3 and Provider
1 parent 7469b33 commit ab7626e

2 files changed

Lines changed: 200 additions & 0 deletions

File tree

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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+
#nullable enable
5+
6+
using System;
7+
using System.Threading;
8+
using System.Threading.Tasks;
9+
using FluentAssertions;
10+
using NuGet.Configuration;
11+
using NuGet.Packaging;
12+
using NuGet.Protocol.Core.Types;
13+
using NuGet.Protocol.Providers;
14+
using Xunit;
15+
16+
namespace NuGet.Protocol.Tests.Providers
17+
{
18+
public class OwnerDetailsUriResourceV3ProviderTests
19+
{
20+
[Fact]
21+
public async Task TryCreate_NoResourceInServiceIndex_ReturnsFalseAsync()
22+
{
23+
// Arrange
24+
var serviceIndexProvider = MockServiceIndexResourceV3Provider.Create();
25+
var target = new OwnerDetailsUriResourceV3Provider();
26+
var providers = new INuGetResourceProvider[] { serviceIndexProvider, target };
27+
28+
PackageSource packageSource = new PackageSource("https://nuget.test/v3/index.json");
29+
SourceRepository sourceRepository = new SourceRepository(packageSource, providers);
30+
31+
// Act
32+
Tuple<bool, INuGetResource?> result = await target.TryCreate(sourceRepository, CancellationToken.None);
33+
34+
// Assert
35+
bool providerHandlesInputSource = result.Item1;
36+
INuGetResource? resource = result.Item2;
37+
38+
providerHandlesInputSource.Should().BeFalse();
39+
resource.Should().BeNull();
40+
}
41+
42+
[Fact]
43+
public async Task TryCreate_ResourceInServiceIndex_ReturnsTrueAsync()
44+
{
45+
// Arrange
46+
var ownerDetailsResourceEntry = new ServiceIndexEntry(new Uri("https://nuget.test/profiles/{owner}?_src=template"), ServiceTypes.OwnerDetailsUriTemplate[0], MinClientVersionUtility.GetNuGetClientVersion());
47+
var serviceIndexProvider = MockServiceIndexResourceV3Provider.Create();
48+
var target = new OwnerDetailsUriResourceV3Provider();
49+
var providers = new INuGetResourceProvider[] { serviceIndexProvider, target };
50+
51+
PackageSource packageSource = new PackageSource("https://nuget.test/v3/index.json");
52+
SourceRepository sourceRepository = new SourceRepository(packageSource, providers);
53+
54+
// Act
55+
Tuple<bool, INuGetResource?> result = await target.TryCreate(sourceRepository, CancellationToken.None);
56+
57+
// Assert
58+
bool providerHandlesInputSource = result.Item1;
59+
INuGetResource? resource = result.Item2;
60+
61+
providerHandlesInputSource.Should().BeFalse();
62+
resource.Should().BeNull();
63+
}
64+
}
65+
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
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+
#nullable enable
5+
6+
using System;
7+
using FluentAssertions;
8+
using NuGet.Protocol.Resources;
9+
using Xunit;
10+
11+
namespace NuGet.Protocol.Tests.Resources
12+
{
13+
public class OwnerDetailsUriTemplateResourceV3Tests
14+
{
15+
private readonly Uri _template = new Uri("https://nuget.test/profiles/{owner}?_src=template");
16+
17+
[Fact]
18+
public void CreateOrNull_WhenNullTemplate_CreatesNullResource()
19+
{
20+
// Arrange
21+
Uri? template = null;
22+
23+
// Act
24+
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(template);
25+
26+
// Assert
27+
target.Should().BeNull();
28+
}
29+
30+
[Fact]
31+
public void CreateOrNull_WhenEmptyTemplate_CreatesNullResource()
32+
{
33+
// Arrange
34+
var template = new Uri(string.Empty);
35+
36+
// Act
37+
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(template);
38+
39+
// Assert
40+
target.Should().BeNull();
41+
}
42+
43+
[Fact]
44+
public void CreateOrNull_WhenTemplateNotAbsoluteUri_CreatesNullResource()
45+
{
46+
// Arrange
47+
var template = new Uri("/owner/profile");
48+
49+
// Act
50+
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(template);
51+
52+
// Assert
53+
target.Should().BeNull();
54+
}
55+
56+
[Fact]
57+
public void CreateOrNull_WhenTemplateNotHttps_CreatesNullResource()
58+
{
59+
// Arrange
60+
var template = new Uri("http://nuget.test/profiles/{owner}?_src=template");
61+
62+
// Act
63+
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(template);
64+
65+
// Assert
66+
target.Should().BeNull();
67+
}
68+
69+
[Fact]
70+
public void CreateOrNull_WhenValidTemplateHttps_CreatesResource()
71+
{
72+
// Arrange
73+
var template = new Uri("https://nuget.test/profiles/{owner}?_src=template");
74+
75+
// Act
76+
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(template);
77+
78+
// Assert
79+
target.Should().NotBeNull();
80+
}
81+
82+
[Fact]
83+
public void GetUri_WithSpacesInOwnerParameter_CreatesValidOwnerUriWithEncoding()
84+
{
85+
// Arrange
86+
string owner = "Microsoft Microsoft Microsoft";
87+
string formattedOwner = "Microsoft%20Microsoft%20Microsoft";
88+
89+
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(_template);
90+
91+
// Act
92+
Uri ownerUri = target!.GetUri(owner);
93+
94+
// Assert
95+
ownerUri.Should().NotBeNull();
96+
ownerUri.IsAbsoluteUri.Should().BeTrue();
97+
ownerUri.AbsoluteUri.Should().Be($"https://nuget.test/profiles/{formattedOwner}?_src=template");
98+
}
99+
100+
[Theory]
101+
[InlineData("microsoft")]
102+
[InlineData("MiCroSoFT")]
103+
public void GetUri_WithValidOwnerParameter_CreatesValidOwnerUriWithSameCasing(string owner)
104+
{
105+
// Arrange
106+
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(_template);
107+
108+
// Act
109+
Uri ownerUri = target!.GetUri(owner);
110+
111+
// Assert
112+
ownerUri.Should().NotBeNull();
113+
ownerUri.IsAbsoluteUri.Should().BeTrue();
114+
ownerUri.AbsoluteUri.Should().Be($"https://nuget.test/profiles/{owner}?_src=template");
115+
}
116+
117+
[Theory]
118+
[InlineData(null)]
119+
[InlineData("")]
120+
public void GetUri_WithInvalidOwnerParameter_ReturnsOriginalTemplate(string owner)
121+
{
122+
// Arrange
123+
var target = OwnerDetailsUriTemplateResourceV3.CreateOrNull(_template);
124+
string templateWithoutOwner = "https://nuget.test/profiles/?_src=template";
125+
126+
// Act
127+
Uri ownerUri = target!.GetUri(owner);
128+
129+
// Assert
130+
ownerUri.Should().NotBeNull();
131+
ownerUri.IsAbsoluteUri.Should().BeTrue();
132+
ownerUri.AbsoluteUri.Should().Be(templateWithoutOwner);
133+
}
134+
}
135+
}

0 commit comments

Comments
 (0)