diff --git a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs index 7cd7069751..d8bfe62deb 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data; using System.Globalization; using System.Linq; using Umbraco.Core.Models; @@ -8,6 +9,7 @@ using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Factories; using Umbraco.Core.Persistence.Querying; +using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Persistence.Repositories @@ -119,6 +121,15 @@ namespace Umbraco.Core.Persistence.Repositories { ((DataTypeDefinition)entity).AddingEntity(); + //Cannot add a duplicate data type + var exists = Database.ExecuteScalar(@"SELECT COUNT(*) FROM cmsDataType +INNER JOIN umbracoNode ON cmsDataType.nodeId = umbracoNode.id +WHERE umbracoNode." + SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName("text") + "= @name", new {name = entity.Name}); + if (exists > 0) + { + throw new DuplicateNameException("A data type with the name " + entity.Name + " already exists"); + } + var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); var dto = factory.BuildDto(entity); diff --git a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs index fc4ad0fd05..4becdc9556 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs @@ -1,4 +1,5 @@ using System; +using System.Data; using System.Linq; using NUnit.Framework; using Umbraco.Core; @@ -28,6 +29,57 @@ namespace Umbraco.Tests.Persistence.Repositories return dataTypeDefinitionRepository; } + [Test] + public void Can_Create() + { + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + int id; + using (var repository = CreateRepository(unitOfWork)) + { + var dataTypeDefinition = new DataTypeDefinition(-1, new Guid(Constants.PropertyEditors.RadioButtonList)) {Name = "test"}; + + repository.AddOrUpdate(dataTypeDefinition); + + unitOfWork.Commit(); + id = dataTypeDefinition.Id; + Assert.That(id, Is.GreaterThan(0)); + } + using (var repository = CreateRepository(unitOfWork)) + { + // Act + var dataTypeDefinition = repository.Get(id); + + // Assert + Assert.That(dataTypeDefinition, Is.Not.Null); + Assert.That(dataTypeDefinition.HasIdentity, Is.True); + } + } + + [Test] + public void Cannot_Create_Duplicate_Name() + { + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + int id; + using (var repository = CreateRepository(unitOfWork)) + { + var dataTypeDefinition = new DataTypeDefinition(-1, new Guid(Constants.PropertyEditors.RadioButtonList)) { Name = "test" }; + repository.AddOrUpdate(dataTypeDefinition); + unitOfWork.Commit(); + id = dataTypeDefinition.Id; + Assert.That(id, Is.GreaterThan(0)); + } + using (var repository = CreateRepository(unitOfWork)) + { + var dataTypeDefinition = new DataTypeDefinition(-1, new Guid(Constants.PropertyEditors.RadioButtonList)) { Name = "test" }; + repository.AddOrUpdate(dataTypeDefinition); + + Assert.Throws(unitOfWork.Commit); + + } + } + [Test] public void Can_Instantiate_Repository_From_Resolver() { diff --git a/src/Umbraco.Web.UI/umbraco/create/simple.ascx b/src/Umbraco.Web.UI/umbraco/create/simple.ascx index 89ef19ede0..4a965a4eb1 100644 --- a/src/Umbraco.Web.UI/umbraco/create/simple.ascx +++ b/src/Umbraco.Web.UI/umbraco/create/simple.ascx @@ -1,4 +1,4 @@ -<%@ Control Language="c#" AutoEventWireup="True" Codebehind="simple.ascx.cs" Inherits="umbraco.cms.presentation.create.controls.simple" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> +<%@ Control Language="c#" AutoEventWireup="True" Inherits="umbraco.cms.presentation.create.controls.simple" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> <%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> @@ -13,9 +13,10 @@ +