2009-11-10 08:43:28 +00:00
|
|
|
|
using System;
|
2009-11-17 05:52:23 +00:00
|
|
|
|
using System.Web.Security;
|
|
|
|
|
using Autofac;
|
2009-11-10 08:43:28 +00:00
|
|
|
|
using NHibernate;
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
using Orchard.Data;
|
2009-12-21 20:29:53 +00:00
|
|
|
|
using Orchard.ContentManagement;
|
|
|
|
|
using Orchard.ContentManagement.Handlers;
|
|
|
|
|
using Orchard.ContentManagement.Records;
|
2009-11-10 08:43:28 +00:00
|
|
|
|
using Orchard.Security;
|
2010-03-03 23:31:42 -08:00
|
|
|
|
using Orchard.Users.Handlers;
|
2009-11-10 08:43:28 +00:00
|
|
|
|
using Orchard.Users.Models;
|
|
|
|
|
using Orchard.Users.Services;
|
|
|
|
|
|
2010-02-06 01:10:22 -08:00
|
|
|
|
namespace Orchard.Tests.Modules.Users.Services {
|
2009-11-10 08:43:28 +00:00
|
|
|
|
[TestFixture]
|
|
|
|
|
public class MembershipServiceTests {
|
|
|
|
|
private IMembershipService _membershipService;
|
|
|
|
|
private ISessionFactory _sessionFactory;
|
|
|
|
|
private ISession _session;
|
2009-11-17 05:52:23 +00:00
|
|
|
|
private IContainer _container;
|
2009-11-10 08:43:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class TestSessionLocator : ISessionLocator {
|
|
|
|
|
private readonly ISession _session;
|
|
|
|
|
|
|
|
|
|
public TestSessionLocator(ISession session) {
|
|
|
|
|
_session = session;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ISession For(Type entityType) {
|
|
|
|
|
return _session;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestFixtureSetUp]
|
|
|
|
|
public void InitFixture() {
|
|
|
|
|
var databaseFileName = System.IO.Path.GetTempFileName();
|
|
|
|
|
_sessionFactory = DataUtility.CreateSessionFactory(
|
|
|
|
|
databaseFileName,
|
2009-11-11 23:36:29 +00:00
|
|
|
|
typeof(UserRecord),
|
2009-12-30 00:36:35 +00:00
|
|
|
|
typeof(ContentItemVersionRecord),
|
2009-11-19 05:17:02 +00:00
|
|
|
|
typeof(ContentItemRecord),
|
2010-06-04 13:37:34 -07:00
|
|
|
|
typeof(ContentTypeRecord));
|
2009-11-10 08:43:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestFixtureTearDown]
|
|
|
|
|
public void TermFixture() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[SetUp]
|
|
|
|
|
public void Init() {
|
|
|
|
|
var builder = new ContainerBuilder();
|
2010-04-02 15:17:13 -07:00
|
|
|
|
//builder.RegisterModule(new ImplicitCollectionSupportModule());
|
|
|
|
|
builder.RegisterType<MembershipService>().As<IMembershipService>();
|
|
|
|
|
builder.RegisterType<DefaultContentManager>().As<IContentManager>();
|
2010-05-19 13:49:53 -07:00
|
|
|
|
builder.RegisterType<DefaultContentManagerSession>().As<IContentManagerSession>();
|
2010-04-02 15:17:13 -07:00
|
|
|
|
builder.RegisterType<UserHandler>().As<IContentHandler>();
|
2009-11-10 08:43:28 +00:00
|
|
|
|
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
|
|
|
|
|
_session = _sessionFactory.OpenSession();
|
2010-04-02 15:17:13 -07:00
|
|
|
|
builder.RegisterInstance(new TestSessionLocator(_session)).As<ISessionLocator>();
|
2009-11-17 05:52:23 +00:00
|
|
|
|
_container = builder.Build();
|
|
|
|
|
_membershipService = _container.Resolve<IMembershipService>();
|
2009-11-10 08:43:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void CreateUserShouldAllocateModelAndCreateRecords() {
|
|
|
|
|
var user = _membershipService.CreateUser(new CreateUserParams("a", "b", "c", null, null, true));
|
|
|
|
|
Assert.That(user.UserName, Is.EqualTo("a"));
|
|
|
|
|
Assert.That(user.Email, Is.EqualTo("c"));
|
|
|
|
|
}
|
2009-11-17 05:52:23 +00:00
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void DefaultPasswordFormatShouldBeHashedAndHaveSalt() {
|
|
|
|
|
var user = _membershipService.CreateUser(new CreateUserParams("a", "b", "c", null, null, true));
|
|
|
|
|
|
|
|
|
|
var userRepository = _container.Resolve<IRepository<UserRecord>>();
|
|
|
|
|
var userRecord = userRepository.Get(user.Id);
|
|
|
|
|
Assert.That(userRecord.PasswordFormat, Is.EqualTo(MembershipPasswordFormat.Hashed));
|
|
|
|
|
Assert.That(userRecord.Password, Is.Not.EqualTo("b"));
|
|
|
|
|
Assert.That(userRecord.PasswordSalt, Is.Not.Null);
|
|
|
|
|
Assert.That(userRecord.PasswordSalt, Is.Not.Empty);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void SaltAndPasswordShouldBeDifferentEvenWithSameSourcePassword() {
|
|
|
|
|
var user1 = _membershipService.CreateUser(new CreateUserParams("a", "b", "c", null, null, true));
|
|
|
|
|
_session.Flush();
|
|
|
|
|
_session.Clear();
|
|
|
|
|
|
|
|
|
|
var user2 = _membershipService.CreateUser(new CreateUserParams("d", "b", "e", null, null, true));
|
|
|
|
|
_session.Flush();
|
|
|
|
|
_session.Clear();
|
|
|
|
|
|
|
|
|
|
var userRepository = _container.Resolve<IRepository<UserRecord>>();
|
|
|
|
|
var user1Record = userRepository.Get(user1.Id);
|
|
|
|
|
var user2Record = userRepository.Get(user2.Id);
|
|
|
|
|
Assert.That(user1Record.PasswordSalt, Is.Not.EqualTo(user2Record.PasswordSalt));
|
|
|
|
|
Assert.That(user1Record.Password, Is.Not.EqualTo(user2Record.Password));
|
|
|
|
|
|
|
|
|
|
Assert.That(_membershipService.ValidateUser("a", "b"), Is.Not.Null);
|
|
|
|
|
Assert.That(_membershipService.ValidateUser("d", "b"), Is.Not.Null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void ValidateUserShouldReturnNullIfUserOrPasswordIsIncorrect() {
|
|
|
|
|
_membershipService.CreateUser(new CreateUserParams("test-user", "test-password", "c", null, null, true));
|
|
|
|
|
_session.Flush();
|
|
|
|
|
_session.Clear();
|
|
|
|
|
|
|
|
|
|
var validate1 = _membershipService.ValidateUser("test-user", "bad-password");
|
|
|
|
|
var validate2 = _membershipService.ValidateUser("bad-user", "test-password");
|
|
|
|
|
var validate3 = _membershipService.ValidateUser("test-user", "test-password");
|
|
|
|
|
|
|
|
|
|
Assert.That(validate1, Is.Null);
|
|
|
|
|
Assert.That(validate2, Is.Null);
|
|
|
|
|
Assert.That(validate3, Is.Not.Null);
|
|
|
|
|
}
|
2009-11-10 08:43:28 +00:00
|
|
|
|
}
|
|
|
|
|
}
|