diff --git a/src/Umbraco.Core/Models/ContentBase.cs b/src/Umbraco.Core/Models/ContentBase.cs
index 908f620b11..765275cf51 100644
--- a/src/Umbraco.Core/Models/ContentBase.cs
+++ b/src/Umbraco.Core/Models/ContentBase.cs
@@ -15,7 +15,7 @@ namespace Umbraco.Core.Models
///
[Serializable]
[DataContract(IsReference = true)]
- [DebuggerDisplay("Id: {Id}, Name: {Name}, ContentType: {ContentTypeBase.Alias}")]
+ [DebuggerDisplay("Id: {Id}, Name: {Name}, ContentType: {ContentType.Alias}")]
public abstract class ContentBase : TreeEntityBase, IContentBase
{
protected static readonly ContentCultureInfosCollection NoInfos = new ContentCultureInfosCollection();
diff --git a/src/Umbraco.Core/Models/ISimpleContentType.cs b/src/Umbraco.Core/Models/ISimpleContentType.cs
index 8c9413f934..40862afd9e 100644
--- a/src/Umbraco.Core/Models/ISimpleContentType.cs
+++ b/src/Umbraco.Core/Models/ISimpleContentType.cs
@@ -1,20 +1,17 @@
-namespace Umbraco.Core.Models
+using Umbraco.Core.Models.Entities;
+
+namespace Umbraco.Core.Models
{
///
/// Represents a simplified view of a content type.
///
- public interface ISimpleContentType
+ public interface ISimpleContentType : IUmbracoEntity
{
///
/// Gets the alias of the content type.
///
string Alias { get; }
- ///
- /// Gets the identifier of the content type.
- ///
- int Id { get; }
-
///
/// Gets the default template of the content type.
///
@@ -35,11 +32,6 @@
///
bool IsContainer { get; }
- ///
- /// Gets the name of the content type.
- ///
- string Name { get; }
-
///
/// Gets a value indicating whether content of that type can be created at the root of the tree.
///
diff --git a/src/Umbraco.Core/Models/SimpleContentType.cs b/src/Umbraco.Core/Models/SimpleContentType.cs
index db7e01fade..c0e235e92d 100644
--- a/src/Umbraco.Core/Models/SimpleContentType.cs
+++ b/src/Umbraco.Core/Models/SimpleContentType.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using Umbraco.Core.Models.Entities;
namespace Umbraco.Core.Models
{
@@ -7,67 +9,56 @@ namespace Umbraco.Core.Models
///
public class SimpleContentType : ISimpleContentType
{
+ private readonly int _id;
+ private readonly string _name;
+
///
/// Initializes a new instance of the class.
///
public SimpleContentType(IContentType contentType)
+ : this((IContentTypeBase)contentType)
{
- if (contentType == null) throw new ArgumentNullException(nameof(contentType));
-
-
- Id = contentType.Id;
- Alias = contentType.Alias;
DefaultTemplate = contentType.DefaultTemplate;
- Variations = contentType.Variations;
- Icon = contentType.Icon;
- IsContainer = contentType.IsContainer;
- Icon = contentType.Icon;
- Name = contentType.Name;
- AllowedAsRoot = contentType.AllowedAsRoot;
- IsElement = contentType.IsElement;
}
///
/// Initializes a new instance of the class.
///
public SimpleContentType(IMediaType mediaType)
- {
- if (mediaType == null) throw new ArgumentNullException(nameof(mediaType));
-
- Id = mediaType.Id;
- Alias = mediaType.Alias;
- Variations = mediaType.Variations;
- Icon = mediaType.Icon;
- IsContainer = mediaType.IsContainer;
- Icon = mediaType.Icon;
- Name = mediaType.Name;
- AllowedAsRoot = mediaType.AllowedAsRoot;
- IsElement = mediaType.IsElement;
- }
+ : this((IContentTypeBase)mediaType)
+ { }
///
/// Initializes a new instance of the class.
///
public SimpleContentType(IMemberType memberType)
- {
- if (memberType == null) throw new ArgumentNullException(nameof(memberType));
+ : this((IContentTypeBase)memberType)
+ { }
- Id = memberType.Id;
- Alias = memberType.Alias;
- Variations = memberType.Variations;
- Icon = memberType.Icon;
- IsContainer = memberType.IsContainer;
- Icon = memberType.Icon;
- Name = memberType.Name;
- AllowedAsRoot = memberType.AllowedAsRoot;
- IsElement = memberType.IsElement;
+ private SimpleContentType(IContentTypeBase contentType)
+ {
+ if (contentType == null) throw new ArgumentNullException(nameof(contentType));
+
+ _id = contentType.Id;
+ Alias = contentType.Alias;
+ Variations = contentType.Variations;
+ Icon = contentType.Icon;
+ IsContainer = contentType.IsContainer;
+ Icon = contentType.Icon;
+ _name = contentType.Name;
+ AllowedAsRoot = contentType.AllowedAsRoot;
+ IsElement = contentType.IsElement;
}
///
public string Alias { get; }
///
- public int Id { get; }
+ public int Id
+ {
+ get => _id;
+ set => throw new NotSupportedException();
+ }
///
public ITemplate DefaultTemplate { get; }
@@ -82,7 +73,11 @@ namespace Umbraco.Core.Models
public bool IsContainer { get; }
///
- public string Name { get; }
+ public string Name
+ {
+ get => _name;
+ set => throw new NotSupportedException();
+ }
///
public bool AllowedAsRoot { get; }
@@ -121,5 +116,34 @@ namespace Umbraco.Core.Models
return ((Alias != null ? Alias.GetHashCode() : 0) * 397) ^ Id;
}
}
+
+ // we have to have all this, because we're an IUmbracoEntity, because that is
+ // required by the query expression visitor / SimpleContentTypeMapper
+
+ public object DeepClone() => throw new NotImplementedException();
+
+ public Guid Key { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public DateTime CreateDate { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public DateTime UpdateDate { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public DateTime? DeleteDate { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public bool HasIdentity => throw new NotImplementedException();
+
+ public int CreatorId { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public int ParentId { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public void SetParent(ITreeEntity parent) => throw new NotImplementedException();
+
+ public int Level { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public string Path { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public int SortOrder { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+ public bool Trashed => throw new NotImplementedException();
+ public bool IsDirty() => throw new NotImplementedException();
+ public bool IsPropertyDirty(string propName) => throw new NotImplementedException();
+ public IEnumerable GetDirtyProperties() => throw new NotImplementedException();
+ public void ResetDirtyProperties() => throw new NotImplementedException();
+ public bool WasDirty() => throw new NotImplementedException();
+ public bool WasPropertyDirty(string propertyName) => throw new NotImplementedException();
+ public void ResetWereDirtyProperties() => throw new NotImplementedException();
+ public void ResetDirtyProperties(bool rememberDirty) => throw new NotImplementedException();
+ public IEnumerable GetWereDirtyProperties() => throw new NotImplementedException();
}
}
diff --git a/src/Umbraco.Core/Persistence/Mappers/MapperCollectionBuilder.cs b/src/Umbraco.Core/Persistence/Mappers/MapperCollectionBuilder.cs
index 80819933f5..e20f7c1911 100644
--- a/src/Umbraco.Core/Persistence/Mappers/MapperCollectionBuilder.cs
+++ b/src/Umbraco.Core/Persistence/Mappers/MapperCollectionBuilder.cs
@@ -25,6 +25,7 @@ namespace Umbraco.Core.Persistence.Mappers
Add();
Add();
Add();
+ Add();
Add();
Add();
Add();
diff --git a/src/Umbraco.Core/Persistence/Mappers/SimpleContentTypeMapper.cs b/src/Umbraco.Core/Persistence/Mappers/SimpleContentTypeMapper.cs
new file mode 100644
index 0000000000..3ad975defb
--- /dev/null
+++ b/src/Umbraco.Core/Persistence/Mappers/SimpleContentTypeMapper.cs
@@ -0,0 +1,38 @@
+using System.Collections.Concurrent;
+using Umbraco.Core.Models;
+using Umbraco.Core.Persistence.Dtos;
+
+namespace Umbraco.Core.Persistence.Mappers
+{
+ [MapperFor(typeof(ISimpleContentType))]
+ [MapperFor(typeof(SimpleContentType))]
+ public sealed class SimpleContentTypeMapper : BaseMapper
+ {
+ private static readonly ConcurrentDictionary PropertyInfoCacheInstance = new ConcurrentDictionary();
+
+ internal override ConcurrentDictionary PropertyInfoCache => PropertyInfoCacheInstance;
+
+ protected override void BuildMap()
+ {
+ if (PropertyInfoCache.IsEmpty == false) return;
+
+ CacheMap(src => src.Id, dto => dto.NodeId);
+ CacheMap(src => src.CreateDate, dto => dto.CreateDate);
+ CacheMap(src => src.Level, dto => dto.Level);
+ CacheMap(src => src.ParentId, dto => dto.ParentId);
+ CacheMap(src => src.Path, dto => dto.Path);
+ CacheMap(src => src.SortOrder, dto => dto.SortOrder);
+ CacheMap(src => src.Name, dto => dto.Text);
+ CacheMap(src => src.Trashed, dto => dto.Trashed);
+ CacheMap(src => src.Key, dto => dto.UniqueId);
+ CacheMap(src => src.CreatorId, dto => dto.UserId);
+ CacheMap(src => src.Alias, dto => dto.Alias);
+ CacheMap(src => src.AllowedAsRoot, dto => dto.AllowAtRoot);
+ CacheMap(src => src.Description, dto => dto.Description);
+ CacheMap(src => src.Icon, dto => dto.Icon);
+ CacheMap(src => src.IsContainer, dto => dto.IsContainer);
+ CacheMap(src => src.IsElement, dto => dto.IsElement);
+ CacheMap(src => src.Thumbnail, dto => dto.Thumbnail);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index d4b26cbbc0..eda02148fe 100755
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -467,6 +467,7 @@
+
diff --git a/src/Umbraco.Tests/Composing/TypeLoaderTests.cs b/src/Umbraco.Tests/Composing/TypeLoaderTests.cs
index 2354dc8147..2dbd3055cb 100644
--- a/src/Umbraco.Tests/Composing/TypeLoaderTests.cs
+++ b/src/Umbraco.Tests/Composing/TypeLoaderTests.cs
@@ -264,7 +264,7 @@ AnotherContentFinder
public void Resolves_Assigned_Mappers()
{
var foundTypes1 = _typeLoader.GetAssignedMapperTypes();
- Assert.AreEqual(29, foundTypes1.Count());
+ Assert.AreEqual(30, foundTypes1.Count());
}
[Test]
diff --git a/src/Umbraco.Tests/Models/ContentExtensionsTests.cs b/src/Umbraco.Tests/Models/ContentExtensionsTests.cs
index 5c95f1ead5..efa464a46c 100644
--- a/src/Umbraco.Tests/Models/ContentExtensionsTests.cs
+++ b/src/Umbraco.Tests/Models/ContentExtensionsTests.cs
@@ -1,22 +1,60 @@
using System;
using System.Linq;
+using Moq;
using NUnit.Framework;
using Umbraco.Core;
+using Umbraco.Core.Composing;
+using Umbraco.Core.Composing.Composers;
+using Umbraco.Core.Configuration.UmbracoSettings;
+using Umbraco.Core.Logging;
using Umbraco.Core.Models;
+using Umbraco.Core.PropertyEditors;
+using Umbraco.Core.Services;
+using Umbraco.Core.Services.Implement;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Tests.Testing;
+using Umbraco.Web.PropertyEditors;
namespace Umbraco.Tests.Models
{
[TestFixture]
public class ContentExtensionsTests : UmbracoTestBase
{
- #region Others
+ private IContentTypeService _contentTypeService;
+
+ protected override void Compose()
+ {
+ base.Compose();
+
+ Composition.Register(_ => Mock.Of());
+ Composition.ComposeFileSystems();
+
+ Composition.Register(_ => Mock.Of());
+ Composition.Register(_ => Mock.Of());
+
+ // all this is required so we can validate properties...
+ var editor = new TextboxPropertyEditor(Mock.Of()) { 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)));
+ }
[Test]
public void DirtyProperty_Reset_Clears_SavedPublishedState()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
content.PublishedState = PublishedState.Publishing;
@@ -30,6 +68,8 @@ namespace Umbraco.Tests.Models
public void DirtyProperty_OnlyIfActuallyChanged_Content()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// if you assign a content property with its value it is not dirty
@@ -52,6 +92,8 @@ namespace Umbraco.Tests.Models
public void DirtyProperty_OnlyIfActuallyChanged_User()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
var prop = content.Properties.First();
@@ -76,6 +118,8 @@ namespace Umbraco.Tests.Models
public void DirtyProperty_UpdateDate()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
var prop = content.Properties.First();
@@ -99,6 +143,8 @@ namespace Umbraco.Tests.Models
public void DirtyProperty_WasDirty_ContentProperty()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
content.ResetDirtyProperties(false);
Assert.IsFalse(content.IsDirty());
@@ -126,6 +172,8 @@ namespace Umbraco.Tests.Models
public void DirtyProperty_WasDirty_ContentSortOrder()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
content.ResetDirtyProperties(false);
Assert.IsFalse(content.IsDirty());
@@ -153,6 +201,8 @@ namespace Umbraco.Tests.Models
public void DirtyProperty_WasDirty_UserProperty()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
var prop = content.Properties.First();
content.ResetDirtyProperties(false);
@@ -178,7 +228,5 @@ namespace Umbraco.Tests.Models
//Assert.IsFalse(content.WasDirty()); // not impacted by user properties
Assert.IsTrue(content.WasDirty()); // now it is!
}
-
- #endregion
}
}
diff --git a/src/Umbraco.Tests/Models/ContentTests.cs b/src/Umbraco.Tests/Models/ContentTests.cs
index 844a609878..ad49fb226b 100644
--- a/src/Umbraco.Tests/Models/ContentTests.cs
+++ b/src/Umbraco.Tests/Models/ContentTests.cs
@@ -17,6 +17,7 @@ using Umbraco.Core.Models.Entities;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Serialization;
using Umbraco.Core.Services;
+using Umbraco.Core.Services.Implement;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Tests.TestHelpers.Stubs;
using Umbraco.Tests.Testing;
@@ -28,6 +29,8 @@ namespace Umbraco.Tests.Models
[TestFixture]
public class ContentTests : UmbracoTestBase
{
+ private IContentTypeService _contentTypeService;
+
protected override void Compose()
{
base.Compose();
@@ -48,19 +51,24 @@ namespace Umbraco.Tests.Models
Mock.Get(dataTypeService)
.Setup(x => x.GetDataType(It.IsAny()))
.Returns(() => dataType);
- Composition.Register(_ => ServiceContext.CreatePartial(dataTypeService: dataTypeService));
+
+ _contentTypeService = Mock.Of();
+ var mediaTypeService = Mock.Of();
+ var memberTypeService = Mock.Of();
+ Composition.Register(_ => ServiceContext.CreatePartial(dataTypeService: dataTypeService, contentTypeBaseServiceProvider: new ContentTypeBaseServiceProvider(_contentTypeService, mediaTypeService, memberTypeService)));
}
[Test]
public void Variant_Culture_Names_Track_Dirty_Changes()
{
var contentType = new ContentType(-1) { Alias = "contentType" };
+ contentType.Variations = ContentVariation.Culture;
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 };
const string langFr = "fr-FR";
- contentType.Variations = ContentVariation.Culture;
-
Assert.IsFalse(content.IsPropertyDirty("CultureInfos")); //hasn't been changed
Thread.Sleep(500); //The "Date" wont be dirty if the test runs too fast since it will be the same date
@@ -123,6 +131,7 @@ namespace Umbraco.Tests.Models
//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);
@@ -138,6 +147,8 @@ namespace Umbraco.Tests.Models
public void All_Dirty_Properties_Get_Reset()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
content.ResetDirtyProperties(false);
@@ -154,6 +165,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -167,6 +180,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -183,6 +198,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -199,6 +216,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
content.Id = 10;
content.Key = new Guid("29181B97-CB8F-403F-86DE-5FEB497F4800");
@@ -278,6 +297,8 @@ namespace Umbraco.Tests.Models
var contentType = MockedContentTypes.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);
content.SetCultureName("Hello", "en-US");
@@ -387,6 +408,8 @@ namespace Umbraco.Tests.Models
var contentType = MockedContentTypes.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);
content.SetCultureName("Hello", "en-US");
@@ -458,6 +481,8 @@ namespace Umbraco.Tests.Models
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
contentType.Id = 99;
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
var i = 200;
foreach (var property in content.Properties)
@@ -509,6 +534,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -527,6 +554,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -591,6 +620,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -613,6 +644,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -642,6 +675,8 @@ namespace Umbraco.Tests.Models
{
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act - note that the PropertyType's properties like SortOrder is not updated through the Content object
@@ -663,6 +698,8 @@ namespace Umbraco.Tests.Models
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
var simpleContentType = MockedContentTypes.CreateSimpleContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -680,6 +717,8 @@ namespace Umbraco.Tests.Models
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
var simpleContentType = MockedContentTypes.CreateSimpleContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -697,6 +736,8 @@ namespace Umbraco.Tests.Models
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
var simpleContentType = MockedContentTypes.CreateSimpleContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -716,6 +757,8 @@ namespace Umbraco.Tests.Models
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
var simpleContentType = MockedContentTypes.CreateSimpleContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
// Act
@@ -731,6 +774,8 @@ namespace Umbraco.Tests.Models
public void Can_Verify_Content_Is_Published()
{
var contentType = MockedContentTypes.CreateTextPageContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
content.ResetDirtyProperties();
@@ -800,6 +845,8 @@ namespace Umbraco.Tests.Models
// Arrange
var contentType = MockedContentTypes.CreateTextPageContentType();
contentType.ResetDirtyProperties(); //reset
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateTextpageContent(contentType, "test", -1);
content.ResetDirtyProperties();
diff --git a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs
index e3551921d8..1817414f69 100644
--- a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs
+++ b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs
@@ -4,15 +4,20 @@ using AutoMapper;
using Moq;
using NUnit.Framework;
using Umbraco.Core;
+using Umbraco.Core.Composing;
+using Umbraco.Core.Composing.Composers;
+using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Services;
using Umbraco.Core.Dictionary;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.PropertyEditors;
+using Umbraco.Core.Services.Implement;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Tests.Testing;
+using Umbraco.Web.PropertyEditors;
using Current = Umbraco.Web.Composing.Current;
namespace Umbraco.Tests.Models.Mapping
@@ -21,12 +26,37 @@ namespace Umbraco.Tests.Models.Mapping
[UmbracoTest(AutoMapper = true, Database = UmbracoTestOptions.Database.NewSchemaPerFixture)]
public class ContentWebModelMappingTests : TestWithDatabaseBase
{
+ private IContentTypeService _contentTypeService;
+
+
protected override void Compose()
{
base.Compose();
Composition.RegisterUnique(f => Mock.Of());
- Composition.RegisterUnique(f => Mock.Of());
+
+ Composition.Register(_ => Mock.Of());
+ Composition.ComposeFileSystems();
+
+ Composition.Register(_ => Mock.Of());
+ Composition.Register(_ => Mock.Of());
+
+ // all this is required so we can validate properties...
+ var editor = new TextboxPropertyEditor(Mock.Of()) { 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.RegisterUnique(_ => _contentTypeService);
+ Composition.Register(_ => ServiceContext.CreatePartial(dataTypeService: dataTypeService, contentTypeBaseServiceProvider: new ContentTypeBaseServiceProvider(_contentTypeService, mediaTypeService, memberTypeService)));
}
[DataEditor("Test.Test", "Test", "~/Test.html")]
@@ -53,6 +83,8 @@ namespace Umbraco.Tests.Models.Mapping
public void To_Media_Item_Simple()
{
var contentType = MockedContentTypes.CreateImageMediaType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedMedia.CreateMediaImage(contentType, -1);
FixUsers(content);
@@ -70,6 +102,8 @@ namespace Umbraco.Tests.Models.Mapping
public void To_Content_Item_Simple()
{
var contentType = MockedContentTypes.CreateSimpleContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateSimpleContent(contentType);
FixUsers(content);
@@ -87,6 +121,8 @@ namespace Umbraco.Tests.Models.Mapping
public void To_Content_Item_Dto()
{
var contentType = MockedContentTypes.CreateSimpleContentType();
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+
var content = MockedContent.CreateSimpleContent(contentType);
FixUsers(content);
@@ -117,8 +153,8 @@ namespace Umbraco.Tests.Models.Mapping
public void To_Display_Model()
{
var contentType = MockedContentTypes.CreateSimpleContentType();
- var contentTypeServiceMock = Mock.Get(Current.Services.ContentTypeService);
- contentTypeServiceMock.Setup(x => x.Get(contentType.Id)).Returns(() => contentType);
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+ Mock.Get(_contentTypeService).Setup(x => x.Get(It.IsAny())).Returns(contentType);
var content = MockedContent.CreateSimpleContent(contentType);
@@ -127,7 +163,7 @@ namespace Umbraco.Tests.Models.Mapping
// need ids for tabs
var id = 1;
- foreach (var g in content.PropertyGroups)
+ foreach (var g in contentType.CompositionPropertyGroups)
g.Id = id++;
var result = Mapper.Map(content);
@@ -141,7 +177,7 @@ namespace Umbraco.Tests.Models.Mapping
AssertDisplayProperty(invariantContent, p);
}
- Assert.AreEqual(content.PropertyGroups.Count(), invariantContent.Tabs.Count());
+ Assert.AreEqual(contentType.CompositionPropertyGroups.Count(), invariantContent.Tabs.Count());
Assert.IsTrue(invariantContent.Tabs.First().IsActive);
Assert.IsTrue(invariantContent.Tabs.Except(new[] { invariantContent.Tabs.First() }).All(x => x.IsActive == false));
}
@@ -151,9 +187,8 @@ namespace Umbraco.Tests.Models.Mapping
{
var contentType = MockedContentTypes.CreateSimpleContentType();
contentType.PropertyGroups.Clear();
- var contentTypeServiceMock = Mock.Get(Current.Services.ContentTypeService);
- contentTypeServiceMock.Setup(x => x.Get(contentType.Id)).Returns(() => contentType);
-
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+ Mock.Get(_contentTypeService).Setup(x => x.Get(It.IsAny())).Returns(contentType);
var content = new Content("Home", -1, contentType) { Level = 1, SortOrder = 1, CreatorId = 0, WriterId = 0 };
@@ -168,7 +203,7 @@ namespace Umbraco.Tests.Models.Mapping
AssertDisplayProperty(invariantContent, p);
}
- Assert.AreEqual(content.PropertyGroups.Count(), invariantContent.Tabs.Count());
+ Assert.AreEqual(contentType.CompositionPropertyGroups.Count(), invariantContent.Tabs.Count());
}
[Test]
@@ -186,8 +221,8 @@ namespace Umbraco.Tests.Models.Mapping
p.Id = idSeed;
idSeed++;
}
- var contentTypeServiceMock = Mock.Get(Current.Services.ContentTypeService);
- contentTypeServiceMock.Setup(x => x.Get(contentType.Id)).Returns(() => contentType);
+ Mock.Get(_contentTypeService).As().Setup(x => x.Get(It.IsAny())).Returns(contentType);
+ Mock.Get(_contentTypeService).Setup(x => x.Get(It.IsAny())).Returns(contentType);
var content = MockedContent.CreateSimpleContent(contentType);
@@ -200,7 +235,7 @@ namespace Umbraco.Tests.Models.Mapping
}
//need ids for tabs
var id = 1;
- foreach (var g in content.PropertyGroups)
+ foreach (var g in contentType.CompositionPropertyGroups)
{
g.Id = id;
id++;
@@ -221,7 +256,7 @@ namespace Umbraco.Tests.Models.Mapping
AssertDisplayProperty(invariantContent, p);
}
- Assert.AreEqual(content.PropertyGroups.Count(), invariantContent.Tabs.Count() - 1);
+ Assert.AreEqual(contentType.CompositionPropertyGroups.Count(), invariantContent.Tabs.Count() - 1);
Assert.IsTrue(invariantContent.Tabs.Any(x => x.Label == Current.Services.TextService.Localize("general/properties")));
Assert.AreEqual(2, invariantContent.Tabs.Where(x => x.Label == Current.Services.TextService.Localize("general/properties")).SelectMany(x => x.Properties.Where(p => p.Alias.StartsWith("_umb_") == false)).Count());
}
diff --git a/src/Umbraco.Tests/Models/MemberTests.cs b/src/Umbraco.Tests/Models/MemberTests.cs
index c09f2e9460..5e92ad7ccf 100644
--- a/src/Umbraco.Tests/Models/MemberTests.cs
+++ b/src/Umbraco.Tests/Models/MemberTests.cs
@@ -67,20 +67,7 @@ namespace Umbraco.Tests.Models
Assert.AreEqual(clone.Id, member.Id);
Assert.AreEqual(clone.VersionId, member.VersionId);
Assert.AreEqual(clone.AdditionalData, member.AdditionalData);
- Assert.AreNotSame(clone.ContentType, member.ContentType);
Assert.AreEqual(clone.ContentType, member.ContentType);
- Assert.AreEqual(clone.ContentType.PropertyGroups.Count, member.ContentType.PropertyGroups.Count);
- for (var index = 0; index < member.ContentType.PropertyGroups.Count; index++)
- {
- Assert.AreNotSame(clone.ContentType.PropertyGroups[index], member.ContentType.PropertyGroups[index]);
- Assert.AreEqual(clone.ContentType.PropertyGroups[index], member.ContentType.PropertyGroups[index]);
- }
- Assert.AreEqual(clone.ContentType.PropertyTypes.Count(), member.ContentType.PropertyTypes.Count());
- for (var index = 0; index < member.ContentType.PropertyTypes.Count(); index++)
- {
- Assert.AreNotSame(clone.ContentType.PropertyTypes.ElementAt(index), member.ContentType.PropertyTypes.ElementAt(index));
- Assert.AreEqual(clone.ContentType.PropertyTypes.ElementAt(index), member.ContentType.PropertyTypes.ElementAt(index));
- }
Assert.AreEqual(clone.ContentTypeId, member.ContentTypeId);
Assert.AreEqual(clone.CreateDate, member.CreateDate);
Assert.AreEqual(clone.CreatorId, member.CreatorId);
@@ -112,6 +99,9 @@ namespace Umbraco.Tests.Models
Assert.AreEqual(clone.Properties[index], member.Properties[index]);
}
+ // this can be the same, it is immutable
+ Assert.AreSame(clone.ContentType, member.ContentType);
+
//This double verifies by reflection
var allProps = clone.GetType().GetProperties();
foreach (var propertyInfo in allProps)
diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests/Models/VariationTests.cs
index 0ccdabe928..36fb399fa7 100644
--- a/src/Umbraco.Tests/Models/VariationTests.cs
+++ b/src/Umbraco.Tests/Models/VariationTests.cs
@@ -227,6 +227,9 @@ namespace Umbraco.Tests.Models
// now it will work
contentType.Variations = ContentVariation.Culture;
+ // recreate content to re-capture content type variations
+ content = new Content("content", -1, contentType) { Id = 1, VersionId = 1 };
+
// invariant name works
content.Name = "name";
Assert.AreEqual("name", content.GetCultureName(null));
diff --git a/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs
index 459dbeb587..2c4f3f1908 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs
@@ -130,10 +130,11 @@ namespace Umbraco.Tests.Persistence.Repositories
var hasPropertiesContentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage");
ServiceContext.FileService.SaveTemplate(hasPropertiesContentType.DefaultTemplate); // else, FK violation on contentType!
+ contentTypeRepository.Save(hasPropertiesContentType);
+
IContent content1 = MockedContent.CreateSimpleContent(hasPropertiesContentType);
// save = create the initial version
- contentTypeRepository.Save(hasPropertiesContentType);
repository.Save(content1);
versions.Add(content1.VersionId); // the first version
@@ -399,9 +400,10 @@ namespace Umbraco.Tests.Persistence.Repositories
var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository);
var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage2", "Textpage");
ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType!
+ contentTypeRepository.Save(contentType);
+
IContent textpage = MockedContent.CreateSimpleContent(contentType);
- contentTypeRepository.Save(contentType);
repository.Save(textpage);
scope.Complete();
@@ -487,9 +489,10 @@ namespace Umbraco.Tests.Persistence.Repositories
var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository);
var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage");
ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType!
+ contentTypeRepository.Save(contentType);
+
var textpage = MockedContent.CreateSimpleContent(contentType);
- contentTypeRepository.Save(contentType);
repository.Save(textpage);
diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs
index cbd591950a..1c1b5e60f4 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs
@@ -61,8 +61,9 @@ namespace Umbraco.Tests.Persistence.Repositories
udb.EnableSqlCount = false;
var mediaType = MockedContentTypes.CreateSimpleMediaType("umbTextpage1", "Textpage");
- var media = MockedMedia.CreateSimpleMedia(mediaType, "hello", -1);
mediaTypeRepository.Save(mediaType);
+
+ var media = MockedMedia.CreateSimpleMedia(mediaType, "hello", -1);
repository.Save(media);
udb.EnableSqlCount = true;
@@ -271,7 +272,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var folder = MockedMedia.CreateMediaFolder(folderMediaType, -1);
repository.Save(folder);
}
-
+
var types = new[] { 1031 };
var query = scope.SqlContext.Query().Where(x => types.Contains(x.ContentTypeId));
@@ -302,7 +303,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var folder = MockedMedia.CreateMediaFolder(folderMediaType, -1);
repository.Save(folder);
}
-
+
var types = new[] { "Folder" };
var query = scope.SqlContext.Query().Where(x => types.Contains(x.ContentType.Alias));
diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
index dea15cd4ad..c46a090685 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
@@ -164,21 +164,19 @@ namespace Umbraco.Tests.Persistence.Repositories
var memberType = MockedContentTypes.CreateSimpleMemberType();
memberTypeRepository.Save(memberType);
-
var member = MockedMember.CreateSimpleMember(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty");
repository.Save(member);
-
var sut = repository.Get(member.Id);
- Assert.That(sut.ContentType.PropertyGroups.Count(), Is.EqualTo(2));
- Assert.That(sut.ContentType.PropertyTypes.Count(), Is.EqualTo(3 + Constants.Conventions.Member.GetStandardPropertyTypeStubs().Count));
+ Assert.That(memberType.CompositionPropertyGroups.Count(), Is.EqualTo(2));
+ Assert.That(memberType.CompositionPropertyTypes.Count(), Is.EqualTo(3 + Constants.Conventions.Member.GetStandardPropertyTypeStubs().Count));
Assert.That(sut.Properties.Count(), Is.EqualTo(3 + Constants.Conventions.Member.GetStandardPropertyTypeStubs().Count));
- var grp = sut.PropertyGroups.FirstOrDefault(x => x.Name == Constants.Conventions.Member.StandardPropertiesGroupName);
+ var grp = memberType.CompositionPropertyGroups.FirstOrDefault(x => x.Name == Constants.Conventions.Member.StandardPropertiesGroupName);
Assert.IsNotNull(grp);
var aliases = Constants.Conventions.Member.GetStandardPropertyTypeStubs().Select(x => x.Key).ToArray();
- foreach (var p in sut.PropertyTypes.Where(x => aliases.Contains(x.Alias)))
+ foreach (var p in memberType.CompositionPropertyTypes.Where(x => aliases.Contains(x.Alias)))
{
Assert.AreEqual(grp.Id, p.PropertyGroupId.Value);
}
diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs
index 8f750f9238..1d50fcac9e 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs
@@ -75,7 +75,7 @@ namespace Umbraco.Tests.Persistence.Repositories
// Act
repository.Save(user);
-
+
// Assert
Assert.That(user.HasIdentity, Is.True);
@@ -96,9 +96,9 @@ namespace Umbraco.Tests.Persistence.Repositories
// Act
repository.Save(user1);
-
+
repository.Save(use2);
-
+
// Assert
Assert.That(user1.HasIdentity, Is.True);
@@ -117,7 +117,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var user = MockedUser.CreateUser();
repository.Save(user);
-
+
// Act
var resolved = repository.Get((int)user.Id);
@@ -132,9 +132,7 @@ namespace Umbraco.Tests.Persistence.Repositories
public void Can_Perform_Update_On_UserRepository()
{
var ct = MockedContentTypes.CreateBasicContentType("test");
- var content = MockedContent.CreateBasicContent(ct);
var mt = MockedContentTypes.CreateSimpleMediaType("testmedia", "TestMedia");
- var media = MockedMedia.CreateSimpleMedia(mt, "asdf", -1);
// Arrange
var provider = TestObjects.GetScopeProvider(Logger);
@@ -147,11 +145,12 @@ namespace Umbraco.Tests.Persistence.Repositories
contentTypeRepo.Save(ct);
mediaTypeRepo.Save(mt);
-
+
+ var content = MockedContent.CreateBasicContent(ct);
+ var media = MockedMedia.CreateSimpleMedia(mt, "asdf", -1);
contentRepository.Save(content);
mediaRepository.Save(media);
-
var user = CreateAndCommitUserWithGroup(userRepository, userGroupRepository);
@@ -171,7 +170,7 @@ namespace Umbraco.Tests.Persistence.Repositories
resolved.Username = "newName";
userRepository.Save(resolved);
-
+
var updatedItem = (User) userRepository.Get(user.Id);
// Assert
@@ -204,13 +203,13 @@ namespace Umbraco.Tests.Persistence.Repositories
// Act
repository.Save(user);
-
+
var id = user.Id;
var repository2 = new UserRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, Mock.Of(),TestObjects.GetGlobalSettings());
repository2.Delete(user);
-
+
var resolved = repository2.Get((int) id);
@@ -373,7 +372,7 @@ namespace Umbraco.Tests.Persistence.Repositories
scope.Database.AsUmbracoDatabase().EnableSqlCount = false;
}
}
-
+
}
[Test]
@@ -429,7 +428,7 @@ namespace Umbraco.Tests.Persistence.Repositories
{
var user = MockedUser.CreateUser();
repository.Save(user);
-
+
var group = MockedUserGroup.CreateUserGroup();
userGroupRepository.AddOrUpdateGroupWithUsers(@group, new[] { user.Id });
diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs b/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs
index 1319d00c48..7a7aad6905 100644
--- a/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs
+++ b/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs
@@ -554,7 +554,6 @@ namespace Umbraco.Tests.Services
IContent contentItem = MockedContent.CreateTextpageContent(contentType1, "Testing", -1);
ServiceContext.ContentService.SaveAndPublish(contentItem);
var initProps = contentItem.Properties.Count;
- var initPropTypes = contentItem.PropertyTypes.Count();
//remove a property
contentType1.RemovePropertyType(contentType1.PropertyTypes.First().Alias);
@@ -563,7 +562,6 @@ namespace Umbraco.Tests.Services
//re-load it from the db
contentItem = ServiceContext.ContentService.GetById(contentItem.Id);
- Assert.AreEqual(initPropTypes - 1, contentItem.PropertyTypes.Count());
Assert.AreEqual(initProps - 1, contentItem.Properties.Count);
}
diff --git a/src/Umbraco.Tests/Services/MemberTypeServiceTests.cs b/src/Umbraco.Tests/Services/MemberTypeServiceTests.cs
index 459daa3da6..5f4a87c3eb 100644
--- a/src/Umbraco.Tests/Services/MemberTypeServiceTests.cs
+++ b/src/Umbraco.Tests/Services/MemberTypeServiceTests.cs
@@ -83,7 +83,6 @@ namespace Umbraco.Tests.Services
IMember member = MockedMember.CreateSimpleMember(memberType, "test", "test@test.com", "pass", "test");
ServiceContext.MemberService.Save(member);
var initProps = member.Properties.Count;
- var initPropTypes = member.PropertyTypes.Count();
//remove a property (NOT ONE OF THE DEFAULTS)
var standardProps = Constants.Conventions.Member.GetStandardPropertyTypeStubs();
@@ -93,7 +92,6 @@ namespace Umbraco.Tests.Services
//re-load it from the db
member = ServiceContext.MemberService.GetById(member.Id);
- Assert.AreEqual(initPropTypes - 1, member.PropertyTypes.Count());
Assert.AreEqual(initProps - 1, member.Properties.Count);
}
diff --git a/src/Umbraco.Tests/Testing/ContentBaseExtensions.cs b/src/Umbraco.Tests/Testing/ContentBaseExtensions.cs
index 58d4dfbd7f..85ecf03dee 100644
--- a/src/Umbraco.Tests/Testing/ContentBaseExtensions.cs
+++ b/src/Umbraco.Tests/Testing/ContentBaseExtensions.cs
@@ -1,5 +1,7 @@
using System;
using System.Linq;
+using Umbraco.Core;
+using Umbraco.Core.Composing;
using Umbraco.Core.Models;
namespace Umbraco.Tests.Testing
@@ -7,7 +9,7 @@ namespace Umbraco.Tests.Testing
public static class ContentBaseExtensions
{
///
- /// Set property values by alias with an annonymous object.
+ /// Set property values by alias with an anonymous object.
///
/// Does not support variants.
public static void PropertyValues(this IContentBase content, object value, string culture = null, string segment = null)
@@ -15,11 +17,13 @@ namespace Umbraco.Tests.Testing
if (value == null)
throw new Exception("No properties has been passed in");
+ var contentType = Current.Services.ContentTypeBaseServices.GetContentTypeOf(content);
+
var propertyInfos = value.GetType().GetProperties();
foreach (var propertyInfo in propertyInfos)
{
//Check if a PropertyType with alias exists thus being a valid property
- var propertyType = content.PropertyTypes.FirstOrDefault(x => x.Alias == propertyInfo.Name);
+ var propertyType = contentType.CompositionPropertyTypes.FirstOrDefault(x => x.Alias == propertyInfo.Name);
if (propertyType == null)
throw new Exception($"The property alias {propertyInfo.Name} is not valid, because no PropertyType with this alias exists");
diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
index 6fe921e13f..f7b1799d63 100644
--- a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
+++ b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
@@ -110,7 +110,7 @@ namespace Umbraco.Tests.UmbracoExamine
m.GetCultureName(It.IsAny()) == (string)x.Attribute("nodeName") &&
m.Path == (string)x.Attribute("path") &&
m.Properties == new PropertyCollection() &&
- m.ContentType == Mock.Of(mt =>
+ m.ContentType == Mock.Of(mt =>
mt.Alias == (string)x.Attribute("nodeTypeAlias") &&
mt.Id == (int)x.Attribute("nodeType"))))
.ToArray();
diff --git a/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs b/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs
index 37600e2f89..d0c09d3340 100644
--- a/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs
+++ b/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs
@@ -43,6 +43,14 @@ namespace Umbraco.Tests.Web.Controllers
[UmbracoTest(Database = UmbracoTestOptions.Database.None)]
public class ContentControllerTests : TestWithDatabaseBase
{
+ private IContentType _contentTypeForMockedContent;
+
+ public override void SetUp()
+ {
+ base.SetUp();
+ _contentTypeForMockedContent = null;
+ }
+
protected override void ComposeApplication(bool withApplication)
{
base.ComposeApplication(withApplication);
@@ -115,23 +123,42 @@ namespace Umbraco.Tests.Web.Controllers
};
}
- private IContent GetMockedContent()
+ private IContentType GetMockedContentType()
{
- var content = MockedContent.CreateSimpleContent(MockedContentTypes.CreateSimpleContentType());
- content.Id = 123;
- content.Path = "-1,123";
+ var contentType = MockedContentTypes.CreateSimpleContentType();
//ensure things have ids
var ids = 888;
- foreach (var g in content.PropertyGroups)
+ foreach (var g in contentType.CompositionPropertyGroups)
{
g.Id = ids;
ids++;
}
- foreach (var p in content.PropertyTypes)
+ foreach (var p in contentType.CompositionPropertyGroups)
{
p.Id = ids;
ids++;
}
+
+ return contentType;
+ }
+
+ private IContent GetMockedContent()
+ {
+ if (_contentTypeForMockedContent == null)
+ {
+ _contentTypeForMockedContent = GetMockedContentType();
+ Mock.Get(Current.Services.ContentTypeService)
+ .Setup(x => x.Get(_contentTypeForMockedContent.Id))
+ .Returns(_contentTypeForMockedContent);
+ Mock.Get(Current.Services.ContentTypeService)
+ .As()
+ .Setup(x => x.Get(_contentTypeForMockedContent.Id))
+ .Returns(_contentTypeForMockedContent);
+ }
+
+ var content = MockedContent.CreateSimpleContent(_contentTypeForMockedContent);
+ content.Id = 123;
+ content.Path = "-1,123";
return content;
}
@@ -229,7 +256,7 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance(),
Factory.GetInstance(),
helper);
-
+
return controller;
}
@@ -251,9 +278,6 @@ namespace Umbraco.Tests.Web.Controllers
{
ApiController CtrlFactory(HttpRequestMessage message, UmbracoContext umbracoContext, UmbracoHelper helper)
{
- var contentServiceMock = Mock.Get(Current.Services.ContentService);
- contentServiceMock.Setup(x => x.GetById(123)).Returns(() => GetMockedContent());
-
var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
var controller = new ContentController(
propertyEditorCollection,
@@ -336,15 +360,11 @@ namespace Umbraco.Tests.Web.Controllers
ApiController CtrlFactory(HttpRequestMessage message, UmbracoContext umbracoContext, UmbracoHelper helper)
{
-
var contentServiceMock = Mock.Get(Current.Services.ContentService);
contentServiceMock.Setup(x => x.GetById(123)).Returns(() => content);
contentServiceMock.Setup(x => x.Save(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(new OperationResult(OperationResultType.Success, new Core.Events.EventMessages())); //success
- var contentTypeServiceMock = Mock.Get(Current.Services.ContentTypeService);
- contentTypeServiceMock.Setup(x => x.Get(content.ContentTypeId)).Returns(() => MockedContentTypes.CreateSimpleContentType());
-
var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
var controller = new ContentController(
propertyEditorCollection,
@@ -369,8 +389,6 @@ namespace Umbraco.Tests.Web.Controllers
Assert.AreEqual(HttpStatusCode.OK, response.Item1.StatusCode);
var display = JsonConvert.DeserializeObject(response.Item2);
Assert.AreEqual(1, display.Variants.Count());
- Assert.AreEqual(content.PropertyGroups.Count(), display.Variants.ElementAt(0).Tabs.Count());
- Assert.AreEqual(content.PropertyTypes.Count(), display.Variants.ElementAt(0).Tabs.ElementAt(0).Properties.Count());
}
[Test]
@@ -380,15 +398,11 @@ namespace Umbraco.Tests.Web.Controllers
ApiController CtrlFactory(HttpRequestMessage message, UmbracoContext umbracoContext, UmbracoHelper helper)
{
-
var contentServiceMock = Mock.Get(Current.Services.ContentService);
contentServiceMock.Setup(x => x.GetById(123)).Returns(() => content);
contentServiceMock.Setup(x => x.Save(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(new OperationResult(OperationResultType.Success, new Core.Events.EventMessages())); //success
- var contentTypeServiceMock = Mock.Get(Current.Services.ContentTypeService);
- contentTypeServiceMock.Setup(x => x.Get(content.ContentTypeId)).Returns(() => MockedContentTypes.CreateSimpleContentType());
-
var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
var controller = new ContentController(
propertyEditorCollection,
@@ -428,15 +442,11 @@ namespace Umbraco.Tests.Web.Controllers
ApiController CtrlFactory(HttpRequestMessage message, UmbracoContext umbracoContext, UmbracoHelper helper)
{
-
var contentServiceMock = Mock.Get(Current.Services.ContentService);
contentServiceMock.Setup(x => x.GetById(123)).Returns(() => content);
contentServiceMock.Setup(x => x.Save(It.IsAny(), It.IsAny(), It.IsAny()))
.Returns(new OperationResult(OperationResultType.Success, new Core.Events.EventMessages())); //success
- var contentTypeServiceMock = Mock.Get(Current.Services.ContentTypeService);
- contentTypeServiceMock.Setup(x => x.Get(content.ContentTypeId)).Returns(() => MockedContentTypes.CreateSimpleContentType());
-
var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
var controller = new ContentController(
propertyEditorCollection,