diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index b00b79813f..fbc96c803b 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -690,7 +690,7 @@ namespace Umbraco.Core.Persistence.Repositories public int CountPublished() { var sql = GetBaseQuery(true).Where(SqlSyntax, x => x.Trashed == false) - .Where(x => x.Published == true); + .Where(SqlSyntax, x => x.Published == true); return Database.ExecuteScalar(sql); } diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs index c715a260ef..93a25d2b57 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs @@ -69,7 +69,7 @@ namespace Umbraco.Core.Persistence.Repositories AddOrUpdate(toMove); //update all descendants, update in order of level - var descendants = GetByQuery(new Query().Where(type => type.Path.StartsWith(toMovePath))); + var descendants = GetByQuery(Query.Where(type => type.Path.StartsWith(toMovePath))); var paths = new Dictionary(); paths[toMove.Id] = toMove.Path; diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs index 39c6184dc2..05dfebc786 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs @@ -199,7 +199,7 @@ namespace Umbraco.Core.Persistence.Repositories .On(SqlSyntax, dto => dto.PropertyTypeId, dto => dto.Id) .InnerJoin(SqlSyntax) .On(SqlSyntax, dto => dto.NodeId, dto => dto.ContentTypeId) - .Where(dto => dto.NodeId == entity.Id); + .Where(SqlSyntax, dto => dto.NodeId == entity.Id); //Delete all cmsPropertyData where propertytypeid EXISTS in the subquery above Database.Execute(SqlSyntax.GetDeleteSubquery("cmsPropertyData", "propertytypeid", sql)); diff --git a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs index 1a9fd21c6b..5bef1a2b5e 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs @@ -364,7 +364,7 @@ AND umbracoNode.id <> @id", //update all descendants from the original path, update in order of level var descendants = this.GetByQuery( - new Query().Where(type => type.Path.StartsWith(origPath + ","))); + Query.Where(type => type.Path.StartsWith(origPath + ","))); var lastParent = toMove; foreach (var descendant in descendants.OrderBy(x => x.Level)) diff --git a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs index 02c2ea72b1..5d553801d3 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs @@ -21,9 +21,12 @@ namespace Umbraco.Core.Persistence.Repositories /// internal class DictionaryRepository : PetaPocoRepositoryBase, IDictionaryRepository { - public DictionaryRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider syntax) - : base(work, cache, logger, syntax) + private readonly IMappingResolver _mappingResolver; + + public DictionaryRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider syntax, IMappingResolver mappingResolver) + : base(work, cache, logger, syntax, mappingResolver) { + _mappingResolver = mappingResolver; } private IRepositoryCachePolicyFactory _cachePolicyFactory; diff --git a/src/Umbraco.Core/Persistence/Repositories/EntityContainerRepository.cs b/src/Umbraco.Core/Persistence/Repositories/EntityContainerRepository.cs index 07ff2a99f2..3e4c2f7ef6 100644 --- a/src/Umbraco.Core/Persistence/Repositories/EntityContainerRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/EntityContainerRepository.cs @@ -21,8 +21,8 @@ namespace Umbraco.Core.Persistence.Repositories { private readonly Guid _containerObjectType; - public EntityContainerRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax, Guid containerObjectType) - : base(work, cache, logger, sqlSyntax) + public EntityContainerRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax, IMappingResolver mappingResolver, Guid containerObjectType) + : base(work, cache, logger, sqlSyntax, mappingResolver) { var allowedContainers = new[] {Constants.ObjectTypes.DocumentTypeContainerGuid, Constants.ObjectTypes.MediaTypeContainerGuid, Constants.ObjectTypes.DataTypeContainerGuid}; _containerObjectType = containerObjectType; @@ -70,7 +70,7 @@ namespace Umbraco.Core.Persistence.Repositories .Where("nodeObjectType=@umbracoObjectTypeId", new { umbracoObjectTypeId = NodeObjectTypeId }) .Where(string.Format("{0} IN (@ids)", SqlSyntax.GetQuotedColumnName("id")), new { ids = @group }); - sql.OrderBy(x => x.Level, SqlSyntax); + sql.OrderBy(SqlSyntax, x => x.Level); return Database.Fetch(sql).Select(CreateEntity); }); diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs index 087e1d6be4..291454d9d3 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs @@ -21,8 +21,8 @@ namespace Umbraco.Core.Persistence.Repositories internal class MemberGroupRepository : PetaPocoRepositoryBase, IMemberGroupRepository { - public MemberGroupRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax) - : base(work, cache, logger, sqlSyntax) + public MemberGroupRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax, IMappingResolver mappingResolver) + : base(work, cache, logger, sqlSyntax, mappingResolver) { } diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs index 33f318b493..172d2f8296 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs @@ -56,7 +56,7 @@ namespace Umbraco.Core.Persistence.Repositories var statement = string.Join(" OR ", ids.Select(x => string.Format("umbracoNode.id='{0}'", x))); sql.Where(statement); } - sql.OrderByDescending(x => x.NodeId, SqlSyntax); + sql.OrderByDescending(SqlSyntax, x => x.NodeId); var dtos = Database.Fetch( @@ -72,7 +72,7 @@ namespace Umbraco.Core.Persistence.Repositories var subquery = translator.Translate(); var sql = GetBaseQuery(false) .Append(new Sql("WHERE umbracoNode.id IN (" + subquery.SQL + ")", subquery.Arguments)) - .OrderBy(x => x.SortOrder, SqlSyntax); + .OrderBy(SqlSyntax, x => x.SortOrder); var dtos = Database.Fetch( diff --git a/src/Umbraco.Core/Persistence/Repositories/PetaPocoRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/PetaPocoRepositoryBase.cs index 5d7cfa48a2..569865e688 100644 --- a/src/Umbraco.Core/Persistence/Repositories/PetaPocoRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/PetaPocoRepositoryBase.cs @@ -20,7 +20,7 @@ namespace Umbraco.Core.Persistence.Repositories { public ISqlSyntaxProvider SqlSyntax { get; private set; } - private QueryFactory _queryFactory; + private readonly QueryFactory _queryFactory; /// /// Returns the Query factory /// diff --git a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs index 5534a9ea40..958eca5816 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs @@ -82,6 +82,16 @@ namespace Umbraco.Core.Persistence.Repositories { } + /// + /// Used to create a new query instance + /// + /// + public abstract Query Query { get; } + + /// + /// Returns a query factory instance + /// + public abstract QueryFactory QueryFactory { get; } protected virtual TId GetEntityId(TEntity entity) { @@ -112,7 +122,7 @@ namespace Umbraco.Core.Persistence.Repositories new RepositoryCachePolicyOptions(() => { //Get count of all entities of current type (TEntity) to ensure cached result is correct - var query = Query.Builder.Where(x => x.Id != 0); + var query = Query.Where(x => x.Id != 0); return PerformCount(query); }))); } diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index b162af53aa..32f5f63d98 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -762,7 +762,7 @@ namespace Umbraco.Core.Persistence.Repositories private bool AliasAlreadExists(ITemplate template) { - var sql = GetBaseQuery(true).Where(x => x.Alias.InvariantEquals(template.Alias) && x.NodeId != template.Id); + var sql = GetBaseQuery(true).Where(SqlSyntax, x => x.Alias.InvariantEquals(template.Alias) && x.NodeId != template.Id); var count = Database.ExecuteScalar(sql); return count > 0; } diff --git a/src/Umbraco.Core/Persistence/RepositoryFactory.cs b/src/Umbraco.Core/Persistence/RepositoryFactory.cs index 3d68174865..fe7c2de754 100644 --- a/src/Umbraco.Core/Persistence/RepositoryFactory.cs +++ b/src/Umbraco.Core/Persistence/RepositoryFactory.cs @@ -184,8 +184,7 @@ namespace Umbraco.Core.Persistence internal virtual EntityContainerRepository CreateEntityContainerRepository(IDatabaseUnitOfWork uow, Guid containerObjectType) { - return _container.GetInstance(uow); - containerObjectType); + return _container.GetInstance(uow); } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/ContentTypeService.cs b/src/Umbraco.Core/Services/ContentTypeService.cs index d69ca85085..bf9c56abec 100644 --- a/src/Umbraco.Core/Services/ContentTypeService.cs +++ b/src/Umbraco.Core/Services/ContentTypeService.cs @@ -618,7 +618,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateContentTypeRepository(UowProvider.GetUnitOfWork())) { - return repository.Count(Query.Builder); + return repository.Count(repository.Query); } } @@ -626,7 +626,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateMediaTypeRepository(UowProvider.GetUnitOfWork())) { - return repository.Count(Query.Builder); + return repository.Count(repository.Query); } } diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index 2fb4ccb0e1..cc5fa44db7 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -310,7 +310,7 @@ namespace Umbraco.Core.Services cache.RuntimeCache)); if (_packagingService == null) - _packagingService = new Lazy(() => new PackagingService(logger, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _macroService.Value, _dataTypeService.Value, _fileService.Value, _localizationService.Value, _entityService.Value, _userService.Value, repositoryFactory, provider)); + _packagingService = new Lazy(() => new PackagingService(logger, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _macroService.Value, _dataTypeService.Value, _fileService.Value, _localizationService.Value, _entityService.Value, _userService.Value, repositoryFactory, provider, urlSegmentProviders)); if (_relationService == null) _relationService = new Lazy(() => new RelationService(provider, repositoryFactory, logger, eventMessagesFactory, _entityService.Value)); diff --git a/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs index ded387c206..86b321c9e3 100644 --- a/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs @@ -328,10 +328,10 @@ namespace Umbraco.Tests.Models.Mapping //return a textbox property editor for any requested editor by alias _propertyEditorResolver.Setup(resolver => resolver.GetByAlias(It.IsAny())) - .Returns(new TextboxPropertyEditor()); + .Returns(new TextboxPropertyEditor(Mock.Of())); //for testing, just return a list of whatever property editors we want _propertyEditorResolver.Setup(resolver => resolver.PropertyEditors) - .Returns(new[] { new TextboxPropertyEditor() }); + .Returns(new[] { new TextboxPropertyEditor(Mock.Of()) }); var memberType = MockedContentTypes.CreateSimpleMemberType(); memberType.MemberTypePropertyTypes[memberType.PropertyTypes.Last().Alias] = new MemberTypePropertyProfileAccess(true, true); @@ -398,10 +398,10 @@ namespace Umbraco.Tests.Models.Mapping //return a textbox property editor for any requested editor by alias _propertyEditorResolver.Setup(resolver => resolver.GetByAlias(It.IsAny())) - .Returns(new TextboxPropertyEditor()); + .Returns(new TextboxPropertyEditor(Mock.Of())); //for testing, just return a list of whatever property editors we want _propertyEditorResolver.Setup(resolver => resolver.PropertyEditors) - .Returns(new[] { new TextboxPropertyEditor() }); + .Returns(new[] { new TextboxPropertyEditor(Mock.Of()) }); var mediaType = MockedContentTypes.CreateImageMediaType(); MockedContentTypes.EnsureAllIds(mediaType, 8888); @@ -741,10 +741,10 @@ namespace Umbraco.Tests.Models.Mapping //return a textbox property editor for any requested editor by alias _propertyEditorResolver.Setup(resolver => resolver.GetByAlias(It.IsAny())) - .Returns(new TextboxPropertyEditor()); + .Returns(new TextboxPropertyEditor(Mock.Of())); //for testing, just return a list of whatever property editors we want _propertyEditorResolver.Setup(resolver => resolver.PropertyEditors) - .Returns(new[] { new TextboxPropertyEditor() }); + .Returns(new[] { new TextboxPropertyEditor(Mock.Of()) }); var ctMain = MockedContentTypes.CreateSimpleMediaType("parent", "Parent"); //not assigned to tab diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index a2fc37ad91..444c50eba1 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -533,7 +533,7 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Commit(); // Act - var contentTypes = repository.GetByQuery(new Query().Where(x => x.ParentId == contentType.Id)); + var contentTypes = repository.GetByQuery(repository.Query.Where(x => x.ParentId == contentType.Id)); // Assert Assert.That(contentTypes.Count(), Is.EqualTo(3)); diff --git a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs index 1ecc094cfe..f0c428473f 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs @@ -27,13 +27,11 @@ namespace Umbraco.Tests.Persistence.Repositories CreateTestData(); } - private DictionaryRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) + private IDictionaryRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) { - var dictionaryRepository = new DictionaryRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), new SqlCeSyntaxProvider()); - return dictionaryRepository; + return Container.GetInstance(unitOfWork); } - [Test] public void Can_Perform_Get_By_Key_On_DictionaryRepository() { @@ -246,7 +244,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - using (var languageRepository = new LanguageRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), SqlSyntax)) + using (var languageRepository = Container.GetInstance(unitOfWork)) using (var repository = CreateRepository(unitOfWork)) { @@ -304,7 +302,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DictionaryRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), new SqlCeSyntaxProvider()); + var repository = CreateRepository(unitOfWork); var languageNo = new Language("nb-NO") { CultureName = "nb-NO" }; ServiceContext.LocalizationService.Save(languageNo); diff --git a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs index 450c69abb4..a2ee0e76c9 100644 --- a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs +++ b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs @@ -1,6 +1,7 @@ using System; using System.Globalization; using System.Linq; +using LightInject; using Moq; using Newtonsoft.Json; using NUnit.Framework; @@ -141,7 +142,7 @@ namespace Umbraco.Tests.PropertyEditors { try { - PropertyValueConvertersResolver.Current = new PropertyValueConvertersResolver(new ActivatorServiceProvider(), Mock.Of()); + PropertyValueConvertersResolver.Current = new PropertyValueConvertersResolver(Mock.Of(), Mock.Of()); Resolution.Freeze(); var dataTypeService = new Mock(); diff --git a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs index eda46d5134..a6be0e7869 100644 --- a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs +++ b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs @@ -374,7 +374,6 @@ namespace Umbraco.Tests.Web.Mvc ServiceContext GetServiceContext() { return MockHelper.GetMockedServiceContext(); - new Mock().Object, } ViewContext GetViewContext() diff --git a/src/Umbraco.Web/UI/Pages/ClientTools.cs b/src/Umbraco.Web/UI/Pages/ClientTools.cs index 058af5a727..ad5c591038 100644 --- a/src/Umbraco.Web/UI/Pages/ClientTools.cs +++ b/src/Umbraco.Web/UI/Pages/ClientTools.cs @@ -262,12 +262,7 @@ namespace Umbraco.Web.UI.Pages RegisterClientScript(string.Format(Scripts.MoveNode, currNodeId, newParentPath)); return this; } - - public string ReloadContentFrameUrlIfPathLoaded(string url) - { - return string.Format(ClientTools.Scripts.ClientMgrScript + ".reloadContentFrameUrlIfPathLoaded('{0}');", url); - } - + /// /// Reloads only the last node that the user interacted with via the context menu. To reload a specify node, use SyncTree. ///