Skip to content

Commit

Permalink
add tests setting Authorization headers via HeaderCollection (#1385)
Browse files Browse the repository at this point in the history
Co-authored-by: Glenn <5834289+glennawatson@users.noreply.github.com>
  • Loading branch information
james-s-tayler and glennawatson committed Apr 12, 2023
1 parent 63b9654 commit 469bfce
Showing 1 changed file with 143 additions and 1 deletion.
144 changes: 143 additions & 1 deletion Refit.Tests/AuthenticatedClientHandlerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,15 @@ public interface IMyAuthenticatedService

[Get("/auth")]
Task<string> GetAuthenticatedWithTokenInMethod([Authorize("Bearer")] string token);

[Get("/auth")]
Task<string> GetAuthenticatedWithAuthorizeAttributeAndHeaderCollection([Authorize("Bearer")] string token, [HeaderCollection] IDictionary<string, string> headers);

[Get("/auth")]
Task<string> GetAuthenticatedWithTokenInHeaderCollection([HeaderCollection] IDictionary<string, string> headers);

[Post("/auth/{id}")]
Task<string> PostAuthenticatedWithTokenInHeaderCollection(int id, SomeRequestData content, [HeaderCollection] IDictionary<string, string> headers);
}

public interface IInheritedAuthenticatedServiceWithHeaders : IAuthenticatedServiceWithHeaders
Expand Down Expand Up @@ -142,7 +151,7 @@ public async void AuthenticatedHandlerWithTokenInParameterUsesAuth()
{
var handler = new MockHttpMessageHandler();
var settings = new RefitSettings()
{
{
HttpMessageHandlerFactory = () => handler
};

Expand All @@ -159,6 +168,139 @@ public async void AuthenticatedHandlerWithTokenInParameterUsesAuth()
Assert.Equal("Ok", result);
}

[Fact]
public async void AuthenticatedHandlerWithTokenInHeaderCollectionUsesAuth()
{
var handler = new MockHttpMessageHandler();
var settings = new RefitSettings()
{
HttpMessageHandlerFactory = () => handler
};

var headers = new Dictionary<string, string>
{
{"User-Agent", "Refit"},
{"Authorization", "Bearer tokenValue"}
};

handler.Expect(HttpMethod.Get, "http://api/auth")
.WithHeaders(headers)
.Respond("text/plain", "Ok");

var fixture = RestService.For<IMyAuthenticatedService>("http://api", settings);

var result = await fixture.GetAuthenticatedWithTokenInHeaderCollection(headers);

handler.VerifyNoOutstandingExpectation();

Assert.Equal("Ok", result);
}

[Fact]
public async void AuthenticatedHandlerWithAuthorizeAttributeAndHeaderCollectionUsesAuth()
{
var handler = new MockHttpMessageHandler();
var settings = new RefitSettings()
{
HttpMessageHandlerFactory = () => handler
};

var expectedHeaders = new Dictionary<string, string>
{
{"Authorization", "Bearer tokenValue"},
{"User-Agent", "Refit"},
{"X-Forwarded-For", "Refit"}
};

var headerCollectionHeaders = new Dictionary<string, string>
{
{"User-Agent", "Refit"},
{"X-Forwarded-For", "Refit"}
};

handler.Expect(HttpMethod.Get, "http://api/auth")
.WithHeaders(expectedHeaders)
.Respond("text/plain", "Ok");

var fixture = RestService.For<IMyAuthenticatedService>("http://api", settings);

var result = await fixture.GetAuthenticatedWithAuthorizeAttributeAndHeaderCollection("tokenValue", headerCollectionHeaders);

handler.VerifyNoOutstandingExpectation();

Assert.Equal("Ok", result);
}

[Fact]
public async void AuthenticatedHandlerWithDuplicatedAuthorizationHeaderUsesAuth()
{
var handler = new MockHttpMessageHandler();
var settings = new RefitSettings()
{
HttpMessageHandlerFactory = () => handler
};

var expectedHeaders = new Dictionary<string, string>
{
{"Authorization", "Bearer tokenValue2"},
{"User-Agent", "Refit"},
{"X-Forwarded-For", "Refit"}
};

var headerCollectionHeaders = new Dictionary<string, string>
{
{"Authorization", "Bearer tokenValue2"},
{"User-Agent", "Refit"},
{"X-Forwarded-For", "Refit"}
};

handler.Expect(HttpMethod.Get, "http://api/auth")
.WithHeaders(expectedHeaders)
.Respond("text/plain", "Ok");

var fixture = RestService.For<IMyAuthenticatedService>("http://api", settings);

var result = await fixture.GetAuthenticatedWithAuthorizeAttributeAndHeaderCollection("tokenValue", headerCollectionHeaders);

handler.VerifyNoOutstandingExpectation();

Assert.Equal("Ok", result);
}

[Fact]
public async void AuthenticatedHandlerPostTokenInHeaderCollectionUsesAuth()
{
var handler = new MockHttpMessageHandler();
var settings = new RefitSettings()
{
HttpMessageHandlerFactory = () => handler
};

var id = 1;
var someRequestData = new SomeRequestData
{
ReadablePropertyName = 1
};

var headers = new Dictionary<string, string>
{
{"Authorization", "Bearer tokenValue2"},
{"ThingId", id.ToString()}
};

handler.Expect(HttpMethod.Post, $"http://api/auth/{id}")
.WithHeaders(headers)
.Respond("text/plain", "Ok");

var fixture = RestService.For<IMyAuthenticatedService>("http://api", settings);

var result = await fixture.PostAuthenticatedWithTokenInHeaderCollection(id, someRequestData, headers);

handler.VerifyNoOutstandingExpectation();

Assert.Equal("Ok", result);
}

[Fact]
public async void AuthentictedMethodFromBaseClassWithHeadersAttributeUsesAuth()
{
Expand Down

0 comments on commit 469bfce

Please sign in to comment.