From 07dbc2b136c4ce5033be4677cd972a3ad7ba8191 Mon Sep 17 00:00:00 2001 From: Suha Can Date: Tue, 31 May 2011 18:09:45 -0700 Subject: [PATCH 1/2] #17879: Export a field duplicate settings for all field types The bug was lower in the stack, in ContentDefinitionWriter. So besides Import/Export, the Experimental module was also susceptible to the same. There may still be some loose end related to FieldSettings in general, doesn't seem to be a well explored area. --HG-- branch : 1.x --- .../MetaData/Services/ContentDefinitionWriter.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionWriter.cs b/src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionWriter.cs index 86800dab9..df204433c 100644 --- a/src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionWriter.cs +++ b/src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionWriter.cs @@ -26,7 +26,13 @@ namespace Orchard.ContentManagement.MetaData.Services { var partElement = NewElement(partDefinition.Name, partDefinition.Settings); foreach(var partField in partDefinition.Fields) { var attributeName = partField.Name + "." + partField.FieldDefinition.Name; - var partFieldElement = NewElement(attributeName, partField.Settings); + var fieldSettings = new SettingsDictionary(); + foreach (var partFieldSetting in partField.Settings.Keys) { + if (partFieldSetting.StartsWith(partField.FieldDefinition.Name)) { + fieldSettings.Add(partFieldSetting, partField.Settings[partFieldSetting]); + } + } + var partFieldElement = NewElement(attributeName, fieldSettings); partElement.Add(partFieldElement); } return partElement; From e353220ecfc205d66d48f50e9d83959dc517e878 Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Wed, 1 Jun 2011 01:12:01 -0700 Subject: [PATCH 2/2] Fixing broken UT. --HG-- branch : 1.x --- .../Providers/CommonPartProviderTests.cs | 62 ++++++++++++++++--- .../DefaultContentDisplay.cs | 12 +++- 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/src/Orchard.Core.Tests/Common/Providers/CommonPartProviderTests.cs b/src/Orchard.Core.Tests/Common/Providers/CommonPartProviderTests.cs index b8a19e0e9..dfc37bb07 100644 --- a/src/Orchard.Core.Tests/Common/Providers/CommonPartProviderTests.cs +++ b/src/Orchard.Core.Tests/Common/Providers/CommonPartProviderTests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Web; using System.Web.Routing; using Autofac; using JetBrains.Annotations; @@ -23,13 +24,17 @@ using Orchard.Core.Scheduling.Models; using Orchard.Core.Scheduling.Services; using Orchard.DisplayManagement; using Orchard.DisplayManagement.Descriptors; +using Orchard.DisplayManagement.Descriptors.ShapeAttributeStrategy; +using Orchard.DisplayManagement.Descriptors.ShapePlacementStrategy; using Orchard.DisplayManagement.Implementation; using Orchard.Environment.Extensions; +using Orchard.Environment.Extensions.Models; +using Orchard.FileSystems.VirtualPath; using Orchard.Localization; using Orchard.Security; using Orchard.Tasks.Scheduling; +using Orchard.Tests.DisplayManagement.Descriptors; using Orchard.Tests.Modules; -using Orchard.Core.Common.ViewModels; using System.Web.Mvc; using Orchard.Tests.Stubs; using Orchard.Themes; @@ -48,20 +53,32 @@ namespace Orchard.Core.Tests.Common.Providers { 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.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); - builder.RegisterInstance(new Mock().Object); + builder.RegisterType().As(); builder.RegisterInstance(new Mock().Object); - builder.RegisterInstance(new Mock().Object); + + builder.RegisterInstance(new RequestContext(new StubHttpContext(), new RouteData())); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); + DefaultShapeTableManagerTests.TestShapeProvider.FeatureShapes = new Dictionary> { + { TestFeature(), new[] { "Parts_Common_Owner_Edit" } } + }; + + builder.RegisterType().As() + .As() + .InstancePerLifetimeScope(); + + builder.RegisterInstance(new RouteCollection()); + builder.RegisterModule(new ShapeAttributeBindingModule()); + _authn = new Mock(); _authz = new Mock(); _membership = new Mock(); @@ -71,6 +88,24 @@ namespace Orchard.Core.Tests.Common.Providers { builder.RegisterInstance(_authz.Object); builder.RegisterInstance(_membership.Object); builder.RegisterInstance(_contentDefinitionManager.Object); + + var virtualPathProviderMock = new Mock(); + virtualPathProviderMock.Setup(a => a.ToAppRelative(It.IsAny())).Returns("~/yadda"); + + builder.RegisterInstance(virtualPathProviderMock.Object); + } + + static Feature TestFeature() { + return new Feature { + Descriptor = new FeatureDescriptor { + Id = "Testing", + Dependencies = Enumerable.Empty(), + Extension = new ExtensionDescriptor { + Id = "Testing", + ExtensionType = DefaultExtensionTypes.Module, + } + } + }; } protected override IEnumerable DatabaseTypes { @@ -119,9 +154,8 @@ namespace Orchard.Core.Tests.Common.Providers { var user = contentManager.New("User"); _authn.Setup(x => x.GetAuthenticatedUser()).Returns(user); - var createUtc = _clock.UtcNow; var item = contentManager.Create("test-item", VersionOptions.Draft, init => { }); - var viewModel = new OwnerEditorViewModel() { Owner = "User" }; + var viewModel = new OwnerEditorViewModel { Owner = "User" }; updateModel.Setup(x => x.TryUpdateModel(viewModel, "", null, null)).Returns(true); contentManager.UpdateEditor(item.ContentItem, updateModel.Object); } @@ -146,6 +180,16 @@ namespace Orchard.Core.Tests.Common.Providers { } } + class StubThemeService : IThemeManager { + private readonly ExtensionDescriptor _theme = new ExtensionDescriptor { + Id = "SafeMode", + Name = "SafeMode", + Location = "~/Themes", + }; + + public ExtensionDescriptor GetRequestTheme(RequestContext requestContext) { return _theme; } + } + [Test] public void PublishingShouldNotThrowExceptionIfOwnerIsNull() { var contentManager = _container.Resolve(); @@ -177,9 +221,13 @@ namespace Orchard.Core.Tests.Common.Providers { var updater = new UpdatModelStub() { Owner = "" }; + _container.Resolve().Discover = + b => b.Describe("Parts_Common_Owner_Edit").From(TestFeature()) + .Placement(ShapePlacementParsingStrategy.BuildPredicate(c => true, new KeyValuePair("Path", "~/yadda")), new PlacementInfo { Location = "Match" }); + contentManager.UpdateEditor(item.ContentItem, updater); - Assert.That(updater.ModelErrors.ContainsKey("CommonPart.Owner"), Is.True); + Assert.That(updater.ModelErrors.ContainsKey("OwnerEditor.Owner"), Is.True); } [Test] diff --git a/src/Orchard/ContentManagement/DefaultContentDisplay.cs b/src/Orchard/ContentManagement/DefaultContentDisplay.cs index ba049b3ca..dccd0c448 100644 --- a/src/Orchard/ContentManagement/DefaultContentDisplay.cs +++ b/src/Orchard/ContentManagement/DefaultContentDisplay.cs @@ -6,6 +6,7 @@ using ClaySharp.Implementation; using Orchard.ContentManagement.Handlers; using Orchard.DisplayManagement; using Orchard.DisplayManagement.Descriptors; +using Orchard.FileSystems.VirtualPath; using Orchard.Logging; using Orchard.Themes; using Orchard.UI.Zones; @@ -17,18 +18,23 @@ namespace Orchard.ContentManagement { private readonly IShapeTableManager _shapeTableManager; private readonly Lazy _themeService; private readonly RequestContext _requestContext; + private readonly IVirtualPathProvider _virtualPathProvider; public DefaultContentDisplay( Lazy> handlers, IShapeFactory shapeFactory, IShapeTableManager shapeTableManager, Lazy themeService, - RequestContext requestContext) { + RequestContext requestContext, + IVirtualPathProvider virtualPathProvider) { + _handlers = handlers; _shapeFactory = shapeFactory; _shapeTableManager = shapeTableManager; _themeService = themeService; _requestContext = requestContext; + _virtualPathProvider = virtualPathProvider; + Logger = NullLogger.Instance; } @@ -111,11 +117,11 @@ namespace Orchard.ContentManagement { Stereotype = stereotype, DisplayType = displayType, Differentiator = differentiator, - Path = VirtualPathUtility.AppendTrailingSlash(VirtualPathUtility.ToAppRelative(request.Path)) // get the current app-relative path, i.e. ~/my-blog/foo + Path = VirtualPathUtility.AppendTrailingSlash(_virtualPathProvider.ToAppRelative(request.Path)) // get the current app-relative path, i.e. ~/my-blog/foo }; var placement = descriptor.Placement(placementContext); - if(placement != null) { + if (placement != null) { placement.Source = placementContext.Source; return placement; }