Skip to content
This repository has been archived by the owner on Dec 6, 2019. It is now read-only.

Commit

Permalink
[#392] updated redirect attributes in Feature / Accounts to be testable
Browse files Browse the repository at this point in the history
  • Loading branch information
nickwesselman committed Jun 28, 2018
1 parent d7482f5 commit f17e141
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
using System.Reflection;
using System.Web.Mvc;
using FluentAssertions;
using NSubstitute;
using Ploeh.AutoFixture.AutoNSubstitute;
using Sitecore.Collections;
using Sitecore.Data;
using Sitecore.FakeDb;
using Sitecore.FakeDb.AutoFixture;
using Sitecore.FakeDb.Sites;
using Sitecore.Feature.Accounts.Attributes;
using Sitecore.Feature.Accounts.Services;
using Sitecore.Feature.Accounts.Tests.Extensions;
using Sitecore.Foundation.Testing.Attributes;
using Sitecore.Sites;
Expand All @@ -19,10 +21,12 @@ public class RedirectAuthenticatedAttributeTests
{
[Theory]
[AutoDbData]
public void OnActionExecuting_NotNormalMode_ShouldNotRedirect(FakeSiteContext siteContext, [Substitute]ActionExecutingContext filterContext, RedirectAuthenticatedAttribute redirectAuthenticatedAttribute)
public void OnActionExecuting_NotNormalMode_ShouldNotRedirect(FakeSiteContext siteContext, [Substitute]ActionExecutingContext filterContext)
{
//Arrange
typeof(SiteContext).GetField("displayMode", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(siteContext, DisplayMode.Edit);
var urlService = Substitute.For<IGetRedirectUrlService>();
var redirectAuthenticatedAttribute = new RedirectAuthenticatedAttribute(urlService);

//Act
using (new SiteContextSwitcher(siteContext))
Expand All @@ -36,11 +40,13 @@ public void OnActionExecuting_NotNormalMode_ShouldNotRedirect(FakeSiteContext si

[Theory]
[AutoDbData]
public void OnActionExecuting_NotAuthenticatedUser_ShouldNotRedirect(FakeSiteContext siteContext, [Substitute]ActionExecutingContext filterContext, RedirectAuthenticatedAttribute redirectAuthenticatedAttribute)
public void OnActionExecuting_NotAuthenticatedUser_ShouldNotRedirect(FakeSiteContext siteContext, [Substitute]ActionExecutingContext filterContext)
{
//Arrange
typeof(SiteContext).GetField("displayMode", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(siteContext, DisplayMode.Normal);

var urlService = Substitute.For<IGetRedirectUrlService>();
var redirectAuthenticatedAttribute = new RedirectAuthenticatedAttribute(urlService);

//Act
using (new SiteContextSwitcher(siteContext))
using (new Sitecore.Security.Accounts.UserSwitcher(@"extranet\John", false))
Expand All @@ -54,7 +60,7 @@ public void OnActionExecuting_NotAuthenticatedUser_ShouldNotRedirect(FakeSiteCon

[Theory]
[AutoDbData]
public void OnActionExecuting_AuthenticatedUser_ShouldRedirect(Database db, [Content] DbItem item, [Substitute]ActionExecutingContext filterContext, RedirectAuthenticatedAttribute redirectAuthenticatedAttribute)
public void OnActionExecuting_AuthenticatedUser_ShouldRedirect(Database db, [Content] DbItem item, [Substitute]ActionExecutingContext filterContext, string url)
{
//Arrange
var siteContext = new FakeSiteContext(new StringDictionary
Expand All @@ -67,6 +73,9 @@ public void OnActionExecuting_AuthenticatedUser_ShouldRedirect(Database db, [Con
}
}) as SiteContext;
siteContext.Database = db;
var urlService = Substitute.For<IGetRedirectUrlService>();
urlService.GetRedirectUrl(AuthenticationStatus.Authenticated).Returns(url);
var redirectAuthenticatedAttribute = new RedirectAuthenticatedAttribute(urlService);

//Act
using (new SiteContextSwitcher(siteContext))
Expand All @@ -77,6 +86,7 @@ public void OnActionExecuting_AuthenticatedUser_ShouldRedirect(Database db, [Con

//Assert
filterContext.Result.Should().BeOfType<RedirectResult>();
((RedirectResult)filterContext.Result).Url.Should().Be(url);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
{
using System.Web.Mvc;
using FluentAssertions;
using NSubstitute;
using Ploeh.AutoFixture.AutoNSubstitute;
using Sitecore.Collections;
using Sitecore.Data;
using Sitecore.FakeDb;
using Sitecore.FakeDb.AutoFixture;
using Sitecore.FakeDb.Sites;
using Sitecore.Feature.Accounts.Attributes;
using Sitecore.Feature.Accounts.Services;
using Sitecore.Feature.Accounts.Tests.Extensions;
using Sitecore.Foundation.Testing.Attributes;
using Sitecore.Globalization;
Expand All @@ -19,8 +21,10 @@ public class RedirectUnauthenticatedTests
{
[Theory]
[AutoDbData]
public void ShouldNotRedirectAuthenticatedUser([Substitute]AuthorizationContext filterContext, RedirectUnauthenticatedAttribute redirectUnauthenticated)
public void ShouldNotRedirectAuthenticatedUser([Substitute]AuthorizationContext filterContext)
{
var urlService = Substitute.For<IGetRedirectUrlService>();
var redirectUnauthenticated = new RedirectUnauthenticatedAttribute(urlService);
using (new Sitecore.Security.Accounts.UserSwitcher(@"extranet\John", true))
{
redirectUnauthenticated.OnAuthorization(filterContext);
Expand All @@ -30,25 +34,15 @@ public void ShouldNotRedirectAuthenticatedUser([Substitute]AuthorizationContext

[Theory]
[AutoDbData]
public void ShouldRedirectUnauthenticatedUser(Database db, [Content] DbItem item,[Substitute]AuthorizationContext filterContext, RedirectUnauthenticatedAttribute redirectUnauthenticated)
public void ShouldRedirectUnauthenticatedUser([Substitute]AuthorizationContext filterContext, string url)
{
var fakeSite = new FakeSiteContext(new StringDictionary
{
{
"rootPath", "/sitecore/content"
},
{
"startItem", item.Name
}
}) as SiteContext;
fakeSite.Database = db;
Language.Current = Language.Invariant;

using (new SiteContextSwitcher(fakeSite))
var urlService = Substitute.For<IGetRedirectUrlService>();
urlService.GetRedirectUrl(AuthenticationStatus.Unauthenticated, Arg.Any<string>()).Returns(url);
var redirectUnauthenticated = new RedirectUnauthenticatedAttribute(urlService);
using (new Sitecore.Security.Accounts.UserSwitcher(@"extranet\John", false))
{
redirectUnauthenticated.OnAuthorization(filterContext);
filterContext.Result.Should().BeOfType<RedirectResult>().Which.Url.Should().Be("/");
filterContext.Result.Should().BeOfType<RedirectResult>().Which.Url.Should().Be(url);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@ public class RedirectAuthenticatedAttribute : ActionFilterAttribute
{
private readonly IGetRedirectUrlService getRedirectUrlService;

public RedirectAuthenticatedAttribute()
public RedirectAuthenticatedAttribute() : this(ServiceLocator.ServiceProvider.GetService<IGetRedirectUrlService>())
{
this.getRedirectUrlService = ServiceLocator.ServiceProvider.GetService<IGetRedirectUrlService>();
}

public RedirectAuthenticatedAttribute(IGetRedirectUrlService getRedirectUrlService)
{
this.getRedirectUrlService = getRedirectUrlService;
}

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,14 @@ public class RedirectUnauthenticatedAttribute : ActionFilterAttribute, IAuthoriz
{
private readonly IGetRedirectUrlService getRedirectUrlService;

public RedirectUnauthenticatedAttribute()
public RedirectUnauthenticatedAttribute() : this(ServiceLocator.ServiceProvider.GetService<IGetRedirectUrlService>())
{
this.getRedirectUrlService = ServiceLocator.ServiceProvider.GetService<IGetRedirectUrlService>();

}

public RedirectUnauthenticatedAttribute(IGetRedirectUrlService getRedirectUrlService)
{
this.getRedirectUrlService = getRedirectUrlService;
}

public void OnAuthorization(AuthorizationContext context)
Expand Down

0 comments on commit f17e141

Please sign in to comment.