Files
Umbraco-CMS/src/Umbraco.Tests/Web/Controllers/UsersControllerTests.cs

197 lines
7.9 KiB
C#
Raw Normal View History

2017-09-22 15:23:46 +02:00
using System.Collections.Generic;
2017-09-14 19:29:12 +02:00
using System.Linq;
using System.Net.Http;
using System.Net.Http.Formatting;
2017-09-22 15:23:46 +02:00
using System.Web.Http;
2017-09-14 19:29:12 +02:00
using Moq;
using Newtonsoft.Json;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Cache;
2017-09-14 19:29:12 +02:00
using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
2017-09-14 19:29:12 +02:00
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Persistence;
2017-09-14 19:29:12 +02:00
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
2018-03-16 09:06:44 +01:00
using Umbraco.Core.Persistence.Mappers;
2017-09-19 15:51:47 +02:00
using Umbraco.Core.Persistence.Querying;
2018-03-16 09:06:44 +01:00
using Umbraco.Core.Persistence.SqlSyntax;
2017-09-22 15:23:46 +02:00
using Umbraco.Core.Services;
2017-09-14 19:29:12 +02:00
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.ControllerTesting;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Tests.Testing;
2017-09-22 15:23:46 +02:00
using Umbraco.Web;
2017-09-14 19:29:12 +02:00
using Umbraco.Web.Editors;
2018-03-27 17:59:53 +02:00
using Umbraco.Web.Features;
2017-09-14 19:29:12 +02:00
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
{
2017-09-22 15:23:46 +02:00
protected override void ComposeApplication(bool withApplication)
{
base.ComposeApplication(withApplication);
//if (!withApplication) return;
// replace the true IUserService implementation with a mock
// so that each test can configure the service to their liking
2018-11-29 10:35:16 +01:00
Composition.RegisterUnique(f => Mock.Of<IUserService>());
2017-09-22 15:23:46 +02:00
// kill the true IEntityService too
2018-11-29 10:35:16 +01:00
Composition.RegisterUnique(f => Mock.Of<IEntityService>());
2018-11-29 10:35:16 +01:00
Composition.RegisterUnique<UmbracoFeatures>();
2017-09-22 15:23:46 +02:00
}
2017-09-14 19:29:12 +02:00
[Test]
2017-09-20 20:06:46 +02:00
public async System.Threading.Tasks.Task Save_User()
2017-09-14 19:29:12 +02:00
{
ApiController CtrlFactory(HttpRequestMessage message, UmbracoContext umbracoContext, UmbracoHelper helper)
2017-09-14 19:29:12 +02:00
{
//setup some mocks
Umbraco.Core.Configuration.GlobalSettings.HasSmtpServer = true;
var userServiceMock = Mock.Get(Current.Services.UserService);
userServiceMock.Setup(service => service.Save(It.IsAny<IUser>(), It.IsAny<bool>()))
.Callback((IUser u, bool raiseEvents) =>
{
u.Id = 1234;
});
userServiceMock.Setup(service => service.GetAllUserGroups(It.IsAny<int[]>()))
.Returns(new[] { Mock.Of<IUserGroup>(group => group.Id == 123 && group.Alias == "writers" && group.Name == "Writers") });
userServiceMock.Setup(service => service.GetUserGroupsByAlias(It.IsAny<string[]>()))
.Returns(new[] { Mock.Of<IUserGroup>(group => group.Id == 123 && group.Alias == "writers" && group.Name == "Writers") });
userServiceMock.Setup(service => service.GetUserById(It.IsAny<int>()))
2017-09-22 15:23:46 +02:00
.Returns((int id) => id == 1234 ? new User(1234, "Test", "test@test.com", "test@test.com", "", new List<IReadOnlyUserGroup>(), new int[0], new int[0]) : null);
2017-09-14 19:29:12 +02:00
var usersController = new UsersController(
Factory.GetInstance<IGlobalSettings>(),
umbracoContext,
Factory.GetInstance<ISqlContext>(),
Factory.GetInstance<ServiceContext>(),
Factory.GetInstance<AppCaches>(),
Factory.GetInstance<IProfilingLogger>(),
Factory.GetInstance<IRuntimeState>(),
helper);
2017-09-22 15:23:46 +02:00
return usersController;
}
2017-09-14 19:29:12 +02:00
var userSave = new UserSave
{
Id = 1234,
Email = "test@test.com",
Username = "test@test.com",
Culture = "en",
Name = "Test",
UserGroups = new[] { "writers" }
};
2017-09-22 15:23:46 +02:00
var runner = new TestRunner(CtrlFactory);
2017-09-14 19:29:12 +02:00
var response = await runner.Execute("Users", "PostSaveUser", HttpMethod.Post,
new ObjectContent<UserSave>(userSave, new JsonMediaTypeFormatter()));
var obj = JsonConvert.DeserializeObject<UserDisplay>(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));
}
}
2018-03-16 09:06:44 +01:00
private void MockForGetPagedUsers()
{
Mock.Get(Current.SqlContext)
.Setup(x => x.Query<IUser>())
.Returns(new Query<IUser>(Current.SqlContext));
var syntax = new SqlCeSyntaxProvider();
Mock.Get(Current.SqlContext)
.Setup(x => x.SqlSyntax)
.Returns(syntax);
var mappers = new MapperCollection(new []
{
new UserMapper()
});
Mock.Get(Current.SqlContext)
.Setup(x => x.Mappers)
.Returns(mappers);
}
2017-09-14 19:29:12 +02:00
[Test]
2017-09-20 20:06:46 +02:00
public async System.Threading.Tasks.Task GetPagedUsers_Empty()
2017-09-14 19:29:12 +02:00
{
ApiController CtrlFactory(HttpRequestMessage message, UmbracoContext umbracoContext, UmbracoHelper helper)
2017-09-14 19:29:12 +02:00
{
var usersController = new UsersController(
Factory.GetInstance<IGlobalSettings>(),
umbracoContext,
Factory.GetInstance<ISqlContext>(),
Factory.GetInstance<ServiceContext>(),
Factory.GetInstance<AppCaches>(),
Factory.GetInstance<IProfilingLogger>(),
Factory.GetInstance<IRuntimeState>(),
helper);
2017-09-22 15:23:46 +02:00
return usersController;
}
2018-03-16 09:06:44 +01:00
MockForGetPagedUsers();
var runner = new TestRunner(CtrlFactory);
2017-09-14 19:29:12 +02:00
var response = await runner.Execute("Users", "GetPagedUsers", HttpMethod.Get);
var obj = JsonConvert.DeserializeObject<PagedResult<UserDisplay>>(response.Item2);
Assert.AreEqual(0, obj.TotalItems);
}
[Test]
2017-09-20 20:06:46 +02:00
public async System.Threading.Tasks.Task GetPagedUsers_10()
2017-09-14 19:29:12 +02:00
{
ApiController CtrlFactory(HttpRequestMessage message, UmbracoContext umbracoContext, UmbracoHelper helper)
2017-09-14 19:29:12 +02:00
{
//setup some mocks
var userServiceMock = Mock.Get(Current.Services.UserService);
var users = MockedUser.CreateMulipleUsers(10);
long outVal = 10;
2017-09-19 15:51:47 +02:00
userServiceMock.Setup(service => service.GetAll(
2017-09-22 15:23:46 +02:00
It.IsAny<long>(), It.IsAny<int>(), out outVal, It.IsAny<string>(), It.IsAny<Direction>(),
It.IsAny<UserState[]>(), It.IsAny<string[]>(), It.IsAny<string[]>(), It.IsAny<IQuery<IUser>>()))
2017-09-14 19:29:12 +02:00
.Returns(() => users);
var usersController = new UsersController(
Factory.GetInstance<IGlobalSettings>(),
umbracoContext,
Factory.GetInstance<ISqlContext>(),
Factory.GetInstance<ServiceContext>(),
Factory.GetInstance<AppCaches>(),
Factory.GetInstance<IProfilingLogger>(),
Factory.GetInstance<IRuntimeState>(),
helper);
2017-09-22 15:23:46 +02:00
return usersController;
}
2018-03-16 09:06:44 +01:00
MockForGetPagedUsers();
var runner = new TestRunner(CtrlFactory);
2017-09-14 19:29:12 +02:00
var response = await runner.Execute("Users", "GetPagedUsers", HttpMethod.Get);
var obj = JsonConvert.DeserializeObject<PagedResult<UserDisplay>>(response.Item2);
Assert.AreEqual(10, obj.TotalItems);
Assert.AreEqual(10, obj.Items.Count());
}
}
}