mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00

Implements symetric encoding/decoding services based on a per-tenant key generated randomly during setup in the ShellSettings. Replaces MachineKey.Encode/Decode usages. Adding ComputedField to wrap get/set calls from parts, making the Smtp password encrypted in the db automatically. --HG-- branch : dev
172 lines
7.5 KiB
C#
172 lines
7.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Web;
|
|
using System.Web.Mvc;
|
|
using System.Web.Routing;
|
|
using System.Xml.Linq;
|
|
using Autofac;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using Orchard.Caching;
|
|
using Orchard.ContentManagement.MetaData;
|
|
using Orchard.ContentManagement.MetaData.Models;
|
|
using Orchard.ContentManagement.MetaData.Services;
|
|
using Orchard.Core.Settings.Metadata;
|
|
using Orchard.Data;
|
|
using Orchard.DisplayManagement;
|
|
using Orchard.DisplayManagement.Descriptors;
|
|
using Orchard.DisplayManagement.Implementation;
|
|
using Orchard.Environment;
|
|
using Orchard.ContentManagement;
|
|
using Orchard.ContentManagement.Handlers;
|
|
using Orchard.ContentManagement.Records;
|
|
using Orchard.Environment.Extensions;
|
|
using Orchard.Localization;
|
|
using Orchard.Messaging.Events;
|
|
using Orchard.Messaging.Services;
|
|
using Orchard.Security;
|
|
using Orchard.Security.Permissions;
|
|
using Orchard.Security.Providers;
|
|
using Orchard.Tests.Stubs;
|
|
using Orchard.UI.Notify;
|
|
using Orchard.Users.Controllers;
|
|
using Orchard.Users.Handlers;
|
|
using Orchard.Users.Models;
|
|
using Orchard.Users.Services;
|
|
using Orchard.Users.ViewModels;
|
|
using Orchard.Settings;
|
|
using Orchard.Core.Settings.Services;
|
|
using Orchard.Environment.Configuration;
|
|
|
|
namespace Orchard.Tests.Modules.Users.Controllers {
|
|
[TestFixture]
|
|
public class AdminControllerTests : DatabaseEnabledTestsBase {
|
|
private AdminController _controller;
|
|
private Mock<IAuthorizer> _authorizer;
|
|
|
|
public override void Register(ContainerBuilder builder) {
|
|
builder.RegisterType<AdminController>().SingleInstance();
|
|
builder.RegisterType<SiteService>().As<ISiteService>();
|
|
builder.RegisterType<StubCacheManager>().As<ICacheManager>();
|
|
builder.RegisterType<DefaultContentManager>().As<IContentManager>();
|
|
builder.RegisterType(typeof(SettingsFormatter))
|
|
.As(typeof(IMapper<XElement, SettingsDictionary>))
|
|
.As(typeof(IMapper<SettingsDictionary, XElement>));
|
|
builder.RegisterType<ContentDefinitionManager>().As<IContentDefinitionManager>();
|
|
builder.RegisterType<DefaultContentManagerSession>().As<IContentManagerSession>();
|
|
builder.RegisterType<DefaultContentQuery>().As<IContentQuery>().InstancePerDependency();
|
|
builder.RegisterType<DefaultMessageManager>().As<IMessageManager>();
|
|
builder.RegisterInstance(new Mock<IMessageEventHandler>().Object);
|
|
builder.RegisterType<MembershipService>().As<IMembershipService>();
|
|
builder.RegisterType<UserService>().As<IUserService>();
|
|
builder.RegisterType<UserPartHandler>().As<IContentHandler>();
|
|
builder.RegisterType<StubWorkContextAccessor>().As<IWorkContextAccessor>();
|
|
builder.RegisterType<OrchardServices>().As<IOrchardServices>();
|
|
builder.RegisterType<TransactionManager>().As<ITransactionManager>();
|
|
builder.RegisterType<DefaultShapeTableManager>().As<IShapeTableManager>();
|
|
builder.RegisterType<DefaultShapeFactory>().As<IShapeFactory>();
|
|
builder.RegisterType<StubExtensionManager>().As<IExtensionManager>();
|
|
builder.RegisterInstance(new Mock<INotifier>().Object);
|
|
builder.RegisterInstance(new Mock<IContentDisplay>().Object);
|
|
builder.RegisterType<StubCacheManager>().As<ICacheManager>();
|
|
builder.RegisterType<Signals>().As<ISignals>();
|
|
builder.RegisterType<DefaultEncryptionService>().As<IEncryptionService>();
|
|
builder.RegisterInstance(ShellSettingsUtility.CreateEncryptionEnabled());
|
|
|
|
_authorizer = new Mock<IAuthorizer>();
|
|
builder.RegisterInstance(_authorizer.Object);
|
|
}
|
|
|
|
protected override IEnumerable<Type> DatabaseTypes {
|
|
get {
|
|
return new[] { typeof(UserPartRecord),
|
|
typeof(ContentTypeRecord),
|
|
typeof(ContentItemRecord),
|
|
typeof(ContentItemVersionRecord),
|
|
};
|
|
}
|
|
}
|
|
|
|
public override void Init() {
|
|
base.Init();
|
|
|
|
var manager = _container.Resolve<IContentManager>();
|
|
|
|
var userOne = manager.New<UserPart>("User");
|
|
userOne.Record = new UserPartRecord { UserName = "one" };
|
|
manager.Create(userOne.ContentItem);
|
|
|
|
var userTwo = manager.New<UserPart>("User");
|
|
userTwo.Record = new UserPartRecord { UserName = "two" };
|
|
manager.Create(userTwo.ContentItem);
|
|
|
|
var userThree = manager.New<UserPart>("User");
|
|
userThree.Record = new UserPartRecord { UserName = "three" };
|
|
manager.Create(userThree.ContentItem);
|
|
|
|
_controller = _container.Resolve<AdminController>();
|
|
|
|
var mockHttpContext = new Mock<HttpContextBase>();
|
|
_controller.ControllerContext = new ControllerContext(
|
|
mockHttpContext.Object,
|
|
new RouteData(
|
|
new Route("foo", new MvcRouteHandler()),
|
|
new MvcRouteHandler()),
|
|
_controller);
|
|
}
|
|
|
|
[Test]
|
|
public void IndexShouldReturnRowsForUsers() {
|
|
_authorizer.Setup(x => x.Authorize(It.IsAny<Permission>(), It.IsAny<LocalizedString>())).Returns(true);
|
|
|
|
var controller = _container.Resolve<AdminController>();
|
|
var result = (ViewResult)controller.Index();
|
|
var model = (UsersIndexViewModel)result.ViewData.Model;
|
|
|
|
Assert.That(model.Rows, Is.Not.Null);
|
|
}
|
|
|
|
|
|
[Test]
|
|
[Ignore("Needs to instead be a specflow test.")]
|
|
public void CreateShouldAddUserAndRedirect() {
|
|
_authorizer.Setup(x => x.Authorize(It.IsAny<Permission>(), It.IsAny<LocalizedString>())).Returns(true);
|
|
|
|
var controller = _container.Resolve<AdminController>();
|
|
ActionResult result = null; // controller.CreatePOST(new UserCreateViewModel {
|
|
// UserName = "four",
|
|
// Email = "six@example.org",
|
|
// Password = "five",
|
|
// ConfirmPassword = "five"
|
|
//});
|
|
Assert.That(result, Is.TypeOf<RedirectToRouteResult>());
|
|
|
|
var redirect = (RedirectToRouteResult)result;
|
|
var id = Convert.ToInt32(redirect.RouteValues["id"]);
|
|
var manager = _container.Resolve<IContentManager>();
|
|
var user = manager.Get(id).As<IUser>();
|
|
Assert.That(user.UserName, Is.EqualTo("four"));
|
|
}
|
|
|
|
[Test]
|
|
[Ignore("Needs fixing. Needs to instead be a specflow test.")]
|
|
public void EditShouldDisplayUserAndStoreChanges() {
|
|
_authorizer.Setup(x => x.Authorize(It.IsAny<Permission>(), It.IsAny<LocalizedString>())).Returns(true);
|
|
|
|
var repository = _container.Resolve<IRepository<UserPartRecord>>();
|
|
var id = repository.Get(x => x.UserName == "two").Id;
|
|
var result = (ViewResult)_container.Resolve<AdminController>().Edit(id);
|
|
var model = (UserEditViewModel)result.ViewData.Model;
|
|
//Assert.That(model.UserName, Is.EqualTo("two"));
|
|
|
|
var controller = _container.Resolve<AdminController>();
|
|
controller.ValueProvider = Values.From(new {
|
|
UserName = "bubba",
|
|
Email = "hotep",
|
|
});
|
|
var result2 = controller.EditPOST(id);
|
|
Assert.That(result2, Is.TypeOf<RedirectToRouteResult>());
|
|
}
|
|
}
|
|
}
|