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.ContentManagement.MetaData; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.MetaData.Services; using Orchard.Core.Messaging.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.Localization; using Orchard.Messaging.Events; using Orchard.Messaging.Services; using Orchard.Security; using Orchard.Security.Permissions; using Orchard.UI.Notify; using Orchard.Users.Controllers; using Orchard.Users.Handlers; using Orchard.Users.Models; using Orchard.Users.Services; using Orchard.Users.ViewModels; namespace Orchard.Tests.Modules.Users.Controllers { [TestFixture] public class AdminControllerTests : DatabaseEnabledTestsBase { private AdminController _controller; private Mock _authorizer; public override void Register(ContainerBuilder builder) { builder.RegisterType().SingleInstance(); builder.RegisterType().As(); builder.RegisterType(typeof(SettingsFormatter)) .As(typeof(IMapper)) .As(typeof(IMapper)); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As().InstancePerDependency(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); _authorizer = new Mock(); builder.RegisterInstance(_authorizer.Object); } protected override IEnumerable DatabaseTypes { get { return new[] { typeof(UserPartRecord), typeof(ContentTypeRecord), typeof(ContentItemRecord), typeof(ContentItemVersionRecord), }; } } public override void Init() { base.Init(); var manager = _container.Resolve(); var userOne = manager.New("User"); userOne.Record = new UserPartRecord { UserName = "one" }; manager.Create(userOne.ContentItem); var userTwo = manager.New("User"); userTwo.Record = new UserPartRecord { UserName = "two" }; manager.Create(userTwo.ContentItem); var userThree = manager.New("User"); userThree.Record = new UserPartRecord { UserName = "three" }; manager.Create(userThree.ContentItem); _controller = _container.Resolve(); var mockHttpContext = new Mock(); _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(), It.IsAny())).Returns(true); var controller = _container.Resolve(); var result = (ViewResult)controller.Index(); var model = (UsersIndexViewModel)result.ViewData.Model; Assert.That(model.Rows, Is.Not.Null); } [Test] public void CreateShouldAddUserAndRedirect() { _authorizer.Setup(x => x.Authorize(It.IsAny(), It.IsAny())).Returns(true); var controller = _container.Resolve(); var result = controller.CreatePOST(new UserCreateViewModel { UserName = "four", Email = "six@example.org", Password = "five", ConfirmPassword = "five" }); Assert.That(result, Is.TypeOf()); var redirect = (RedirectToRouteResult)result; var id = Convert.ToInt32(redirect.RouteValues["id"]); var manager = _container.Resolve(); var user = manager.Get(id).As(); Assert.That(user.UserName, Is.EqualTo("four")); } [Test] public void EditShouldDisplayUserAndStoreChanges() { _authorizer.Setup(x => x.Authorize(It.IsAny(), It.IsAny())).Returns(true); var repository = _container.Resolve>(); var id = repository.Get(x => x.UserName == "two").Id; var result = (ViewResult)_container.Resolve().Edit(id); var model = (UserEditViewModel)result.ViewData.Model; Assert.That(model.UserName, Is.EqualTo("two")); var controller = _container.Resolve(); controller.ValueProvider = Values.From(new { UserName = "bubba", Email = "hotep", }); var result2 = controller.EditPOST(id); Assert.That(result2, Is.TypeOf()); } } }