2 changed files with 175 additions and 0 deletions
@ -0,0 +1,96 @@
@@ -0,0 +1,96 @@
|
||||
using System; |
||||
using Microsoft.AspNetCore.Http; |
||||
using Bit.Core.IdentityServer; |
||||
using Xunit; |
||||
using NSubstitute; |
||||
using System.Collections.Generic; |
||||
using Microsoft.Extensions.Primitives; |
||||
|
||||
namespace Bit.Core.Test.IdentityServer |
||||
{ |
||||
public class TokenRetrievalTests |
||||
{ |
||||
private Func<HttpRequest, string> Retrieve = TokenRetrieval.FromAuthorizationHeaderOrQueryString(); |
||||
|
||||
[Fact] |
||||
public void RetrieveToken_FromHeader_ReturnsToken() |
||||
{ |
||||
// Arrange |
||||
var headers = new HeaderDictionary |
||||
{ |
||||
{ "Authorization", "Bearer test_value" }, |
||||
{ "X-Test-Header", "random_value" } |
||||
}; |
||||
|
||||
var request = Substitute.For<HttpRequest>(); |
||||
|
||||
request.Headers.Returns(headers); |
||||
|
||||
// Act |
||||
var token = Retrieve(request); |
||||
|
||||
// Assert |
||||
Assert.Equal("test_value", token); |
||||
} |
||||
|
||||
[Fact] |
||||
public void RetrieveToken_FromQueryString_ReturnsToken() |
||||
{ |
||||
// Arrange |
||||
var queryString = new Dictionary<string, StringValues> |
||||
{ |
||||
{ "access_token", "test_value" }, |
||||
{ "test-query", "random_value" } |
||||
}; |
||||
|
||||
var request = Substitute.For<HttpRequest>(); |
||||
request.Query.Returns(new QueryCollection(queryString)); |
||||
|
||||
// Act |
||||
var token = Retrieve(request); |
||||
|
||||
// Assert |
||||
Assert.Equal("test_value", token); |
||||
} |
||||
|
||||
[Fact] |
||||
public void RetrieveToken_HasBoth_ReturnsHeaderToken() |
||||
{ |
||||
// Arrange |
||||
var queryString = new Dictionary<string, StringValues> |
||||
{ |
||||
{ "access_token", "query_string_token" }, |
||||
{ "test-query", "random_value" } |
||||
}; |
||||
|
||||
var headers = new HeaderDictionary |
||||
{ |
||||
{ "Authorization", "Bearer header_token" }, |
||||
{ "X-Test-Header", "random_value" } |
||||
}; |
||||
|
||||
var request = Substitute.For<HttpRequest>(); |
||||
request.Headers.Returns(headers); |
||||
request.Query.Returns(new QueryCollection(queryString)); |
||||
|
||||
// Act |
||||
var token = Retrieve(request); |
||||
|
||||
// Assert |
||||
Assert.Equal("header_token", token); |
||||
} |
||||
|
||||
[Fact] |
||||
public void RetrieveToken_NoToken_ReturnsNull() |
||||
{ |
||||
// Arrange |
||||
var request = Substitute.For<HttpRequest>(); |
||||
|
||||
// Act |
||||
var token = Retrieve(request); |
||||
|
||||
// Assert |
||||
Assert.Null(token); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,79 @@
@@ -0,0 +1,79 @@
|
||||
|
||||
using Bit.Core.Utilities; |
||||
using Bit.Core.Exceptions; |
||||
using Microsoft.AspNetCore.Mvc.Filters; |
||||
using Microsoft.Extensions.DependencyInjection; |
||||
using NSubstitute; |
||||
using Xunit; |
||||
using System.Collections.Generic; |
||||
using Microsoft.AspNetCore.Mvc; |
||||
using Microsoft.AspNetCore.Http; |
||||
using Microsoft.AspNetCore.Routing; |
||||
using Microsoft.AspNetCore.Mvc.Abstractions; |
||||
|
||||
namespace Bit.Core.Test.Utilities |
||||
{ |
||||
public class SelfHostedAttributeTests |
||||
{ |
||||
[Fact] |
||||
public void NotSelfHosted_Throws_When_SelfHosted() |
||||
{ |
||||
var sha = new SelfHostedAttribute { NotSelfHostedOnly = true }; |
||||
|
||||
Assert.Throws<BadRequestException>(() => sha.OnActionExecuting(GetContext(selfHosted: true))); |
||||
} |
||||
|
||||
[Fact] |
||||
public void NotSelfHosted_Success_When_NotSelfHosted() |
||||
{ |
||||
var sha = new SelfHostedAttribute { NotSelfHostedOnly = true }; |
||||
|
||||
sha.OnActionExecuting(GetContext(selfHosted: false)); |
||||
} |
||||
|
||||
|
||||
[Fact] |
||||
public void SelfHosted_Success_When_SelfHosted() |
||||
{ |
||||
var sha = new SelfHostedAttribute { SelfHostedOnly = true }; |
||||
|
||||
sha.OnActionExecuting(GetContext(selfHosted: true)); |
||||
} |
||||
|
||||
[Fact] |
||||
public void SelfHosted_Throws_When_NotSelfHosted() |
||||
{ |
||||
var sha = new SelfHostedAttribute { SelfHostedOnly = true }; |
||||
|
||||
Assert.Throws<BadRequestException>(() => sha.OnActionExecuting(GetContext(selfHosted: false))); |
||||
} |
||||
|
||||
|
||||
// This generates a ActionExecutingContext with the needed injected |
||||
// service with the given value. |
||||
private ActionExecutingContext GetContext(bool selfHosted) |
||||
{ |
||||
IServiceCollection services = new ServiceCollection(); |
||||
|
||||
var globalSettings = new GlobalSettings |
||||
{ |
||||
SelfHosted = selfHosted |
||||
}; |
||||
|
||||
services.AddSingleton(globalSettings); |
||||
|
||||
var httpContext = new DefaultHttpContext(); |
||||
httpContext.RequestServices = services.BuildServiceProvider(); |
||||
|
||||
var context = Substitute.For<ActionExecutingContext>( |
||||
Substitute.For<ActionContext>(httpContext, |
||||
new RouteData(), |
||||
Substitute.For<ActionDescriptor>()), |
||||
new List<IFilterMetadata>(), |
||||
new Dictionary<string, object>(), |
||||
Substitute.For<Controller>()); |
||||
|
||||
return context; |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue