diff --git a/src/Umbraco.Infrastructure/Services/Implement/PropertyValidationService.cs b/src/Umbraco.Infrastructure/Services/Implement/PropertyValidationService.cs index a17cdb034d..c08c1322d3 100644 --- a/src/Umbraco.Infrastructure/Services/Implement/PropertyValidationService.cs +++ b/src/Umbraco.Infrastructure/Services/Implement/PropertyValidationService.cs @@ -21,7 +21,6 @@ namespace Umbraco.Core.Services _textService = textService; } - public IEnumerable ValidatePropertyValue( IPropertyType propertyType, object postedValue) diff --git a/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs index 9f30005c55..283b2b6c04 100644 --- a/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs @@ -30,6 +30,7 @@ namespace Umbraco.Tests.Common.Builders private GenericDictionaryBuilder _propertyDataBuilder; private int? _id; + private int? _versionId; private Guid? _key; private DateTime? _createDate; private DateTime? _updateDate; @@ -48,12 +49,10 @@ namespace Umbraco.Tests.Common.Builders private string _propertyValuesCulture; private string _propertyValuesSegment; - public ContentTypeBuilder AddContentType() + public ContentBuilder WithVersionId(int versionId) { - _contentType = null; - var builder = new ContentTypeBuilder(this); - _contentTypeBuilder = builder; - return builder; + _versionId = versionId; + return this; } public ContentBuilder WithParent(IContent parent) @@ -87,6 +86,14 @@ namespace Umbraco.Tests.Common.Builders return this; } + public ContentTypeBuilder AddContentType() + { + _contentType = null; + var builder = new ContentTypeBuilder(this); + _contentTypeBuilder = builder; + return builder; + } + public GenericDictionaryBuilder AddPropertyData() { var builder = new GenericDictionaryBuilder(this); @@ -97,6 +104,7 @@ namespace Umbraco.Tests.Common.Builders public override Content Build() { var id = _id ?? 0; + var versionId = _versionId ?? 0; var key = _key ?? Guid.NewGuid(); var parentId = _parentId ?? -1; var parent = _parent ?? null; @@ -131,6 +139,7 @@ namespace Umbraco.Tests.Common.Builders } content.Id = id; + content.VersionId = versionId; content.Key = key; content.CreateDate = createDate; content.UpdateDate = updateDate; diff --git a/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs index eb4192364f..fca148f542 100644 --- a/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs @@ -20,6 +20,7 @@ namespace Umbraco.Tests.Common.Builders private int? _propertyTypeIdsIncrementingFrom; private int? _defaultTemplateId; private ContentVariation? _contentVariation; + private PropertyTypeCollection _propertyTypeCollection; public ContentTypeBuilder() : base(null) { @@ -41,6 +42,12 @@ namespace Umbraco.Tests.Common.Builders return this; } + public ContentTypeBuilder WithPropertyTypeCollection(PropertyTypeCollection propertyTypeCollection) + { + _propertyTypeCollection = propertyTypeCollection; + return this; + } + public PropertyGroupBuilder AddPropertyGroup() { var builder = new PropertyGroupBuilder(this); @@ -104,9 +111,21 @@ namespace Umbraco.Tests.Common.Builders contentType.Variations = contentVariation; - contentType.NoGroupPropertyTypes = _noGroupPropertyTypeBuilders.Select(x => x.Build()); - BuildPropertyGroups(contentType, _propertyGroupBuilders.Select(x => x.Build())); - BuildPropertyTypeIds(contentType, _propertyTypeIdsIncrementingFrom); + if (_propertyTypeCollection != null) + { + var propertyGroup = new PropertyGroupBuilder() + .WithName("Content") + .WithSortOrder(1) + .WithPropertyTypeCollection(_propertyTypeCollection) + .Build(); + contentType.PropertyGroups.Add(propertyGroup); + } + else + { + contentType.NoGroupPropertyTypes = _noGroupPropertyTypeBuilders.Select(x => x.Build()); + BuildPropertyGroups(contentType, _propertyGroupBuilders.Select(x => x.Build())); + BuildPropertyTypeIds(contentType, _propertyTypeIdsIncrementingFrom); + } contentType.AllowedContentTypes = _allowedContentTypeBuilders.Select(x => x.Build()); @@ -134,7 +153,7 @@ namespace Umbraco.Tests.Common.Builders public static ContentType CreateSimpleContentType2(string alias, string name, IContentType parent = null, bool randomizeAliases = false, string propertyGroupName = "Content") { - var builder = CreateSimpleContentTypeHelper(alias, name, parent, randomizeAliases, propertyGroupName); + var builder = CreateSimpleContentTypeHelper(alias, name, parent, randomizeAliases: randomizeAliases, propertyGroupName: propertyGroupName); builder.AddPropertyType() .WithAlias(RandomAlias("gen", randomizeAliases)) @@ -146,54 +165,70 @@ namespace Umbraco.Tests.Common.Builders .Done(); return (ContentType)builder.Build(); - }public static ContentType CreateSimpleContentType(string alias = null, string name = null, IContentType parent = null, bool randomizeAliases = false, string propertyGroupName = "Content", bool mandatoryProperties = false, int defaultTemplateId = 0) - { - return (ContentType)CreateSimpleContentTypeHelper(alias, name, parent, randomizeAliases, propertyGroupName, mandatoryProperties, defaultTemplateId).Build(); } - public static ContentTypeBuilder CreateSimpleContentTypeHelper(string alias = null, string name = null, IContentType parent = null, bool randomizeAliases = false, string propertyGroupName = "Content", bool mandatoryProperties = false, int defaultTemplateId = 0) + public static ContentType CreateSimpleContentType(string alias = null, string name = null, IContentType parent = null, PropertyTypeCollection propertyTypeCollection = null, bool randomizeAliases = false, string propertyGroupName = "Content", bool mandatoryProperties = false, int defaultTemplateId = 0) { - return new ContentTypeBuilder() + return (ContentType)CreateSimpleContentTypeHelper(alias, name, parent, propertyTypeCollection, randomizeAliases, propertyGroupName, mandatoryProperties, defaultTemplateId).Build(); + } + + public static ContentTypeBuilder CreateSimpleContentTypeHelper(string alias = null, string name = null, IContentType parent = null, PropertyTypeCollection propertyTypeCollection = null, bool randomizeAliases = false, string propertyGroupName = "Content", bool mandatoryProperties = false, int defaultTemplateId = 0) + { + var builder = new ContentTypeBuilder() .WithAlias(alias ?? "simple") .WithName(name ?? "Simple Page") - .WithParentContentType(parent) - .AddPropertyGroup() - .WithName(propertyGroupName) - .WithSortOrder(1) - .WithSupportsPublishing(true) - .AddPropertyType() - .WithAlias(RandomAlias("title", randomizeAliases)) - .WithName("Title") + .WithParentContentType(parent); + + if (propertyTypeCollection != null) + { + builder = builder + .WithPropertyTypeCollection(propertyTypeCollection); + } + else + { + builder = builder + .AddPropertyGroup() + .WithName(propertyGroupName) .WithSortOrder(1) - .WithMandatory(mandatoryProperties) - .Done() - .AddPropertyType() - .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.TinyMce) - .WithValueStorageType(ValueStorageType.Ntext) - .WithAlias(RandomAlias("bodyText", randomizeAliases)) - .WithName("Body text") - .WithSortOrder(2) - .WithDataTypeId(Constants.DataTypes.RichtextEditor) - .WithMandatory(mandatoryProperties) - .Done() - .AddPropertyType() - .WithAlias(RandomAlias("author", randomizeAliases)) - .WithName("Author") - .WithSortOrder(3) - .WithMandatory(mandatoryProperties) - .Done() + .WithSupportsPublishing(true) + .AddPropertyType() + .WithAlias(RandomAlias("title", randomizeAliases)) + .WithName("Title") + .WithSortOrder(1) + .WithMandatory(mandatoryProperties) + .Done() + .AddPropertyType() + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.TinyMce) + .WithValueStorageType(ValueStorageType.Ntext) + .WithAlias(RandomAlias("bodyText", randomizeAliases)) + .WithName("Body text") + .WithSortOrder(2) + .WithDataTypeId(Constants.DataTypes.RichtextEditor) + .WithMandatory(mandatoryProperties) + .Done() + .AddPropertyType() + .WithAlias(RandomAlias("author", randomizeAliases)) + .WithName("Author") + .WithSortOrder(3) + .WithMandatory(mandatoryProperties) + .Done() + .Done(); + } + + builder = builder + .AddAllowedTemplate() + .WithId(defaultTemplateId) + .WithAlias("textPage") + .WithName("Textpage") .Done() - .AddAllowedTemplate() - .WithId(defaultTemplateId) - .WithAlias("textPage") - .WithName("Textpage") - .Done() - .WithDefaultTemplateId(defaultTemplateId); + .WithDefaultTemplateId(defaultTemplateId); + + return builder; } public static ContentType CreateSimpleTagsContentType(string alias, string name, IContentType parent = null, bool randomizeAliases = false, string propertyGroupName = "Content", int defaultTemplateId = 1) { - var contentType = CreateSimpleContentType(alias, name, parent, randomizeAliases, propertyGroupName, defaultTemplateId: defaultTemplateId); + var contentType = CreateSimpleContentType(alias, name, parent, randomizeAliases: randomizeAliases, propertyGroupName: propertyGroupName, defaultTemplateId: defaultTemplateId); var propertyType = new PropertyTypeBuilder() .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Tags) @@ -215,7 +250,6 @@ namespace Umbraco.Tests.Common.Builders .WithAlias(alias) .WithName(name) .AddPropertyGroup() - .WithId(1) .WithName("Content") .WithSortOrder(1) .WithSupportsPublishing(true) @@ -234,7 +268,6 @@ namespace Umbraco.Tests.Common.Builders .Done() .Done() .AddPropertyGroup() - .WithId(2) .WithName("Meta") .WithSortOrder(2) .WithSupportsPublishing(true) diff --git a/src/Umbraco.Tests.Common/Builders/PropertyBuilder.cs b/src/Umbraco.Tests.Common/Builders/PropertyBuilder.cs index 6cb7a431f2..a79141b11c 100644 --- a/src/Umbraco.Tests.Common/Builders/PropertyBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/PropertyBuilder.cs @@ -18,9 +18,18 @@ namespace Umbraco.Tests.Common.Builders private Guid? _key; private DateTime? _createDate; private DateTime? _updateDate; + private IPropertyType _propertyType; + + public PropertyBuilder WithPropertyType(IPropertyType propertyType) + { + _propertyTypeBuilder = null; + _propertyType = propertyType; + return this; + } public PropertyTypeBuilder AddPropertyType() { + _propertyType = null; var builder = new PropertyTypeBuilder(this); _propertyTypeBuilder = builder; return builder; @@ -33,8 +42,15 @@ namespace Umbraco.Tests.Common.Builders var createDate = _createDate ?? DateTime.Now; var updateDate = _updateDate ?? DateTime.Now; + if (_propertyTypeBuilder is null && _propertyType is null) + { + throw new InvalidOperationException("A property cannot be constructed without providing a property type. Use AddPropertyType() or WithPropertyType()."); + } + + var propertyType = _propertyType ?? _propertyTypeBuilder.Build(); + // Needs to be within collection to support publishing. - var propertyTypeCollection = new PropertyTypeCollection(true, new[] { _propertyTypeBuilder.Build() }); + var propertyTypeCollection = new PropertyTypeCollection(true, new[] { propertyType }); return new Property(id, propertyTypeCollection[0]) { diff --git a/src/Umbraco.Tests.Common/Builders/PropertyGroupBuilder.cs b/src/Umbraco.Tests.Common/Builders/PropertyGroupBuilder.cs index f153283764..8fe6e1463d 100644 --- a/src/Umbraco.Tests.Common/Builders/PropertyGroupBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/PropertyGroupBuilder.cs @@ -37,11 +37,18 @@ namespace Umbraco.Tests.Common.Builders private string _name; private int? _sortOrder; private bool? _supportsPublishing; + private PropertyTypeCollection _propertyTypeCollection; public PropertyGroupBuilder(TParent parentBuilder) : base(parentBuilder) { } + public PropertyGroupBuilder WithPropertyTypeCollection(PropertyTypeCollection propertyTypeCollection) + { + _propertyTypeCollection = propertyTypeCollection; + return this; + } + public PropertyTypeBuilder> AddPropertyType() { var builder = new PropertyTypeBuilder>(this); @@ -51,7 +58,7 @@ namespace Umbraco.Tests.Common.Builders public override PropertyGroup Build() { - var id = _id ?? 1; + var id = _id ?? 0; var key = _key ?? Guid.NewGuid(); var createDate = _createDate ?? DateTime.Now; var updateDate = _updateDate ?? DateTime.Now; @@ -59,13 +66,21 @@ namespace Umbraco.Tests.Common.Builders var sortOrder = _sortOrder ?? 0; var supportsPublishing = _supportsPublishing ?? false; - var properties = new PropertyTypeCollection(supportsPublishing); - foreach (var propertyType in _propertyTypeBuilders.Select(x => x.Build())) + PropertyTypeCollection propertyTypeCollection; + if (_propertyTypeCollection != null) { - properties.Add(propertyType); + propertyTypeCollection = _propertyTypeCollection; + } + else + { + propertyTypeCollection = new PropertyTypeCollection(supportsPublishing); + foreach (var propertyType in _propertyTypeBuilders.Select(x => x.Build())) + { + propertyTypeCollection.Add(propertyType); + } } - return new PropertyGroup(properties) + return new PropertyGroup(propertyTypeCollection) { Id = id, Key = key, diff --git a/src/Umbraco.Tests.Integration/Mapping/ContentTypeModelMappingTests.cs b/src/Umbraco.Tests.Integration/Mapping/ContentTypeModelMappingTests.cs index 96e49e79e9..929992bf01 100644 --- a/src/Umbraco.Tests.Integration/Mapping/ContentTypeModelMappingTests.cs +++ b/src/Umbraco.Tests.Integration/Mapping/ContentTypeModelMappingTests.cs @@ -756,7 +756,7 @@ namespace Umbraco.Tests.Models.Mapping Alias = "umbracoUrlName", Name = "Slug", Description = "", Mandatory = false, SortOrder = 1, DataTypeId = -88 }); ContentTypeBuilder.EnsureAllIds(ctMain, 8888); - var ctChild1 = ContentTypeBuilder.CreateSimpleContentType("child1", "Child 1", ctMain, true); + var ctChild1 = ContentTypeBuilder.CreateSimpleContentType("child1", "Child 1", ctMain, randomizeAliases: true); ctChild1.AddPropertyType(new PropertyType(ShortStringHelper, Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext) { Alias = "someProperty", @@ -767,7 +767,7 @@ namespace Umbraco.Tests.Models.Mapping DataTypeId = -88 }, "Another tab"); ContentTypeBuilder.EnsureAllIds(ctChild1, 7777); - var contentType = ContentTypeBuilder.CreateSimpleContentType("child2", "Child 2", ctChild1, true, "CustomGroup"); + var contentType = ContentTypeBuilder.CreateSimpleContentType("child2", "Child 2", ctChild1, randomizeAliases: true, propertyGroupName: "CustomGroup"); //not assigned to tab contentType.AddPropertyType(new PropertyType(ShortStringHelper, Constants.PropertyEditors.Aliases.TextBox, ValueStorageType.Ntext) { diff --git a/src/Umbraco.Tests.Integration/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests.Integration/Persistence/Repositories/ContentTypeRepositoryTest.cs index f265519e28..27ecd7a479 100644 --- a/src/Umbraco.Tests.Integration/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests.Integration/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -519,8 +519,8 @@ namespace Umbraco.Tests.Persistence.Repositories { var repository = ContentTypeRepository; var ctMain = ContentTypeBuilder.CreateSimpleContentType(defaultTemplateId:0); - var ctChild1 = ContentTypeBuilder.CreateSimpleContentType("child1", "Child 1", ctMain, true, defaultTemplateId:0); - var ctChild2 = ContentTypeBuilder.CreateSimpleContentType("child2", "Child 2", ctChild1, true, defaultTemplateId:0); + var ctChild1 = ContentTypeBuilder.CreateSimpleContentType("child1", "Child 1", ctMain, randomizeAliases: true, defaultTemplateId: 0); + var ctChild2 = ContentTypeBuilder.CreateSimpleContentType("child2", "Child 2", ctChild1, randomizeAliases: true, defaultTemplateId: 0); repository.Save(ctMain); repository.Save(ctChild1); diff --git a/src/Umbraco.Tests.Integration/Services/ContentTypeServiceTests.cs b/src/Umbraco.Tests.Integration/Services/ContentTypeServiceTests.cs index e7a3f9d066..c04d555579 100644 --- a/src/Umbraco.Tests.Integration/Services/ContentTypeServiceTests.cs +++ b/src/Umbraco.Tests.Integration/Services/ContentTypeServiceTests.cs @@ -358,13 +358,13 @@ namespace Umbraco.Tests.Integration.Services var global = ContentTypeBuilder.CreateSimpleContentType("global", "Global", defaultTemplateId: template.Id); ContentTypeService.Save(global); - var components = ContentTypeBuilder.CreateSimpleContentType("components", "Components", global, true, defaultTemplateId: template.Id); + var components = ContentTypeBuilder.CreateSimpleContentType("components", "Components", global, randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(components); - var component = ContentTypeBuilder.CreateSimpleContentType("component", "Component", components, true, defaultTemplateId: template.Id); + var component = ContentTypeBuilder.CreateSimpleContentType("component", "Component", components, randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(component); - var category = ContentTypeBuilder.CreateSimpleContentType("category", "Category", global, true, defaultTemplateId: template.Id); + var category = ContentTypeBuilder.CreateSimpleContentType("category", "Category", global, randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(category); var success = category.AddContentType(component); @@ -378,10 +378,10 @@ namespace Umbraco.Tests.Integration.Services var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); - var contentType = ContentTypeBuilder.CreateSimpleContentType("page", "Page", null, true, defaultTemplateId: template.Id); + var contentType = ContentTypeBuilder.CreateSimpleContentType("page", "Page", randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(contentType); - var childContentType = ContentTypeBuilder.CreateSimpleContentType("childPage", "Child Page", contentType, true, "Child Content", defaultTemplateId: template.Id); + var childContentType = ContentTypeBuilder.CreateSimpleContentType("childPage", "Child Page", contentType, randomizeAliases: true, propertyGroupName: "Child Content", defaultTemplateId: template.Id); ContentTypeService.Save(childContentType); var content = ContentService.Create("Page 1", -1, childContentType.Alias); ContentService.Save(content); @@ -593,10 +593,10 @@ namespace Umbraco.Tests.Integration.Services var parentContentType1 = ContentTypeBuilder.CreateSimpleContentType("parent1", "Parent1", defaultTemplateId: template.Id); ContentTypeService.Save(parentContentType1); - var parentContentType2 = ContentTypeBuilder.CreateSimpleContentType("parent2", "Parent2", null, true, defaultTemplateId: template.Id); + var parentContentType2 = ContentTypeBuilder.CreateSimpleContentType("parent2", "Parent2", randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(parentContentType2); - var simpleContentType = ContentTypeBuilder.CreateSimpleContentType("category", "Category", parentContentType1, true, defaultTemplateId: template.Id) as IContentType; + var simpleContentType = ContentTypeBuilder.CreateSimpleContentType("category", "Category", parentContentType1, randomizeAliases: true, defaultTemplateId: template.Id) as IContentType; ContentTypeService.Save(simpleContentType); // Act @@ -690,10 +690,10 @@ namespace Umbraco.Tests.Integration.Services var parentContentType1 = ContentTypeBuilder.CreateSimpleContentType("parent1", "Parent1", defaultTemplateId: template.Id); ContentTypeService.Save(parentContentType1); - var parentContentType2 = ContentTypeBuilder.CreateSimpleContentType("parent2", "Parent2", null, true, defaultTemplateId: template.Id); + var parentContentType2 = ContentTypeBuilder.CreateSimpleContentType("parent2", "Parent2", randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(parentContentType2); - var simpleContentType = ContentTypeBuilder.CreateSimpleContentType("category", "Category", parentContentType1, true, defaultTemplateId: template.Id); + var simpleContentType = ContentTypeBuilder.CreateSimpleContentType("category", "Category", parentContentType1, randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(simpleContentType); // Act @@ -733,7 +733,7 @@ namespace Umbraco.Tests.Integration.Services var parent = ContentTypeBuilder.CreateSimpleContentType(defaultTemplateId: template.Id); ContentTypeService.Save(parent); - var child = ContentTypeBuilder.CreateSimpleContentType("simpleChildPage", "Simple Child Page", parent, true, defaultTemplateId: template.Id); + var child = ContentTypeBuilder.CreateSimpleContentType("simpleChildPage", "Simple Child Page", parent, randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(child); var composition = ContentTypeBuilder.CreateMetaContentType(); ContentTypeService.Save(composition); @@ -762,11 +762,11 @@ namespace Umbraco.Tests.Integration.Services var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); - var basePage = ContentTypeBuilder.CreateSimpleContentType("basePage", "Base Page", null, true, defaultTemplateId: template.Id); + var basePage = ContentTypeBuilder.CreateSimpleContentType("basePage", "Base Page", randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(basePage); var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", basePage, defaultTemplateId: template.Id); ContentTypeService.Save(contentPage); - var advancedPage = ContentTypeBuilder.CreateSimpleContentType("advancedPage", "Advanced Page", contentPage, true, defaultTemplateId: template.Id); + var advancedPage = ContentTypeBuilder.CreateSimpleContentType("advancedPage", "Advanced Page", contentPage, randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(advancedPage); var metaComposition = ContentTypeBuilder.CreateMetaContentType(); @@ -1048,11 +1048,11 @@ namespace Umbraco.Tests.Integration.Services var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); - var page = ContentTypeBuilder.CreateSimpleContentType("page", "Page", null, true, "Content", defaultTemplateId: template.Id); + var page = ContentTypeBuilder.CreateSimpleContentType("page", "Page", randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(page); - var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", page, true, "Content_", defaultTemplateId: template.Id); + var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", page, randomizeAliases: true, propertyGroupName: "Content_", defaultTemplateId: template.Id); ContentTypeService.Save(contentPage); - var advancedPage = ContentTypeBuilder.CreateSimpleContentType("advancedPage", "Advanced Page", contentPage, true, "Details", defaultTemplateId: template.Id); + var advancedPage = ContentTypeBuilder.CreateSimpleContentType("advancedPage", "Advanced Page", contentPage, randomizeAliases: true, propertyGroupName: "Details", defaultTemplateId: template.Id); ContentTypeService.Save(advancedPage); var contentMetaComposition = ContentTypeBuilder.CreateContentMetaContentType(); @@ -1157,11 +1157,11 @@ namespace Umbraco.Tests.Integration.Services // Arrange var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); - var basePage = ContentTypeBuilder.CreateSimpleContentType("basePage", "Base Page", null, true, defaultTemplateId: template.Id); + var basePage = ContentTypeBuilder.CreateSimpleContentType("basePage", "Base Page", randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(basePage); - var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", basePage, true, defaultTemplateId: template.Id); + var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", basePage, randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(contentPage); - var advancedPage = ContentTypeBuilder.CreateSimpleContentType("advancedPage", "Advanced Page", contentPage, true, defaultTemplateId: template.Id); + var advancedPage = ContentTypeBuilder.CreateSimpleContentType("advancedPage", "Advanced Page", contentPage, randomizeAliases: true, defaultTemplateId: template.Id); ContentTypeService.Save(advancedPage); var metaComposition = ContentTypeBuilder.CreateMetaContentType(); @@ -1200,7 +1200,7 @@ namespace Umbraco.Tests.Integration.Services // create 'page' content type with a 'Content_' group var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); - var page = ContentTypeBuilder.CreateSimpleContentType("page", "Page", null, false, "Content_", defaultTemplateId: template.Id); + var page = ContentTypeBuilder.CreateSimpleContentType("page", "Page", propertyGroupName: "Content_", defaultTemplateId: template.Id); Assert.AreEqual(1, page.PropertyGroups.Count); Assert.AreEqual("Content_", page.PropertyGroups.First().Name); Assert.AreEqual(3, page.PropertyTypes.Count()); @@ -1210,7 +1210,7 @@ namespace Umbraco.Tests.Integration.Services ContentTypeService.Save(page); // create 'contentPage' content type as a child of 'page' - var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", page, true, defaultTemplateId: template.Id); + var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", page, randomizeAliases: true, defaultTemplateId: template.Id); Assert.AreEqual(1, page.PropertyGroups.Count); Assert.AreEqual("Content_", page.PropertyGroups.First().Name); Assert.AreEqual(3, contentPage.PropertyTypes.Count()); @@ -1281,11 +1281,11 @@ namespace Umbraco.Tests.Integration.Services // Arrange var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); - var page = ContentTypeBuilder.CreateSimpleContentType("page", "Page", null, true, "Content_", defaultTemplateId: template.Id); + var page = ContentTypeBuilder.CreateSimpleContentType("page", "Page", randomizeAliases: true, propertyGroupName: "Content_", defaultTemplateId: template.Id); ContentTypeService.Save(page); - var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", page, true, "Contentx", defaultTemplateId: template.Id); + var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", page, randomizeAliases: true, propertyGroupName: "Contentx", defaultTemplateId: template.Id); ContentTypeService.Save(contentPage); - var advancedPage = ContentTypeBuilder.CreateSimpleContentType("advancedPage", "Advanced Page", contentPage, true, "Contenty", defaultTemplateId: template.Id); + var advancedPage = ContentTypeBuilder.CreateSimpleContentType("advancedPage", "Advanced Page", contentPage, randomizeAliases: true, propertyGroupName: "Contenty", defaultTemplateId: template.Id); ContentTypeService.Save(advancedPage); var contentMetaComposition = ContentTypeBuilder.CreateContentMetaContentType(); @@ -1355,9 +1355,9 @@ namespace Umbraco.Tests.Integration.Services // Arrange var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); - var page = ContentTypeBuilder.CreateSimpleContentType("page", "Page", null, true, "Content_", defaultTemplateId: template.Id); + var page = ContentTypeBuilder.CreateSimpleContentType("page", "Page", randomizeAliases: true, propertyGroupName: "Content_", defaultTemplateId: template.Id); ContentTypeService.Save(page); - var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", page, true, "Content", defaultTemplateId: template.Id); + var contentPage = ContentTypeBuilder.CreateSimpleContentType("contentPage", "Content Page", page, randomizeAliases: true, propertyGroupName: "Content", defaultTemplateId: template.Id); ContentTypeService.Save(contentPage); var contentMetaComposition = ContentTypeBuilder.CreateContentMetaContentType(); @@ -1589,11 +1589,11 @@ namespace Umbraco.Tests.Integration.Services typeA.PropertyTypes.First(x => x.Alias.InvariantEquals("title")).Variations = ContentVariation.Culture; // with a variant property ContentTypeService.Save(typeA); - var typeB = ContentTypeBuilder.CreateSimpleContentType("b", "B", typeA, true, defaultTemplateId: template.Id); + var typeB = ContentTypeBuilder.CreateSimpleContentType("b", "B", typeA, randomizeAliases: true, defaultTemplateId: template.Id); typeB.Variations = ContentVariation.Nothing; // make it invariant ContentTypeService.Save(typeB); - var typeC = ContentTypeBuilder.CreateSimpleContentType("c", "C", typeA, true, defaultTemplateId: template.Id); + var typeC = ContentTypeBuilder.CreateSimpleContentType("c", "C", typeA, randomizeAliases: true, defaultTemplateId: template.Id); typeC.Variations = ContentVariation.Culture; // make it variant ContentTypeService.Save(typeC); @@ -1705,7 +1705,7 @@ namespace Umbraco.Tests.Integration.Services { var contentType = ContentTypeBuilder.CreateSimpleContentType("childType" + i, "ChildType" + i, //make the last entry in the list, this one's parent - list.Last(), true, defaultTemplateId: template.Id); + list.Last(), randomizeAliases: true, defaultTemplateId: template.Id); list.Add(contentType); } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentScheduleTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentScheduleTests.cs similarity index 98% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentScheduleTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentScheduleTests.cs index 83dbfa08a5..36bf5418b3 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentScheduleTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentScheduleTests.cs @@ -3,7 +3,7 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core.Models; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class ContentScheduleTests diff --git a/src/Umbraco.Tests/Models/ContentTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentTests.cs similarity index 69% rename from src/Umbraco.Tests/Models/ContentTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentTests.cs index 8fb3f60cc8..e6adc2eb5e 100644 --- a/src/Umbraco.Tests/Models/ContentTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentTests.cs @@ -7,62 +7,40 @@ using System.Threading; using Microsoft.Extensions.Logging.Abstractions; using Moq; using Newtonsoft.Json; -using Umbraco.Core; using NUnit.Framework; +using Umbraco.Core; using Umbraco.Core.Cache; -using Umbraco.Core.Composing.CompositionExtensions; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; -using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; -using Umbraco.Core.Services.Implement; -using Umbraco.Tests.TestHelpers.Entities; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; using Umbraco.Tests.TestHelpers.Stubs; using Umbraco.Tests.Testing; -using Umbraco.Web.PropertyEditors; -namespace Umbraco.Tests.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] - public class ContentTests : UmbracoTestBase + public class ContentTests { - private IContentTypeService _contentTypeService; - - protected override void Compose() - { - base.Compose(); - - Composition.ComposeFileSystems(); - - Composition.Register(_ => Mock.Of()); - - // all this is required so we can validate properties... - var editor = new TextboxPropertyEditor(NullLoggerFactory.Instance, Mock.Of(), Mock.Of(), IOHelper, ShortStringHelper, LocalizedTextService) { Alias = "test" }; - Composition.Register(_ => new DataEditorCollection(new [] { editor })); - Composition.Register(); - var dataType = Mock.Of(); - Mock.Get(dataType).Setup(x => x.Configuration).Returns(() => new object()); - var dataTypeService = Mock.Of(); - Mock.Get(dataTypeService) - .Setup(x => x.GetDataType(It.IsAny())) - .Returns(() => dataType); - - _contentTypeService = Mock.Of(); - var mediaTypeService = Mock.Of(); - var memberTypeService = Mock.Of(); - Composition.Register(_ => ServiceContext.CreatePartial(dataTypeService: dataTypeService, contentTypeBaseServiceProvider: new ContentTypeBaseServiceProvider(_contentTypeService, mediaTypeService, memberTypeService))); - - } + private IContentTypeService _contentTypeService = Mock.Of(); [Test] public void Variant_Culture_Names_Track_Dirty_Changes() { - var contentType = new ContentType(ShortStringHelper, -1) { Alias = "contentType" }; - contentType.Variations = ContentVariation.Culture; + var contentType = new ContentTypeBuilder() + .WithAlias("contentType") + .WithContentVariation(ContentVariation.Culture) + .Build(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 }; + var content = new ContentBuilder() + .WithId(1) + .WithVersionId(1) + .WithName("content") + .WithContentType(contentType) + .Build(); const string langFr = "fr-FR"; @@ -88,13 +66,19 @@ namespace Umbraco.Tests.Models [Test] public void Variant_Published_Culture_Names_Track_Dirty_Changes() { - var contentType = new ContentType(ShortStringHelper, -1) { Alias = "contentType" }; - var content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 }; + var contentType = new ContentTypeBuilder() + .WithAlias("contentType") + .WithContentVariation(ContentVariation.Culture) + .Build(); + var content = new ContentBuilder() + .WithId(1) + .WithVersionId(1) + .WithName("content") + .WithContentType(contentType) + .Build(); const string langFr = "fr-FR"; - contentType.Variations = ContentVariation.Culture; - content.ChangeContentType(contentType); Assert.IsFalse(content.IsPropertyDirty("PublishCultureInfos")); //hasn't been changed @@ -121,18 +105,25 @@ namespace Umbraco.Tests.Models [Test] public void Get_Non_Grouped_Properties() { - var contentType = MockedContentTypes.CreateSimpleContentType(); - //add non-grouped properties - contentType.AddPropertyType(new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "nonGrouped1") { Name = "Non Grouped 1", Description = "", Mandatory = false, SortOrder = 1, DataTypeId = -88 }); - contentType.AddPropertyType(new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "nonGrouped2") { Name = "Non Grouped 2", Description = "", Mandatory = false, SortOrder = 1, DataTypeId = -88 }); + var contentType = ContentTypeBuilder.CreateSimpleContentType(); - //ensure that nothing is marked as dirty + // Add non-grouped properties + var pt1 = new PropertyTypeBuilder() + .WithAlias("nonGrouped1") + .WithName("Non Grouped 1") + .Build(); + var pt2 = new PropertyTypeBuilder() + .WithAlias("nonGrouped2") + .WithName("Non Grouped 2") + .Build(); + contentType.AddPropertyType(pt1); + contentType.AddPropertyType(pt2); + + // Ensure that nothing is marked as dirty contentType.ResetDirtyProperties(false); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - - var content = MockedContent.CreateSimpleContent(contentType); - //need to id the p + var content = ContentBuilder.CreateSimpleContent(contentType); var nonGrouped = content.GetNonGroupedProperties(); @@ -143,10 +134,10 @@ namespace Umbraco.Tests.Models [Test] public void All_Dirty_Properties_Get_Reset() { - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); content.ResetDirtyProperties(false); @@ -161,10 +152,10 @@ namespace Umbraco.Tests.Models public void Can_Verify_Mocked_Content() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act @@ -176,10 +167,10 @@ namespace Umbraco.Tests.Models public void Can_Change_Property_Value() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act content.Properties["title"].SetValue("This is the new title"); @@ -194,10 +185,10 @@ namespace Umbraco.Tests.Models public void Can_Set_Property_Value_As_String() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act content.SetValue("title", "This is the new title"); @@ -212,10 +203,10 @@ namespace Umbraco.Tests.Models public void Can_Clone_Content_With_Reset_Identity() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); content.Id = 10; content.Key = new Guid("29181B97-CB8F-403F-86DE-5FEB497F4800"); @@ -243,9 +234,9 @@ namespace Umbraco.Tests.Models public void Can_Deep_Clone_Perf_Test() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.Id = 99; - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); var i = 200; foreach (var property in content.Properties) { @@ -291,12 +282,12 @@ namespace Umbraco.Tests.Models public void Can_Deep_Clone() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.Id = 99; contentType.Variations = ContentVariation.Culture; Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); content.SetCultureName("Hello", "en-US"); content.SetCultureName("World", "es-ES"); @@ -313,6 +304,7 @@ namespace Umbraco.Tests.Models { property.Id = ++i; } + content.Id = 10; content.CreateDate = DateTime.Now; content.CreatorId = 22; @@ -326,8 +318,6 @@ namespace Umbraco.Tests.Models content.UpdateDate = DateTime.Now; content.WriterId = 23; - - // Act var clone = (Content)content.DeepClone(); @@ -378,20 +368,25 @@ namespace Umbraco.Tests.Models Assert.AreEqual(clone.CultureInfos[key], content.CultureInfos[key]); } - //This double verifies by reflection + // This double verifies by reflection var allProps = clone.GetType().GetProperties(); foreach (var propertyInfo in allProps) { Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(content, null)); } - //need to ensure the event handlers are wired + // Need to ensure the event handlers are wired var asDirty = (ICanBeDirty)clone; Assert.IsFalse(asDirty.IsPropertyDirty("Properties")); - var propertyType = new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "blah"); - var newProperty = new Property(1, propertyType); + var propertyType = new PropertyTypeBuilder() + .WithAlias("blah") + .Build(); + var newProperty = new PropertyBuilder() + .WithId(1) + .WithPropertyType(propertyType) + .Build(); newProperty.SetValue("blah"); clone.Properties.Add(newProperty); @@ -402,12 +397,12 @@ namespace Umbraco.Tests.Models public void Remember_Dirty_Properties() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.Id = 99; contentType.Variations = ContentVariation.Culture; Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); content.SetCultureName("Hello", "en-US"); content.SetCultureName("World", "es-ES"); @@ -418,6 +413,7 @@ namespace Umbraco.Tests.Models { property.Id = ++i; } + content.Id = 10; content.CreateDate = DateTime.Now; content.CreatorId = 22; @@ -427,7 +423,6 @@ namespace Umbraco.Tests.Models content.Path = "-1,4,10"; content.SortOrder = 5; content.TemplateId = 88; - content.Trashed = true; content.UpdateDate = DateTime.Now; content.WriterId = 23; @@ -454,6 +449,7 @@ namespace Umbraco.Tests.Models Assert.IsTrue(prop.WasDirty()); Assert.IsTrue(prop.WasPropertyDirty("Id")); } + Assert.IsTrue(content.WasPropertyDirty("CultureInfos")); foreach (var culture in content.CultureInfos) { @@ -461,6 +457,7 @@ namespace Umbraco.Tests.Models Assert.IsTrue(culture.WasPropertyDirty("Name")); Assert.IsTrue(culture.WasPropertyDirty("Date")); } + Assert.IsTrue(content.WasPropertyDirty("PublishCultureInfos")); foreach (var culture in content.PublishCultureInfos) { @@ -474,16 +471,17 @@ namespace Umbraco.Tests.Models public void Can_Serialize_Without_Error() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.Id = 99; Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); var i = 200; foreach (var property in content.Properties) { property.Id = ++i; } + content.Id = 10; content.CreateDate = DateTime.Now; content.CreatorId = 22; @@ -506,8 +504,8 @@ namespace Umbraco.Tests.Models public void Cannot_Change_Property_With_Invalid_Value() { // Arrange - var contentType = MockedContentTypes.CreateTextpageContentType(); - var content = MockedContent.CreateTextpageContent(contentType); + var contentType = ContentTypeBuilder.CreateTextpageContentType(); + var content = ContentBuilder.CreateTextpageContent(contentType); // Act var model = new TestEditorModel @@ -527,10 +525,10 @@ namespace Umbraco.Tests.Models public void Can_Change_Property_Value_Through_Anonymous_Object() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act content.PropertyValues(new { title = "This is the new title" }); @@ -547,10 +545,10 @@ namespace Umbraco.Tests.Models public void Can_Verify_Dirty_Property_On_Content() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act content.ResetDirtyProperties(); @@ -565,7 +563,7 @@ namespace Umbraco.Tests.Models public void Can_Add_PropertyGroup_On_ContentType() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); // Act contentType.PropertyGroups.Add(new PropertyGroup(true) { Name = "Test Group", SortOrder = 3 }); @@ -578,7 +576,7 @@ namespace Umbraco.Tests.Models public void Can_Remove_PropertyGroup_From_ContentType() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.ResetDirtyProperties(); // Act @@ -593,17 +591,14 @@ namespace Umbraco.Tests.Models public void Can_Add_PropertyType_To_Group_On_ContentType() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); // Act - contentType.PropertyGroups["Content"].PropertyTypes.Add(new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "subtitle") - { - Name = "Subtitle", - Description = "Optional subtitle", - Mandatory = false, - SortOrder = 3, - DataTypeId = -88 - }); + var propertyType = new PropertyTypeBuilder() + .WithAlias("subtitle") + .WithName("Subtitle") + .Build(); + contentType.PropertyGroups["Content"].PropertyTypes.Add(propertyType); // Assert Assert.That(contentType.PropertyGroups["Content"].PropertyTypes.Count, Is.EqualTo(3)); @@ -613,20 +608,16 @@ namespace Umbraco.Tests.Models public void Can_Add_New_Property_To_New_PropertyType() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act - var propertyType = new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "subtitle") - { - Name = "Subtitle", - Description = "Optional subtitle", - Mandatory = false, - SortOrder = 3, - DataTypeId = -88 - }; + var propertyType = new PropertyTypeBuilder() + .WithAlias("subtitle") + .WithName("Subtitle") + .Build(); contentType.PropertyGroups["Content"].PropertyTypes.Add(propertyType); var newProperty = new Property(propertyType); newProperty.SetValue("This is a subtitle Test"); @@ -641,20 +632,16 @@ namespace Umbraco.Tests.Models public void Can_Add_New_Property_To_New_PropertyType_In_New_PropertyGroup() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act - var propertyType = new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "subtitle") - { - Name = "Subtitle", - Description = "Optional subtitle", - Mandatory = false, - SortOrder = 3, - DataTypeId = -88 - }; + var propertyType = new PropertyTypeBuilder() + .WithAlias("subtitle") + .WithName("Subtitle") + .Build(); var propertyGroup = new PropertyGroup(true) { Name = "Test Group", SortOrder = 3 }; propertyGroup.PropertyTypes.Add(propertyType); contentType.PropertyGroups.Add(propertyGroup); @@ -672,20 +659,16 @@ namespace Umbraco.Tests.Models public void Can_Update_PropertyType_Through_Content_Properties() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act - note that the PropertyType's properties like SortOrder is not updated through the Content object - var propertyType = new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "title") - { - Name = "Title", - Description = "Title description added", - Mandatory = false, - SortOrder = 10, - DataTypeId = -88 - }; + var propertyType = new PropertyTypeBuilder() + .WithAlias("title") + .WithName("Title") + .Build(); content.Properties.Add(new Property(propertyType)); // Assert @@ -698,11 +681,11 @@ namespace Umbraco.Tests.Models public void Can_Change_ContentType_On_Content() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); - var simpleContentType = MockedContentTypes.CreateSimpleContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); + var simpleContentType = ContentTypeBuilder.CreateSimpleContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act content.ChangeContentType(simpleContentType); @@ -717,11 +700,11 @@ namespace Umbraco.Tests.Models public void Can_Change_ContentType_On_Content_And_Set_Property_Value() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); - var simpleContentType = MockedContentTypes.CreateSimpleContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); + var simpleContentType = ContentTypeBuilder.CreateSimpleContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act content.ChangeContentType(simpleContentType); @@ -736,11 +719,11 @@ namespace Umbraco.Tests.Models public void Can_Change_ContentType_On_Content_And_Still_Get_Old_Properties() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); - var simpleContentType = MockedContentTypes.CreateSimpleContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); + var simpleContentType = ContentTypeBuilder.CreateSimpleContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); // Act content.ChangeContentType(simpleContentType); @@ -761,9 +744,9 @@ namespace Umbraco.Tests.Models //Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); //// Arrange - //var contentType = MockedContentTypes.CreateTextPageContentType(); - //var simpleContentType = MockedContentTypes.CreateSimpleContentType(); - //var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + //var contentType = ContentTypeBuilder.CreateTextPageContentType(); + //var simpleContentType = ContentTypeBuilder.CreateSimpleContentType(); + //var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); //// Act //content.ChangeContentType(simpleContentType, true); @@ -777,10 +760,10 @@ namespace Umbraco.Tests.Models [Test] public void Can_Verify_Content_Is_Published() { - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "Textpage", -1); content.ResetDirtyProperties(); content.PublishedState = PublishedState.Publishing; @@ -813,7 +796,7 @@ namespace Umbraco.Tests.Models public void Adding_PropertyGroup_To_ContentType_Results_In_Dirty_Entity() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.ResetDirtyProperties(); // Act @@ -830,7 +813,7 @@ namespace Umbraco.Tests.Models public void After_Committing_Changes_Was_Dirty_Is_True() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.ResetDirtyProperties(); //reset // Act @@ -847,11 +830,11 @@ namespace Umbraco.Tests.Models public void After_Committing_Changes_Was_Dirty_Is_True_On_Changed_Property() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.ResetDirtyProperties(); //reset Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType); - var content = MockedContent.CreateTextpageContent(contentType, "test", -1); + var content = ContentBuilder.CreateTextpageContent(contentType, "test", -1); content.ResetDirtyProperties(); // Act @@ -880,7 +863,7 @@ namespace Umbraco.Tests.Models public void If_Not_Committed_Was_Dirty_Is_False() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); // Act contentType.Alias = "newAlias"; @@ -894,7 +877,7 @@ namespace Umbraco.Tests.Models public void Detect_That_A_Property_Is_Removed() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); Assert.That(contentType.WasPropertyDirty("HasPropertyTypeBeenRemoved"), Is.False); // Act @@ -908,18 +891,14 @@ namespace Umbraco.Tests.Models public void Adding_PropertyType_To_PropertyGroup_On_ContentType_Results_In_Dirty_Entity() { // Arrange - var contentType = MockedContentTypes.CreateTextPageContentType(); + var contentType = ContentTypeBuilder.CreateTextPageContentType(); contentType.ResetDirtyProperties(); // Act - var propertyType = new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "subtitle") - { - Name = "Subtitle", - Description = "Optional subtitle", - Mandatory = false, - SortOrder = 3, - DataTypeId = -88 - }; + var propertyType = new PropertyTypeBuilder() + .WithAlias("subtitle") + .WithName("Subtitle") + .Build(); contentType.PropertyGroups["Content"].PropertyTypes.Add(propertyType); // Assert @@ -932,20 +911,13 @@ namespace Umbraco.Tests.Models public void Can_Compose_Composite_ContentType_Collection() { // Arrange - var simpleContentType = MockedContentTypes.CreateSimpleContentType(); - var simple2ContentType = MockedContentTypes.CreateSimpleContentType("anotherSimple", "Another Simple Page", - new PropertyTypeCollection(true, - new List - { - new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "coauthor") - { - Name = "Co-Author", - Description = "Name of the Co-Author", - Mandatory = false, - SortOrder = 4, - DataTypeId = -88 - } - })); + var simpleContentType = ContentTypeBuilder.CreateSimpleContentType(); + var propertyType = new PropertyTypeBuilder() + .WithAlias("coauthor") + .WithName("Co-author") + .Build(); + var simple2ContentType = ContentTypeBuilder.CreateSimpleContentType("anotherSimple", "Another Simple Page", + propertyTypeCollection: new PropertyTypeCollection(true, new List { propertyType })); // Act var added = simpleContentType.AddContentType(simple2ContentType); @@ -962,21 +934,14 @@ namespace Umbraco.Tests.Models public void Can_Compose_Nested_Composite_ContentType_Collection() { // Arrange - var metaContentType = MockedContentTypes.CreateMetaContentType(); - var simpleContentType = MockedContentTypes.CreateSimpleContentType(); - var simple2ContentType = MockedContentTypes.CreateSimpleContentType("anotherSimple", "Another Simple Page", - new PropertyTypeCollection(true, - new List - { - new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "coauthor") - { - Name = "Co-Author", - Description = "Name of the Co-Author", - Mandatory = false, - SortOrder = 4, - DataTypeId = -88 - } - })); + var metaContentType = ContentTypeBuilder.CreateMetaContentType(); + var simpleContentType = ContentTypeBuilder.CreateSimpleContentType(); + var propertyType = new PropertyTypeBuilder() + .WithAlias("coauthor") + .WithName("Co-author") + .Build(); + var simple2ContentType = ContentTypeBuilder.CreateSimpleContentType("anotherSimple", "Another Simple Page", + propertyTypeCollection: new PropertyTypeCollection(true, new List { propertyType })); // Act var addedMeta = simple2ContentType.AddContentType(metaContentType); @@ -995,33 +960,21 @@ namespace Umbraco.Tests.Models [Test] public void Can_Avoid_Circular_Dependencies_In_Composition() { - var textPage = MockedContentTypes.CreateTextPageContentType(); - var parent = MockedContentTypes.CreateSimpleContentType("parent", "Parent", null, true); - var meta = MockedContentTypes.CreateMetaContentType(); - var mixin1 = MockedContentTypes.CreateSimpleContentType("mixin1", "Mixin1", new PropertyTypeCollection(true, - new List - { - new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "coauthor") - { - Name = "Co-Author", - Description = "Name of the Co-Author", - Mandatory = false, - SortOrder = 4, - DataTypeId = -88 - } - })); - var mixin2 = MockedContentTypes.CreateSimpleContentType("mixin2", "Mixin2", new PropertyTypeCollection(true, - new List - { - new PropertyType(ShortStringHelper, "test", ValueStorageType.Ntext, "author") - { - Name = "Author", - Description = "Name of the Author", - Mandatory = false, - SortOrder = 4, - DataTypeId = -88 - } - })); + var textPage = ContentTypeBuilder.CreateTextPageContentType(); + var parent = ContentTypeBuilder.CreateSimpleContentType("parent", "Parent", null, randomizeAliases: true); + var meta = ContentTypeBuilder.CreateMetaContentType(); + var propertyType1 = new PropertyTypeBuilder() + .WithAlias("coauthor") + .WithName("Co-author") + .Build(); + var mixin1 = ContentTypeBuilder.CreateSimpleContentType("mixin1", "Mixin1", + propertyTypeCollection: new PropertyTypeCollection(true, new List { propertyType1 })); + var propertyType2 = new PropertyTypeBuilder() + .WithAlias("author") + .WithName("Author") + .Build(); + var mixin2 = ContentTypeBuilder.CreateSimpleContentType("mixin2", "Mixin2", + propertyTypeCollection: new PropertyTypeCollection(true, new List { propertyType2 })); // Act var addedMetaMixin2 = mixin2.AddContentType(meta); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentTypeTests.cs similarity index 99% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentTypeTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentTypeTests.cs index d5ba104d78..c571a79785 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/ContentTypeTests.cs @@ -3,13 +3,12 @@ using System.Diagnostics; using System.Linq; using Newtonsoft.Json; using NUnit.Framework; -using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class ContentTypeTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/CultureImpactTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/CultureImpactTests.cs similarity index 98% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/CultureImpactTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/CultureImpactTests.cs index dd782ee1c4..753c0e2b4d 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/CultureImpactTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/CultureImpactTests.cs @@ -2,7 +2,7 @@ using NUnit.Framework; using Umbraco.Core.Models; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class CultureImpactTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DeepCloneHelperTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DeepCloneHelperTests.cs similarity index 99% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DeepCloneHelperTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DeepCloneHelperTests.cs index 525b8bec0f..fcad67c221 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DeepCloneHelperTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DeepCloneHelperTests.cs @@ -5,7 +5,7 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core.Models; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class DeepCloneHelperTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DictionaryItemTests.cs similarity index 96% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DictionaryItemTests.cs index 44a62521f3..54a935c891 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DictionaryItemTests.cs @@ -4,7 +4,7 @@ using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class DictionaryItemTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryTranslationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DictionaryTranslationTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryTranslationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DictionaryTranslationTests.cs index 0badf150b6..957acf293e 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryTranslationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DictionaryTranslationTests.cs @@ -6,7 +6,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class DictionaryTranslationTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DocumentEntityTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DocumentEntityTests.cs similarity index 94% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DocumentEntityTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DocumentEntityTests.cs index 3f79675d06..1829720aad 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DocumentEntityTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/DocumentEntityTests.cs @@ -4,7 +4,7 @@ using NUnit.Framework; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class DocumentEntityTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/LanguageTests.cs similarity index 96% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/LanguageTests.cs index eb2ae7235a..5b1fc2d56b 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/LanguageTests.cs @@ -4,7 +4,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class LanguageTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MacroTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MacroTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MacroTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MacroTests.cs index 9137c67e7e..9d22387cd6 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MacroTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MacroTests.cs @@ -6,7 +6,7 @@ using Umbraco.Core.Models.Entities; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class MacroTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberGroupTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MemberGroupTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberGroupTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MemberGroupTests.cs index 6c539c969a..47138a5fb4 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberGroupTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MemberGroupTests.cs @@ -6,7 +6,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class MemberGroupTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MemberTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MemberTests.cs index 8092342e90..58f88affa1 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/MemberTests.cs @@ -1,14 +1,12 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using System.Linq; using Newtonsoft.Json; using NUnit.Framework; -using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class MemberTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyGroupTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyGroupTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyGroupTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyGroupTests.cs index 81ea9d9443..08e025a6b1 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyGroupTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyGroupTests.cs @@ -6,7 +6,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class PropertyGroupTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyTests.cs similarity index 96% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyTests.cs index dbf0dfc2f3..ce87174d7c 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyTests.cs @@ -5,7 +5,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class PropertyTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyTypeTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyTypeTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyTypeTests.cs index f2b568054c..6fa061b1d2 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PropertyTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/PropertyTypeTests.cs @@ -8,7 +8,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class PropertyTypeTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/RelationTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/RelationTests.cs index 3a6c85c721..fa7e540533 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/RelationTests.cs @@ -6,7 +6,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class RelationTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/RelationTypeTests.cs similarity index 96% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/RelationTypeTests.cs index b96d937c72..2d5b88d945 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/RelationTypeTests.cs @@ -5,7 +5,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class RelationTypeTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/StylesheetTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/StylesheetTests.cs similarity index 98% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/StylesheetTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/StylesheetTests.cs index 386efcced8..f744fee829 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/StylesheetTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/StylesheetTests.cs @@ -6,7 +6,7 @@ using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class StylesheetTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/TemplateTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/TemplateTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/TemplateTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/TemplateTests.cs index d76d2daed5..d1c731184e 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/TemplateTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/TemplateTests.cs @@ -8,7 +8,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class TemplateTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/UserExtensionsTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserExtensionsTests.cs similarity index 98% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/UserExtensionsTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserExtensionsTests.cs index d3d59e77ba..faf96a6457 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/UserExtensionsTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserExtensionsTests.cs @@ -8,7 +8,7 @@ using Umbraco.Core.Models.Entities; using Umbraco.Core.Services; using Umbraco.Tests.Common.Builders; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class UserExtensionsTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/UserTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserTests.cs similarity index 94% rename from src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/UserTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserTests.cs index db0761b165..e4b9f89067 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/UserTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserTests.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using System.Linq; using Newtonsoft.Json; using NUnit.Framework; @@ -7,7 +6,7 @@ using Umbraco.Core.Models.Membership; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class UserTests diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/VariationTests.cs similarity index 84% rename from src/Umbraco.Tests/Models/VariationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/VariationTests.cs index df63461f4d..ec1d60ba1b 100644 --- a/src/Umbraco.Tests/Models/VariationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/VariationTests.cs @@ -3,69 +3,21 @@ using Microsoft.Extensions.Logging.Abstractions; using Moq; using NUnit.Framework; using Umbraco.Core; -using Umbraco.Core.Composing; +using Umbraco.Core.IO; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; using Umbraco.Core.Strings; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.TestHelpers.Entities; -using Current = Umbraco.Web.Composing.Current; +using Umbraco.Web.PropertyEditors; -namespace Umbraco.Tests.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Models { [TestFixture] public class VariationTests { - private IFactory _factory; - private IShortStringHelper ShortStringHelper { get; } = TestHelper.ShortStringHelper; - - [SetUp] - public void SetUp() - { - // well, this is also annoying, but... - // validating a value is performed by its data editor, - // based upon the configuration in the data type, so we - // need to be able to retrieve them all... - - Current.Reset(); - - _factory = Mock.Of(); - - var dataTypeService = Mock.Of(); - var localizationService = Mock.Of(); - - var dataEditors = new DataEditorCollection(new IDataEditor[] - { - new DataEditor(NullLoggerFactory.Instance, Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()) { Alias = "editor", ExplicitValueEditor = MockedValueEditors.CreateDataValueEditor("view") } - }); - var propertyEditors = new PropertyEditorCollection(dataEditors); - - var dataType = Mock.Of(); - Mock.Get(dataType) - .Setup(x => x.Configuration) - .Returns(null); - - Mock.Get(dataTypeService) - .Setup(x => x.GetDataType(It.IsAny())) - .Returns(x => dataType); - - var serviceContext = ServiceContext.CreatePartial( - dataTypeService: dataTypeService, - localizedTextService: Mock.Of()); - - Mock.Get(_factory) - .Setup(x => x.GetInstance(It.IsAny())) - .Returns(x => - { - //if (x == typeof(Configs)) return configs; - if (x == typeof(PropertyEditorCollection)) return propertyEditors; - if (x == typeof(ServiceContext)) return serviceContext; - if (x == typeof(ILocalizedTextService)) return serviceContext.LocalizationService; - throw new NotSupportedException(x.FullName); - }); - } - [Test] public void ValidateVariationTests() { @@ -292,8 +244,10 @@ namespace Umbraco.Tests.Models [Test] public void ContentNames() { - var contentType = new ContentType(ShortStringHelper, -1) { Alias = "contentType" }; - var content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 }; + var contentType = new ContentTypeBuilder() + .WithAlias("contentType") + .Build(); + var content = CreateContent(contentType); const string langFr = "fr-FR"; const string langUk = "en-UK"; @@ -305,7 +259,7 @@ namespace Umbraco.Tests.Models contentType.Variations = ContentVariation.Culture; // recreate content to re-capture content type variations - content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 }; + content = CreateContent(contentType); // invariant name works content.Name = "name"; @@ -333,11 +287,15 @@ namespace Umbraco.Tests.Models { const string langFr = "fr-FR"; - var propertyType = new PropertyType(ShortStringHelper, "editor", ValueStorageType.Nvarchar) { Alias = "prop" }; - var contentType = new ContentType(ShortStringHelper, -1) { Alias = "contentType" }; + var propertyType = new PropertyTypeBuilder() + .WithAlias("prop") + .Build(); + var contentType = new ContentTypeBuilder() + .WithAlias("contentType") + .Build(); contentType.AddPropertyType(propertyType); - var content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 }; + var content = CreateContent(contentType); // can set value // and get edited value, published is null @@ -419,7 +377,8 @@ namespace Umbraco.Tests.Models Assert.IsNull(content.GetValue("prop")); Assert.IsNull(content.GetValue("prop", published: true)); - var other = new Content("other", -1, contentType) { Id = 2, VersionId = 1 }; + var other = CreateContent(contentType, 2, "other"); + Assert.Throws(() => other.SetValue("prop", "o")); // don't even try other.SetValue("prop", "o1", langFr); @@ -441,26 +400,32 @@ namespace Umbraco.Tests.Models [Test] public void ContentPublishValuesWithMixedPropertyTypeVariations() { - var propertyValidationService = new PropertyValidationService( - _factory.GetInstance(), - _factory.GetInstance().DataTypeService, - _factory.GetInstance().TextService); + var propertyValidationService = GetPropertyValidationService(); const string langFr = "fr-FR"; // content type varies by Culture // prop1 varies by Culture // prop2 is invariant - var contentType = new ContentType(ShortStringHelper, -1) { Alias = "contentType" }; + var contentType = new ContentTypeBuilder() + .WithAlias("contentType") + .Build(); contentType.Variations |= ContentVariation.Culture; - var variantPropType = new PropertyType(ShortStringHelper, "editor", ValueStorageType.Nvarchar) { Alias = "prop1", Variations = ContentVariation.Culture, Mandatory = true }; - var invariantPropType = new PropertyType(ShortStringHelper, "editor", ValueStorageType.Nvarchar) { Alias = "prop2", Variations = ContentVariation.Nothing, Mandatory = true}; - + var variantPropType = new PropertyTypeBuilder() + .WithAlias("prop1") + .WithVariations(ContentVariation.Culture) + .WithMandatory(true) + .Build(); + var invariantPropType = new PropertyTypeBuilder() + .WithAlias("prop2") + .WithVariations(ContentVariation.Nothing) + .WithMandatory(true) + .Build(); contentType.AddPropertyType(variantPropType); contentType.AddPropertyType(invariantPropType); - var content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 }; + var content = CreateContent(contentType); content.SetCultureName("hello", langFr); @@ -490,11 +455,15 @@ namespace Umbraco.Tests.Models const string langUk = "en-UK"; const string langEs = "es-ES"; - var propertyType = new PropertyType(ShortStringHelper, "editor", ValueStorageType.Nvarchar) { Alias = "prop" }; - var contentType = new ContentType(ShortStringHelper, -1) { Alias = "contentType" }; + var propertyType = new PropertyTypeBuilder() + .WithAlias("prop") + .Build(); + var contentType = new ContentTypeBuilder() + .WithAlias("contentType") + .Build(); contentType.AddPropertyType(propertyType); - var content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 }; + var content = CreateContent(contentType); // change - now we vary by culture contentType.Variations |= ContentVariation.Culture; @@ -545,12 +514,16 @@ namespace Umbraco.Tests.Models [Test] public void IsDirtyTests() { - var propertyType = new PropertyType(ShortStringHelper, "editor", ValueStorageType.Nvarchar) { Alias = "prop" }; + var propertyType = new PropertyTypeBuilder() + .WithAlias("prop") + .Build(); var prop = new Property(propertyType); - var contentType = new ContentType(ShortStringHelper, -1) { Alias = "contentType" }; + var contentType = new ContentTypeBuilder() + .WithAlias("contentType") + .Build(); contentType.AddPropertyType(propertyType); - var content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 }; + var content = CreateContent(contentType); prop.SetValue("a"); Assert.AreEqual("a", prop.GetValue()); @@ -570,17 +543,17 @@ namespace Umbraco.Tests.Models [Test] public void ValidationTests() { - var propertyType = new PropertyType(ShortStringHelper, "editor", ValueStorageType.Nvarchar) { Alias = "prop", SupportsPublishing = true }; + var propertyType = new PropertyTypeBuilder() + .WithAlias("prop") + .WithSupportsPublishing(true) + .Build(); + var prop = new Property(propertyType); prop.SetValue("a"); Assert.AreEqual("a", prop.GetValue()); Assert.IsNull(prop.GetValue(published: true)); - var propertyValidationService = new PropertyValidationService( - _factory.GetInstance(), - _factory.GetInstance().DataTypeService, - _factory.GetInstance().TextService - ); + var propertyValidationService = GetPropertyValidationService(); Assert.IsTrue(propertyValidationService.IsPropertyValid(prop)); @@ -593,5 +566,43 @@ namespace Umbraco.Tests.Models // can publish, even though invalid prop.PublishValues(); } + + private static Content CreateContent(IContentType contentType, int id = 1, string name = "content") + { + return new ContentBuilder() + .WithId(id) + .WithVersionId(1) + .WithName(name) + .WithContentType(contentType) + .Build(); + } + + private static PropertyValidationService GetPropertyValidationService() + { + var ioHelper = Mock.Of(); + var dataTypeService = Mock.Of(); + var localizedTextService = Mock.Of(); + var localizationService = Mock.Of(); + var shortStringHelper = Mock.Of(); + + var textBoxEditor = new TextboxPropertyEditor( + NullLoggerFactory.Instance, + dataTypeService, + localizationService, + ioHelper, + shortStringHelper, + localizedTextService + ); + + var mockDataTypeService = new Mock(); + Mock.Get(dataTypeService).Setup(x => x.GetDataType(It.Is(y => y == Constants.DataTypes.Textbox))) + .Returns(new DataType(textBoxEditor)); + + var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(new[] { textBoxEditor })); + return new PropertyValidationService( + propertyEditorCollection, + dataTypeService, + localizedTextService); + } } } diff --git a/src/Umbraco.Tests/Models/ImageProcessorImageUrlGeneratorTest.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Media/ImageSharpImageUrlGeneratorTests.cs similarity index 99% rename from src/Umbraco.Tests/Models/ImageProcessorImageUrlGeneratorTest.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Media/ImageSharpImageUrlGeneratorTests.cs index a44d240ea9..febb36145b 100644 --- a/src/Umbraco.Tests/Models/ImageProcessorImageUrlGeneratorTest.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Media/ImageSharpImageUrlGeneratorTests.cs @@ -3,10 +3,10 @@ using Umbraco.Core.Models; using Umbraco.Infrastructure.Media; using Umbraco.Web.Models; -namespace Umbraco.Tests.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Media { [TestFixture] - public class ImageProcessorImageUrlGeneratorTest + public class ImageSharpImageUrlGeneratorTests { private const string MediaPath = "/media/1005/img_0671.jpg"; private static readonly ImageUrlGenerationOptions.CropCoordinates Crop = new ImageUrlGenerationOptions.CropCoordinates(0.58729977382575338m, 0.055768992440203169m, 0m, 0.32457553600198386m); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs index b94effb907..d5c5ab7fd1 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs @@ -4,7 +4,7 @@ using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastucture.Models { [TestFixture] public class DataTypeTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PathValidationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PathValidationTests.cs index 117b9d87cc..a557bdf64f 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PathValidationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/PathValidationTests.cs @@ -7,7 +7,7 @@ using Umbraco.Core.Models.Entities; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastucture.Models { [TestFixture] public class PathValidationTests diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index d05e522e8e..a65441cae8 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -141,6 +141,7 @@ + @@ -285,7 +286,6 @@ - @@ -439,6 +439,9 @@ + + + $(NuGetPackageFolders.Split(';')[0])