-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' of github.com:GiveCampUK/GiveCRM
- Loading branch information
Showing
20 changed files
with
674 additions
and
154 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
140 changes: 140 additions & 0 deletions
140
src/GiveCRM.Web.Tests/Services/UrlValidationService.Tests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Web; | ||
using System.Web.Mvc; | ||
using GiveCRM.Web.Controllers; | ||
using GiveCRM.Web.Services; | ||
using Moq; | ||
using NUnit.Framework; | ||
using System.Web.Routing; | ||
|
||
namespace GiveCRM.Web.Tests.Services | ||
{ | ||
[TestFixture] | ||
public class UrlValidationServiceTest:AssertionHelper | ||
{ | ||
|
||
private UrlValidationService CreateService() | ||
{ | ||
var rules = new List<IAmAUrlValidationRule> | ||
{ | ||
new IsLocal(), | ||
new LengthIsGreaterThanOne(), | ||
new BeginsWithForwardSlash(), | ||
new DoesNotBeginWithDoubleForwardSlash(), | ||
new DoesNotBeginWithForwardSlashBackslash() | ||
}; | ||
return new UrlValidationService(rules); | ||
} | ||
|
||
[Test] | ||
public void ShouldReturnTrueForValidUrl() | ||
{ | ||
var routes = new RouteCollection(); | ||
MvcApplication.RegisterRoutes(routes); | ||
|
||
var request = new Mock<HttpRequestBase>(MockBehavior.Strict); | ||
request.SetupGet(x => x.ApplicationPath).Returns("/"); | ||
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/Home", UriKind.Absolute)); | ||
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection()); | ||
|
||
var response = new Mock<HttpResponseBase>(MockBehavior.Strict); | ||
response.Setup(x => x.ApplyAppPathModifier("/Home")).Returns("http://localhost/Home"); | ||
|
||
var context = new Mock<HttpContextBase>(MockBehavior.Strict); | ||
context.SetupGet(x => x.Request).Returns(request.Object); | ||
context.SetupGet(x => x.Response).Returns(response.Object); | ||
|
||
var controller = new AccountController(null,null,null); | ||
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller); | ||
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes); | ||
|
||
var service = CreateService(); | ||
var result = service.IsRedirectable(controller, @"/Home"); | ||
Expect(result, Is.True); | ||
} | ||
|
||
[Test] | ||
public void ShouldReturnFalseForEmptyStringUrl() | ||
{ | ||
var routes = new RouteCollection(); | ||
MvcApplication.RegisterRoutes(routes); | ||
|
||
var request = new Mock<HttpRequestBase>(MockBehavior.Strict); | ||
request.SetupGet(x => x.ApplicationPath).Returns("/"); | ||
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/Home", UriKind.Absolute)); | ||
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection()); | ||
|
||
var response = new Mock<HttpResponseBase>(MockBehavior.Strict); | ||
response.Setup(x => x.ApplyAppPathModifier("/Home")).Returns("http://localhost/Home"); | ||
|
||
var context = new Mock<HttpContextBase>(MockBehavior.Strict); | ||
context.SetupGet(x => x.Request).Returns(request.Object); | ||
context.SetupGet(x => x.Response).Returns(response.Object); | ||
|
||
var controller = new AccountController(null, null, null); | ||
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller); | ||
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes); | ||
|
||
var service = CreateService(); | ||
var result = service.IsRedirectable(controller, string.Empty); | ||
Expect(result, Is.False); | ||
} | ||
|
||
[Test] | ||
public void ShouldReturnFalseForUrlNotBeginingWithForwardSlash() | ||
{ | ||
var routes = new RouteCollection(); | ||
MvcApplication.RegisterRoutes(routes); | ||
|
||
var request = new Mock<HttpRequestBase>(MockBehavior.Strict); | ||
request.SetupGet(x => x.ApplicationPath).Returns("/"); | ||
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/Home", UriKind.Absolute)); | ||
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection()); | ||
|
||
var response = new Mock<HttpResponseBase>(MockBehavior.Strict); | ||
response.Setup(x => x.ApplyAppPathModifier("/Home")).Returns("http://localhost/Home"); | ||
|
||
var context = new Mock<HttpContextBase>(MockBehavior.Strict); | ||
context.SetupGet(x => x.Request).Returns(request.Object); | ||
context.SetupGet(x => x.Response).Returns(response.Object); | ||
|
||
var controller = new AccountController(null, null, null); | ||
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller); | ||
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes); | ||
|
||
var service = CreateService(); | ||
var result = service.IsRedirectable(controller, "muppet"); | ||
Expect(result, Is.False); | ||
} | ||
|
||
[Test] | ||
public void ShouldReturnFalseForUrlBeginingWithDoubleForwardSlash() | ||
{ | ||
var routes = new RouteCollection(); | ||
MvcApplication.RegisterRoutes(routes); | ||
|
||
var request = new Mock<HttpRequestBase>(MockBehavior.Strict); | ||
request.SetupGet(x => x.ApplicationPath).Returns("/"); | ||
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/Home", UriKind.Absolute)); | ||
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection()); | ||
|
||
var response = new Mock<HttpResponseBase>(MockBehavior.Strict); | ||
response.Setup(x => x.ApplyAppPathModifier("/Home")).Returns("http://localhost/Home"); | ||
|
||
var context = new Mock<HttpContextBase>(MockBehavior.Strict); | ||
context.SetupGet(x => x.Request).Returns(request.Object); | ||
context.SetupGet(x => x.Response).Returns(response.Object); | ||
|
||
var controller = new AccountController(null, null, null); | ||
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller); | ||
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes); | ||
|
||
var service = CreateService(); | ||
var result = service.IsRedirectable(controller, "//muppet"); | ||
Expect(result, Is.False); | ||
} | ||
} | ||
} |
191 changes: 191 additions & 0 deletions
191
src/GiveCRM.Web.Tests/controllers/AccountController.Tests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
using System.Globalization; | ||
using System.Web.Mvc; | ||
using GiveCRM.Web.Controllers; | ||
using GiveCRM.Web.Models; | ||
using GiveCRM.Web.Services; | ||
using Moq; | ||
using MvcContrib.TestHelper; | ||
using NUnit.Framework; | ||
|
||
namespace GiveCRM.Web.Tests.controllers | ||
{ | ||
[TestFixture] | ||
public class AccountControllerTests:AssertionHelper | ||
{ | ||
private Mock<IMembershipService> mockMembershipService; | ||
private Mock<IAuthenticationService> mockAuthenticationService; | ||
private Mock<IUrlValidationService> mockUrlValidationService; | ||
|
||
[SetUp] | ||
public void SetUp() | ||
{ | ||
mockMembershipService = new Mock<IMembershipService>(); | ||
mockAuthenticationService = new Mock<IAuthenticationService>(); | ||
mockUrlValidationService = new Mock<IUrlValidationService>(); | ||
} | ||
|
||
private AccountController CreateController() | ||
{ | ||
return new AccountController(mockMembershipService.Object, | ||
mockAuthenticationService.Object, | ||
mockUrlValidationService.Object); | ||
} | ||
|
||
[Test] | ||
public void ShouldLogOnUserAndRedirectToHome() | ||
{ | ||
var controller = CreateController(); | ||
|
||
|
||
mockMembershipService.Setup(ms=>ms.ValidateUser("test","password")).Returns(true); | ||
mockUrlValidationService.Setup(uvs=>uvs.IsRedirectable(controller,"")).Returns(false); | ||
|
||
|
||
var model = new LogOnModel(); | ||
model.UserName = "test"; | ||
model.Password = "password"; | ||
var url = string.Empty; | ||
|
||
var actionResult = controller.LogOn(model, url); | ||
Expect(controller.ModelState.IsValid, Is.True); | ||
actionResult.AssertActionRedirect(); | ||
} | ||
|
||
[Test] | ||
public void ShouldLogOnUserAndRedirectToUrl() | ||
{ | ||
var controller = CreateController(); | ||
|
||
mockMembershipService.Setup(ms => ms.ValidateUser("test", "password")).Returns(true); | ||
mockUrlValidationService.Setup(uvs => uvs.IsRedirectable(controller, "testurl")).Returns(true); | ||
|
||
var model = new LogOnModel(); | ||
model.UserName = "test"; | ||
model.Password = "password"; | ||
var url = "testurl"; | ||
|
||
var actionResult = controller.LogOn(model, url); | ||
Expect(controller.ModelState.IsValid, Is.True); | ||
Expect(actionResult.AssertHttpRedirect().Url, Is.EqualTo(url)); | ||
actionResult.AssertHttpRedirect(); | ||
} | ||
|
||
[Test] | ||
public void ShouldNotLogOnForIncorrectCredentials() | ||
{ | ||
var controller = CreateController(); | ||
|
||
mockMembershipService.Setup(ms => ms.ValidateUser("test", "password")).Returns(false); | ||
|
||
var model = new LogOnModel(); | ||
model.UserName = "test"; | ||
model.Password = "password"; | ||
var url = string.Empty; | ||
|
||
var actionResult = controller.LogOn(model, url); | ||
Expect(controller.ModelState.IsValid, Is.False); | ||
Expect(controller.ModelState[""].Errors.Count,Is.EqualTo(1)); | ||
Expect(controller.ModelState[""].Errors[0].ErrorMessage,Is.EqualTo("The user name or password provided is incorrect.")); | ||
actionResult.AssertViewRendered().WithViewData<LogOnModel>(); | ||
} | ||
|
||
[Test] | ||
public void ShouldLogOff() | ||
{ | ||
mockAuthenticationService.Setup(a => a.SignOut()).Verifiable(); | ||
var controller = CreateController(); | ||
var actionResult = controller.LogOff(); | ||
mockAuthenticationService.Verify(); | ||
actionResult.AssertActionRedirect(); | ||
} | ||
|
||
[Test] | ||
public void ShouldRegister() | ||
{ | ||
var error = string.Empty; | ||
mockMembershipService.Setup(s => s.CreateUser("test", "password", "a@a.a", out error)).Returns(true); | ||
var controller = CreateController(); | ||
var model = new RegisterModel | ||
{ | ||
UserName = "test", | ||
Password ="password", | ||
Email = "a@a.a" | ||
}; | ||
var actionResult = controller.Register(model); | ||
actionResult.AssertActionRedirect(); | ||
} | ||
|
||
[Test] | ||
public void ShouldFailToRegister() | ||
{ | ||
var error = string.Empty; | ||
mockMembershipService.Setup(s => s.CreateUser("test", "password", "a@a.a", out error)).Returns(false); | ||
var controller = CreateController(); | ||
var model = new RegisterModel | ||
{ | ||
UserName = "test", | ||
Password = "password", | ||
Email = "a@a.a" | ||
}; | ||
var actionResult = controller.Register(model); | ||
actionResult.AssertViewRendered().WithViewData<RegisterModel>(); | ||
} | ||
|
||
[Test] | ||
public void ShouldChangePassword() | ||
{ | ||
var model = new ChangePasswordModel | ||
{ | ||
NewPassword = "Slartibartfast", | ||
OldPassword = "password", | ||
ConfirmPassword = "Slartibartfast" | ||
}; | ||
|
||
mockMembershipService.Setup(s => s.ChangePassword(It.IsAny<string>(),"password","Slartibartfast")).Returns(true); | ||
|
||
var controller = CreateController(); | ||
|
||
var actionResult = controller.ChangePassword(model); | ||
Expect(controller.ModelState.IsValid,Is.True); | ||
actionResult.AssertActionRedirect(); | ||
} | ||
|
||
[Test] | ||
public void ShouldNotChangePasswordInvalidModel() | ||
{ | ||
var model = new ChangePasswordModel | ||
{ | ||
NewPassword = "Slartibartfast", | ||
OldPassword = "password", | ||
ConfirmPassword = "ZaphodBeeblebrox" | ||
}; | ||
|
||
var controller = CreateController(); | ||
controller.ModelState.AddModelError("NewPassword","The new password and confirmation password do not match."); | ||
|
||
var actionResult = controller.ChangePassword(model); | ||
Expect(controller.ViewData.ModelState.IsValid, Is.False); | ||
actionResult.AssertViewRendered().WithViewData<ChangePasswordModel>(); | ||
} | ||
|
||
[Test] | ||
public void ShouldNotChangePasswordIFailForChangePassword() | ||
{ | ||
var model = new ChangePasswordModel | ||
{ | ||
NewPassword = "Slartibartfast", | ||
OldPassword = "password", | ||
ConfirmPassword = "Slartibartfast" | ||
}; | ||
|
||
mockMembershipService.Setup(s => s.ChangePassword(It.IsAny<string>(), "password", "Slartibartfast")).Returns(false); | ||
var controller = CreateController(); | ||
|
||
var actionResult = controller.ChangePassword(model); | ||
Expect(controller.ViewData.ModelState.IsValid, Is.False); | ||
Expect(controller.ModelState[""].Errors.Count,Is.EqualTo(1)); | ||
Expect(controller.ModelState[""].Errors[0].ErrorMessage, Is.EqualTo("The current password is incorrect or the new password is invalid.")); | ||
actionResult.AssertViewRendered().WithViewData<ChangePasswordModel>(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
Oops, something went wrong.