Skip to content

Commit bb9ed67

Browse files
zingz0rzingz0r
andauthored
add more testsadd tests (#128)
Co-authored-by: zingz0r <zingz0r@tothnet.hu>
1 parent 84af91a commit bb9ed67

File tree

8 files changed

+107
-9
lines changed

8 files changed

+107
-9
lines changed

src/CloudFlare.Client.Test/CloudFlare.Client.Test.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<PackageReference Include="DeepCloner" />
1616
<PackageReference Include="FluentAssertions" />
1717
<PackageReference Include="Microsoft.NET.Test.Sdk" />
18+
<PackageReference Include="Moq" />
1819
<PackageReference Include="WireMock.Net" />
1920
<PackageReference Include="xunit" />
2021
<PackageReference Include="xunit.runner.visualstudio">

src/CloudFlare.Client.Test/ParameterBuilderHelperTests.cs renamed to src/CloudFlare.Client.Test/Models/ParameterBuilderTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using Newtonsoft.Json;
66
using Xunit;
77

8-
namespace CloudFlare.Client.Test;
8+
namespace CloudFlare.Client.Test.Models;
99

1010
public class ParameterBuilderTests
1111
{
@@ -38,4 +38,17 @@ public void TestParameterBuilderWithDefaults(string key, object value)
3838

3939
parameters.ToString().Should().Be(string.Empty);
4040
}
41+
42+
[Fact]
43+
public void TestParameterBuilderWithMultipleParameters()
44+
{
45+
var parameters = new ParameterBuilder()
46+
.InsertValue("number", 1)
47+
.InsertValue("string", "hello")
48+
.InsertValue("enum", ZoneStatus.Pending)
49+
.InsertValue("bool", true)
50+
.InsertValue("double", 1.0);
51+
52+
parameters.ToString().Should().Be("number=1&string=hello&enum=pending&bool=true&double=1.0");
53+
}
4154
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System;
2+
using CloudFlare.Client.Models;
3+
using Moq;
4+
using Xunit;
5+
6+
namespace CloudFlare.Client.Test.Models
7+
{
8+
public class RelativeUriTests
9+
{
10+
[Fact]
11+
public void TestRelativeUriTCreate()
12+
{
13+
// Arrange
14+
const string uriString = "test/path";
15+
16+
// Act
17+
var relativeUri = new RelativeUri(uriString);
18+
19+
// Assert
20+
Assert.Equal(uriString, relativeUri.OriginalString);
21+
Assert.Equal(UriKind.Relative, relativeUri.IsAbsoluteUri ? UriKind.Absolute : UriKind.Relative);
22+
}
23+
24+
[Fact]
25+
public void TestRelativeUriTAddParametersReturnSameUriWhenNoParametersProvided()
26+
{
27+
// Arrange
28+
const string uriString = "test/path";
29+
var relativeUri = new RelativeUri(uriString);
30+
var mockParameterBuilder = new Mock<IParameterBuilder>();
31+
mockParameterBuilder.Setup(pb => pb.Any()).Returns(false);
32+
33+
// Act
34+
var resultUri = relativeUri.AddParameters(mockParameterBuilder.Object);
35+
36+
// Assert
37+
Assert.Equal(relativeUri, resultUri);
38+
}
39+
40+
[Fact]
41+
public void TestRelativeUriAddParametersReturnNewUriWithQueryStringWhenParametersProvided()
42+
{
43+
// Arrange
44+
const string uriString = "test/path";
45+
var relativeUri = new RelativeUri(uriString);
46+
var mockParameterBuilder = new Mock<IParameterBuilder>();
47+
mockParameterBuilder.Setup(pb => pb.Any()).Returns(true);
48+
mockParameterBuilder.Setup(pb => pb.ToString()).Returns("param1=value1&param2=value2");
49+
50+
// Act
51+
var resultUri = relativeUri.AddParameters(mockParameterBuilder.Object);
52+
53+
// Assert
54+
Assert.NotEqual(relativeUri, resultUri);
55+
Assert.Equal("test/path?param1=value1&param2=value2", resultUri.OriginalString);
56+
}
57+
}
58+
}

src/CloudFlare.Client/CloudFlare.Client.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,8 @@
2424
<None Include="$(RepositoryRootPath)\LICENSE" Pack="true" PackagePath="" />
2525
<None Include="Resources\nuget_logo.png" Pack="true" PackagePath="" />
2626
</ItemGroup>
27+
<ItemGroup>
28+
<!-- Since it is not strong named assembly it has to be marked like this to access internals in unit tests -->
29+
<InternalsVisibleTo Include="DynamicProxyGenAssembly2"/>
30+
</ItemGroup>
2731
</Project>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
namespace CloudFlare.Client.Models;
2+
3+
internal interface IParameterBuilder
4+
{
5+
/// <summary>
6+
/// Insert parameter in the collection
7+
/// </summary>
8+
/// <typeparam name="T">Type of the inserting parameter</typeparam>
9+
/// <param name="key">Parameter name</param>
10+
/// <param name="value">Value of the parameter</param>
11+
/// <returns>ParameterBuilderHelper</returns>
12+
IParameterBuilder InsertValue<T>(string key, T value);
13+
14+
/// <summary>
15+
/// Whether there are any parameter
16+
/// </summary>
17+
/// <returns></returns>
18+
bool Any();
19+
20+
/// <summary>
21+
/// Converts the parameters to a string
22+
/// </summary>
23+
/// <returns>The parameters as string</returns>
24+
string ToString();
25+
}

src/CloudFlare.Client/Models/ParameterBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace CloudFlare.Client.Models;
77

8-
internal class ParameterBuilder
8+
internal class ParameterBuilder : IParameterBuilder
99
{
1010
private readonly NameValueCollection _parameterCollection;
1111

@@ -24,7 +24,7 @@ public ParameterBuilder()
2424
/// <param name="key">Parameter name</param>
2525
/// <param name="value">Value of the parameter</param>
2626
/// <returns>ParameterBuilderHelper</returns>
27-
public ParameterBuilder InsertValue<T>(string key, T value)
27+
public IParameterBuilder InsertValue<T>(string key, T value)
2828
{
2929
if (!EqualityComparer<T>.Default.Equals(value, default) &&
3030
((value is string str && !string.IsNullOrEmpty(str)) || value is not string) &&

src/CloudFlare.Client/Models/RelativeUri.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ public RelativeUri(string uriString) : base(uriString, UriKind.Relative)
1515
{
1616
}
1717

18-
internal RelativeUri AddParameters(ParameterBuilder parameterBuilder)
18+
internal RelativeUri AddParameters(IParameterBuilder parameterBuilder)
1919
{
20-
return !parameterBuilder.Any() ? this : new RelativeUri($"{this.OriginalString}?{parameterBuilder}");
20+
return !parameterBuilder.Any() ? this : new RelativeUri($"{ OriginalString }?{ parameterBuilder.ToString() }");
2121
}
2222
}

src/Directory.Packages.props

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
<Project>
2-
32
<PropertyGroup>
43
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
54
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
65
<NoWarn>$(NoWarn);NU1507</NoWarn>
76
</PropertyGroup>
8-
97
<ItemGroup>
108
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
119
<PackageVersion Include="Microsoft.AspNet.WebApi.Client" Version="6.0.0" />
1210
<PackageVersion Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="9.0.0" />
11+
<PackageVersion Include="Moq" Version="4.20.72" />
1312
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
1413
</ItemGroup>
15-
1614
<!-- Test project only -->
1715
<ItemGroup>
1816
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
@@ -28,5 +26,4 @@
2826
<PackageVersion Include="xunit" Version="2.9.3" />
2927
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.2" />
3028
</ItemGroup>
31-
3229
</Project>

0 commit comments

Comments
 (0)