using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Net.Http.Formatting; using Microsoft.AspNet.Identity; using Moq; using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Composing; using Umbraco.Core.Models; using Umbraco.Core.Models.Identity; using Umbraco.Core.Models.Membership; using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Security; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.ControllerTesting; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; using Umbraco.Web.Editors; using Umbraco.Web.Models.ContentEditing; using IUser = Umbraco.Core.Models.Membership.IUser; namespace Umbraco.Tests.Web.Controllers { [TestFixture] [UmbracoTest(Database = UmbracoTestOptions.Database.None)] public class UsersControllerTests : TestWithDatabaseBase { [Test] public async void Save_User() { var runner = new TestRunner((message, helper) => { //setup some mocks Umbraco.Core.Configuration.GlobalSettings.HasSmtpServer = true; var userServiceMock = Mock.Get(Current.Services.UserService); userServiceMock.Setup(service => service.Save(It.IsAny(), It.IsAny())) .Callback((IUser u, bool raiseEvents) => { u.Id = 1234; }); userServiceMock.Setup(service => service.GetAllUserGroups(It.IsAny())) .Returns(new[] { Mock.Of(group => group.Id == 123 && group.Alias == "writers" && group.Name == "Writers") }); userServiceMock.Setup(service => service.GetUserGroupsByAlias(It.IsAny())) .Returns(new[] { Mock.Of(group => group.Id == 123 && group.Alias == "writers" && group.Name == "Writers") }); userServiceMock.Setup(service => service.GetUserById(It.IsAny())) .Returns(new User(1234, "Test", "test@test.com", "test@test.com", "", new List(), new int[0], new int[0])); //we need to manually apply automapper mappings with the mocked applicationcontext //InitializeMappers(helper.UmbracoContext.Application); InitializeAutoMapper(true); return new UsersController(); }); var userSave = new UserSave { Id = 1234, Email = "test@test.com", Username = "test@test.com", Culture = "en", Name = "Test", UserGroups = new[] { "writers" } }; var response = await runner.Execute("Users", "PostSaveUser", HttpMethod.Post, new ObjectContent(userSave, new JsonMediaTypeFormatter())); var obj = JsonConvert.DeserializeObject(response.Item2); Assert.AreEqual(userSave.Name, obj.Name); Assert.AreEqual(1234, obj.Id); Assert.AreEqual(userSave.Email, obj.Email); var userGroupAliases = obj.UserGroups.Select(x => x.Alias).ToArray(); foreach (var group in userSave.UserGroups) { Assert.IsTrue(userGroupAliases.Contains(group)); } } [Test] public async void GetPagedUsers_Empty() { var runner = new TestRunner((message, helper) => { //we need to manually apply automapper mappings with the mocked applicationcontext //InitializeMappers(helper.UmbracoContext.Application); InitializeAutoMapper(true); return new UsersController(); }); var response = await runner.Execute("Users", "GetPagedUsers", HttpMethod.Get); var obj = JsonConvert.DeserializeObject>(response.Item2); Assert.AreEqual(0, obj.TotalItems); } [Test] public async void GetPagedUsers_10() { var runner = new TestRunner((message, helper) => { //setup some mocks var userServiceMock = Mock.Get(Current.Services.UserService); var users = MockedUser.CreateMulipleUsers(10); long outVal = 10; userServiceMock.Setup(service => service.GetAll(It.IsAny(), It.IsAny(), out outVal, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(() => users); //we need to manually apply automapper mappings with the mocked applicationcontext //InitializeMappers(helper.UmbracoContext.Application); InitializeAutoMapper(true); return new UsersController(); }); var response = await runner.Execute("Users", "GetPagedUsers", HttpMethod.Get); var obj = JsonConvert.DeserializeObject>(response.Item2); Assert.AreEqual(10, obj.TotalItems); Assert.AreEqual(10, obj.Items.Count()); } } }