Skip to content
Merged
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
113 changes: 89 additions & 24 deletions src/HttpClientServiceHelper.Tests/DeleteTest.cs
Original file line number Diff line number Diff line change
@@ -1,53 +1,118 @@
using HttpClientServiceHelper.Models;
using HttpClientServiceHelper.Models;
using Authorization = HttpClientServiceHelper.Models.Authorization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
using WireMock.Server;
using Xunit;

namespace HttpClientServiceHelper.Tests
{
public class DeleteTest
public class DeleteTest : IDisposable
{
string Route = "https://daraoladapo.com";
string Token = Guid.NewGuid().ToString();
List<Header> Headers = new List<Header>() { new Header() { Name = "SomeHeaderName", Value = "SomeHeaderValue" } };
private readonly WireMockServer _server;
private readonly string _route;
private readonly string _token = Guid.NewGuid().ToString();
private readonly List<Header> _customHeaders = new() { new Header { Name = "X-Custom", Value = "custom-value" } };
private readonly Authorization _auth = new() { Scheme = "Basic", Parameter = "dXNlcjpwYXNz" };

public DeleteTest()
{
_server = WireMockServer.Start();
_route = _server.Urls[0];
_server.Given(Request.Create().WithPath("/").UsingAnyMethod())
.RespondWith(Response.Create().WithStatusCode(200).WithBody("deleted"));
_server.Given(Request.Create().WithPath("/error").UsingAnyMethod())
.RespondWith(Response.Create().WithStatusCode(404).WithBody("not found"));
}

public void Dispose() => _server.Dispose();

[Fact]
public async Task DeleteAsync()
{
var DeleteResponse = await HttpClientHelper.DeleteAsync(Route);
Assert.NotNull(DeleteResponse);
Assert.IsType<HttpResponseMessage>(DeleteResponse);
var response = await HttpClientHelper.DeleteAsync(_route);
Assert.NotNull(response);
Assert.IsType<HttpResponseMessage>(response);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}

[Fact]
public async Task Delete_DeleteResponseAsStringAsync()
public async Task DeleteAsync_NoAuth_DoesNotSendAuthHeader()
{
var DeleteResponse = await HttpClientHelper.DeleteAndGetResponseAsStringAsync(Route);
Assert.NotNull(DeleteResponse);
Assert.IsType<string>(DeleteResponse);
await HttpClientHelper.DeleteAsync(_route);
var entry = _server.LogEntries.Last();
Assert.False(entry.RequestMessage.Headers.ContainsKey("Authorization"));
}

[Fact]
public async Task Delete_WithToken_DeleteResponseAsStringAsync()
public async Task DeleteAsync_WithToken()
{
var DeleteResponse = await HttpClientHelper.DeleteAndGetResponseAsStringAsync(Route, Token);
Assert.NotNull(DeleteResponse);
Assert.IsType<string>(DeleteResponse);
var response = await HttpClientHelper.DeleteAsync(_route, _token);
Assert.NotNull(response);
Assert.IsType<HttpResponseMessage>(response);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}

[Fact]
public async Task DeleteAsync_WithToken()
public async Task DeleteAsync_WithToken_SendsBearerHeader()
{
var DeleteResponse = await HttpClientHelper.DeleteAsync(Route, Token);
Assert.NotNull(DeleteResponse);
Assert.IsType<HttpResponseMessage>(DeleteResponse);
await HttpClientHelper.DeleteAsync(_route, _token);
var entry = _server.LogEntries.Last();
Assert.True(entry.RequestMessage.Headers.ContainsKey("Authorization"));
Assert.Contains($"Bearer {_token}", entry.RequestMessage.Headers["Authorization"]);
}

[Fact]
public async Task DeleteAsync_WithHeaders()
{
var DeleteResponse = await HttpClientHelper.DeleteAsync(Route, Headers);
Assert.NotNull(DeleteResponse);
Assert.IsType<HttpResponseMessage>(DeleteResponse);
var response = await HttpClientHelper.DeleteAsync(_route, _customHeaders);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var entry = _server.LogEntries.Last();
Assert.True(entry.RequestMessage.Headers.ContainsKey("X-Custom"));
Assert.Contains("custom-value", entry.RequestMessage.Headers["X-Custom"]);
}

[Fact]
public async Task DeleteAsync_WithAuthorizationObject_SendsSchemeAndParameter()
{
var response = await HttpClientHelper.DeleteAsync(_route, _customHeaders, _auth);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var entry = _server.LogEntries.Last();
Assert.True(entry.RequestMessage.Headers.ContainsKey("Authorization"));
Assert.Contains($"Basic {_auth.Parameter}", entry.RequestMessage.Headers["Authorization"]);
}

[Fact]
public async Task Delete_DeleteResponseAsStringAsync()
{
var response = await HttpClientHelper.DeleteAndGetResponseAsStringAsync(_route);
Assert.NotNull(response);
Assert.IsType<string>(response);
Assert.Equal("deleted", response);
}

[Fact]
public async Task Delete_WithToken_DeleteResponseAsStringAsync()
{
var response = await HttpClientHelper.DeleteAndGetResponseAsStringAsync(_route, _token);
Assert.NotNull(response);
Assert.IsType<string>(response);
var entry = _server.LogEntries.Last();
Assert.True(entry.RequestMessage.Headers.ContainsKey("Authorization"));
Assert.Contains($"Bearer {_token}", entry.RequestMessage.Headers["Authorization"]);
}

[Fact]
public async Task DeleteAsync_NonOkResponse_Returns404()
{
var response = await HttpClientHelper.DeleteAsync($"{_route}/error");
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
}
}
}
111 changes: 93 additions & 18 deletions src/HttpClientServiceHelper.Tests/GetTest.cs
Original file line number Diff line number Diff line change
@@ -1,43 +1,118 @@
using HttpClientServiceHelper.Tests.Mock;
using HttpClientServiceHelper.Models;
using Authorization = HttpClientServiceHelper.Models.Authorization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
using WireMock.Server;
using Xunit;

namespace HttpClientServiceHelper.Tests
{
public class GetTest
public class GetTest : IDisposable
{
string Route = "https://daraoladapo.com";
string Token = Guid.NewGuid().ToString();
private readonly WireMockServer _server;
private readonly string _route;
private readonly string _token = Guid.NewGuid().ToString();
private readonly List<Header> _customHeaders = new() { new Header { Name = "X-Custom", Value = "custom-value" } };
private readonly Authorization _auth = new() { Scheme = "Basic", Parameter = "dXNlcjpwYXNz" };

public GetTest()
{
_server = WireMockServer.Start();
_route = _server.Urls[0];
_server.Given(Request.Create().WithPath("/").UsingAnyMethod())
.RespondWith(Response.Create().WithStatusCode(200).WithBody("ok"));
_server.Given(Request.Create().WithPath("/error").UsingAnyMethod())
.RespondWith(Response.Create().WithStatusCode(404).WithBody("not found"));
}

public void Dispose() => _server.Dispose();

[Fact]
public async Task GetAsync()
{
var GetResponse = await HttpClientHelper.GetAsync(Route);
Assert.NotNull(GetResponse);
Assert.IsType<HttpResponseMessage>(GetResponse);
var response = await HttpClientHelper.GetAsync(_route);
Assert.NotNull(response);
Assert.IsType<HttpResponseMessage>(response);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}

[Fact]
public async Task GetAsync_NoAuth_DoesNotSendAuthHeader()
{
await HttpClientHelper.GetAsync(_route);
var entry = _server.LogEntries.Last();
Assert.False(entry.RequestMessage.Headers.ContainsKey("Authorization"));
}

[Fact]
public async Task GetAsync_WithToken()
{
var response = await HttpClientHelper.GetAsync(_route, _token);
Assert.NotNull(response);
Assert.IsType<HttpResponseMessage>(response);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}

[Fact]
public async Task GetAsync_WithToken_SendsBearerHeader()
{
await HttpClientHelper.GetAsync(_route, _token);
var entry = _server.LogEntries.Last();
Assert.True(entry.RequestMessage.Headers.ContainsKey("Authorization"));
Assert.Contains($"Bearer {_token}", entry.RequestMessage.Headers["Authorization"]);
}

[Fact]
public async Task GetAsync_WithCustomHeaders_SendsHeaders()
{
var response = await HttpClientHelper.GetAsync(_route, _customHeaders);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var entry = _server.LogEntries.Last();
Assert.True(entry.RequestMessage.Headers.ContainsKey("X-Custom"));
Assert.Contains("custom-value", entry.RequestMessage.Headers["X-Custom"]);
}

[Fact]
public async Task GetAsync_WithAuthorizationObject_SendsSchemeAndParameter()
{
var response = await HttpClientHelper.GetAsync(_route, _customHeaders, _auth);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var entry = _server.LogEntries.Last();
Assert.True(entry.RequestMessage.Headers.ContainsKey("Authorization"));
Assert.Contains($"Basic {_auth.Parameter}", entry.RequestMessage.Headers["Authorization"]);
}

[Fact]
public async Task Get_GetResponseAsStringAsync()
{
var GetResponse = await HttpClientHelper.GetAsStringAsync(Route);
Assert.NotNull(GetResponse);
Assert.IsType<string>(GetResponse);
var response = await HttpClientHelper.GetAsStringAsync(_route);
Assert.NotNull(response);
Assert.IsType<string>(response);
Assert.Equal("ok", response);
}

[Fact]
public async Task Get_WithToken_GetResponseAsStringAsync()
{
var GetResponse = await HttpClientHelper.GetAsStringAsync(Route, Token);
Assert.NotNull(GetResponse);
Assert.IsType<string>(GetResponse);
var response = await HttpClientHelper.GetAsStringAsync(_route, _token);
Assert.NotNull(response);
Assert.IsType<string>(response);
var entry = _server.LogEntries.Last();
Assert.True(entry.RequestMessage.Headers.ContainsKey("Authorization"));
Assert.Contains($"Bearer {_token}", entry.RequestMessage.Headers["Authorization"]);
}

[Fact]
public async Task GetAsync_WithToken()
public async Task GetAsync_NonOkResponse_Returns404()
{
var GetResponse = await HttpClientHelper.GetAsync(Route, Token);
Assert.NotNull(GetResponse);
Assert.IsType<HttpResponseMessage>(GetResponse);
var response = await HttpClientHelper.GetAsync($"{_route}/error");
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
<PackageReference Include="WireMock.Net" Version="2.6.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="coverlet.msbuild" Version="10.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
Loading
Loading