Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions RestSharp.Net7/RestSharp.Net7.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<RootNamespace>RestSharp</RootNamespace>
<AssemblyName>RestSharp</AssemblyName>
<ImplicitUsings>false</ImplicitUsings>
<Nullable>disable</Nullable>
<DefineConstants>FRAMEWORK</DefineConstants>
<NoWarn>CS0618;CS0612;SYSLIB0014;CS0108;CS0114;CS0162;CS8632</NoWarn>
</PropertyGroup>

<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>RestSharp.Tests.Coverage</_Parameter1>
</AssemblyAttribute>
</ItemGroup>

<ItemGroup>
<Compile Include="../RestSharp/**/*.cs" Exclude="../RestSharp/Properties/AssemblyInfo.cs;../RestSharp/SharedAssemblyInfo.cs;../RestSharp/T4Helper/**;../RestSharp/Compression/**" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>

</Project>
204 changes: 204 additions & 0 deletions RestSharp.Tests.Coverage/AttributeAndContribTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
using System;
using System.Globalization;
using RestSharp.Deserializers;
using RestSharp.Serializers;
using RestSharp.Contrib;
using Xunit;

namespace RestSharp.Tests
{
public class AttributeAndContribTests
{
// DeserializeAsAttribute
[Fact]
public void DeserializeAsAttribute_Name()
{
var attr = new DeserializeAsAttribute { Name = "custom_name" };
Assert.Equal("custom_name", attr.Name);
}

[Fact]
public void DeserializeAsAttribute_Attribute()
{
var attr = new DeserializeAsAttribute { Attribute = true };
Assert.True(attr.Attribute);
}

// SerializeAsAttribute
[Fact]
public void SerializeAsAttribute_Defaults()
{
var attr = new SerializeAsAttribute();
Assert.Equal(NameStyle.AsIs, attr.NameStyle);
Assert.Equal(int.MaxValue, attr.Index);
Assert.Equal(CultureInfo.InvariantCulture, attr.Culture);
}

[Fact]
public void SerializeAsAttribute_TransformName_AsIs()
{
var attr = new SerializeAsAttribute { NameStyle = NameStyle.AsIs };
Assert.Equal("TestInput", attr.TransformName("TestInput"));
}

[Fact]
public void SerializeAsAttribute_TransformName_CamelCase()
{
var attr = new SerializeAsAttribute { NameStyle = NameStyle.CamelCase };
Assert.Equal("testInput", attr.TransformName("TestInput"));
}

[Fact]
public void SerializeAsAttribute_TransformName_LowerCase()
{
var attr = new SerializeAsAttribute { NameStyle = NameStyle.LowerCase };
Assert.Equal("testinput", attr.TransformName("TestInput"));
}

[Fact]
public void SerializeAsAttribute_TransformName_PascalCase()
{
var attr = new SerializeAsAttribute { NameStyle = NameStyle.PascalCase };
Assert.Equal("TestInput", attr.TransformName("test_input"));
}

[Fact]
public void SerializeAsAttribute_TransformName_With_CustomName()
{
var attr = new SerializeAsAttribute { Name = "CustomName", NameStyle = NameStyle.LowerCase };
Assert.Equal("customname", attr.TransformName("OriginalInput"));
}

[Fact]
public void SerializeAsAttribute_All_Properties()
{
var attr = new SerializeAsAttribute
{
Name = "myProp",
Attribute = true,
Culture = CultureInfo.CurrentCulture,
NameStyle = NameStyle.CamelCase,
Index = 5
};
Assert.Equal("myProp", attr.Name);
Assert.True(attr.Attribute);
Assert.Equal(5, attr.Index);
}

// NameStyle enum values
[Fact]
public void NameStyle_Enum_Values()
{
Assert.Equal(NameStyle.AsIs, (NameStyle)0);
Assert.Equal(NameStyle.CamelCase, (NameStyle)1);
Assert.Equal(NameStyle.LowerCase, (NameStyle)2);
Assert.Equal(NameStyle.PascalCase, (NameStyle)3);
}

// HttpUtility tests
[Fact]
public void HttpUtility_HtmlEncode_Basic()
{
Assert.Equal("&lt;b&gt;", HttpUtility.HtmlEncode("<b>"));
}

[Fact]
public void HttpUtility_HtmlEncode_Ampersand()
{
Assert.Equal("a &amp; b", HttpUtility.HtmlEncode("a & b"));
}

[Fact]
public void HttpUtility_HtmlEncode_Quotes()
{
Assert.Equal("&quot;test&quot;", HttpUtility.HtmlEncode("\"test\""));
}

[Fact]
public void HttpUtility_HtmlDecode_Basic()
{
Assert.Equal("<b>", HttpUtility.HtmlDecode("&lt;b&gt;"));
}

[Fact]
public void HttpUtility_HtmlDecode_Numeric()
{
Assert.Equal("A", HttpUtility.HtmlDecode("&#65;"));
}

[Fact]
public void HttpUtility_HtmlEncode_Null()
{
Assert.Null(HttpUtility.HtmlEncode((string)null));
}

[Fact]
public void HttpUtility_HtmlDecode_Null()
{
Assert.Null(HttpUtility.HtmlDecode(null));
}

[Fact]
public void HttpUtility_UrlEncode_Basic()
{
var result = HttpUtility.UrlEncode("hello world");
Assert.Equal("hello+world", result);
}

[Fact]
public void HttpUtility_UrlDecode_Basic()
{
var result = HttpUtility.UrlDecode("hello+world");
Assert.Equal("hello world", result);
}

[Fact]
public void HttpUtility_UrlEncode_Null()
{
Assert.Null(HttpUtility.UrlEncode((string)null));
}

[Fact]
public void HttpUtility_UrlDecode_Null()
{
Assert.Null(HttpUtility.UrlDecode((string)null));
}

[Fact]
public void HttpUtility_UrlEncode_SpecialChars()
{
var result = HttpUtility.UrlEncode("a=1&b=2");
Assert.Contains("%3d", result, StringComparison.OrdinalIgnoreCase);
Assert.Contains("%26", result, StringComparison.OrdinalIgnoreCase);
}

[Fact]
public void HttpUtility_UrlDecode_Percent()
{
var result = HttpUtility.UrlDecode("hello%20world");
Assert.Equal("hello world", result);
}

[Fact]
public void HttpUtility_ParseQueryString()
{
var result = HttpUtility.ParseQueryString("a=1&b=2");
Assert.Equal("1", result["a"]);
Assert.Equal("2", result["b"]);
}

[Fact]
public void HttpUtility_ParseQueryString_Empty()
{
var result = HttpUtility.ParseQueryString("");
Assert.Equal(0, result.Count);
}

[Fact]
public void HttpUtility_ParseQueryString_With_QuestionMark()
{
var result = HttpUtility.ParseQueryString("?a=1");
Assert.Equal("1", result["a"]);
}
}
}
135 changes: 135 additions & 0 deletions RestSharp.Tests.Coverage/AuthenticatorTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
using System;
using System.Linq;
using Xunit;

namespace RestSharp.Tests
{
public class AuthenticatorTests
{
[Fact]
public void HttpBasicAuthenticator_Adds_Authorization_Header()
{
var auth = new HttpBasicAuthenticator("user", "pass");
var client = new RestClient("http://example.com");
var request = new RestRequest();

auth.Authenticate(client, request);

var header = request.Parameters.FirstOrDefault(
p => p.Name == "Authorization" && p.Type == ParameterType.HttpHeader);
Assert.NotNull(header);
Assert.StartsWith("Basic ", header.Value.ToString());
}

[Fact]
public void HttpBasicAuthenticator_Encodes_Credentials_Correctly()
{
var auth = new HttpBasicAuthenticator("admin", "secret");
var client = new RestClient("http://example.com");
var request = new RestRequest();

auth.Authenticate(client, request);

var header = request.Parameters.First(p => p.Name == "Authorization");
var expectedToken = Convert.ToBase64String(
System.Text.Encoding.UTF8.GetBytes("admin:secret"));
Assert.Equal("Basic " + expectedToken, header.Value.ToString());
}

[Fact]
public void HttpBasicAuthenticator_Does_Not_Add_Duplicate()
{
var auth = new HttpBasicAuthenticator("user", "pass");
var client = new RestClient("http://example.com");
var request = new RestRequest();

auth.Authenticate(client, request);
auth.Authenticate(client, request);

var headers = request.Parameters
.Where(p => p.Name.Equals("Authorization", StringComparison.OrdinalIgnoreCase))
.ToList();
Assert.Single(headers);
}

[Fact]
public void SimpleAuthenticator_Adds_Username_And_Password_Parameters()
{
var auth = new SimpleAuthenticator("username", "admin", "password", "secret");
var client = new RestClient("http://example.com");
var request = new RestRequest();

auth.Authenticate(client, request);

Assert.Equal(2, request.Parameters.Count);
Assert.Contains(request.Parameters, p => p.Name == "username" && p.Value.ToString() == "admin");
Assert.Contains(request.Parameters, p => p.Name == "password" && p.Value.ToString() == "secret");
}

[Fact]
public void OAuth2UriQueryParameterAuthenticator_Adds_Token_Parameter()
{
var auth = new OAuth2UriQueryParameterAuthenticator("mytoken123");
var client = new RestClient("http://example.com");
var request = new RestRequest();

auth.Authenticate(client, request);

var param = request.Parameters.FirstOrDefault(
p => p.Name == "oauth_token" && p.Type == ParameterType.GetOrPost);
Assert.NotNull(param);
Assert.Equal("mytoken123", param.Value.ToString());
}

[Fact]
public void OAuth2UriQueryParameterAuthenticator_AccessToken_Property()
{
var auth = new OAuth2UriQueryParameterAuthenticator("token456");
Assert.Equal("token456", auth.AccessToken);
}

[Fact]
public void OAuth2AuthorizationRequestHeaderAuthenticator_Adds_Header()
{
var auth = new OAuth2AuthorizationRequestHeaderAuthenticator("bearertoken");
var client = new RestClient("http://example.com");
var request = new RestRequest();

auth.Authenticate(client, request);

var header = request.Parameters.FirstOrDefault(
p => p.Name == "Authorization" && p.Type == ParameterType.HttpHeader);
Assert.NotNull(header);
Assert.Equal("OAuth bearertoken", header.Value.ToString());
}

[Fact]
public void OAuth2AuthorizationRequestHeaderAuthenticator_Does_Not_Add_Duplicate()
{
var auth = new OAuth2AuthorizationRequestHeaderAuthenticator("token");
var client = new RestClient("http://example.com");
var request = new RestRequest();

auth.Authenticate(client, request);
auth.Authenticate(client, request);

var headers = request.Parameters
.Where(p => p.Name.Equals("Authorization", StringComparison.OrdinalIgnoreCase))
.ToList();
Assert.Single(headers);
}

[Fact]
public void NtlmAuthenticator_Sets_DefaultCredentials()
{
var auth = new NtlmAuthenticator();
var client = new RestClient("http://example.com");
var request = new RestRequest();

auth.Authenticate(client, request);

Assert.NotNull(request.Credentials);
Assert.Same(System.Net.CredentialCache.DefaultCredentials, request.Credentials);
}
}
}
Loading