Fixes U4-2791 Error creating node containing @ v6.1.4.

Adding unit test which covers both U4-2791 and U4-2607
This commit is contained in:
Morten Christensen
2013-09-05 10:44:28 +02:00
parent 3393b6b0da
commit 0c05836537
4 changed files with 40 additions and 6 deletions

View File

@@ -64,8 +64,11 @@ namespace Umbraco.Core.Persistence.Querying
public virtual string EscapeAtArgument(string exp)
{
if (exp.StartsWith("@"))
return string.Concat("@", exp);
/*if (exp.StartsWith("@"))
return string.Concat("@", exp);*/
if (exp.Contains("@"))
return exp.Replace("@", "@@");
return exp;
}

View File

@@ -248,9 +248,9 @@ namespace Umbraco.Core.Persistence.Querying
case "StartsWith":
return string.Format("upper({0}) like '{1}%'", r, EscapeAtArgument(RemoveQuote(args[0].ToString().ToUpper())));
case "EndsWith":
return string.Format("upper({0}) like '%{1}'", r, RemoveQuote(args[0].ToString()).ToUpper());
return string.Format("upper({0}) like '%{1}'", r, EscapeAtArgument(RemoveQuote(args[0].ToString()).ToUpper()));
case "Contains":
return string.Format("{0} like '%{1}%'", r, RemoveQuote(args[0].ToString()).ToUpper());
return string.Format("{0} like '%{1}%'", r, EscapeAtArgument(RemoveQuote(args[0].ToString()).ToUpper()));
case "Substring":
var startIndex = Int32.Parse(args[0].ToString()) + 1;
if (args.Count == 2)

View File

@@ -252,9 +252,9 @@ namespace Umbraco.Core.Persistence.Querying
case "StartsWith":
return string.Format("upper({0}) like '{1}%'", r, EscapeAtArgument(RemoveQuote(args[0].ToString().ToUpper())));
case "EndsWith":
return string.Format("upper({0}) like '%{1}'", r, RemoveQuote(args[0].ToString()).ToUpper());
return string.Format("upper({0}) like '%{1}'", r, EscapeAtArgument(RemoveQuote(args[0].ToString()).ToUpper()));
case "Contains":
return string.Format("upper({0}) like '%{1}%'", r, RemoveQuote(args[0].ToString()).ToUpper());
return string.Format("upper({0}) like '%{1}%'", r, EscapeAtArgument(RemoveQuote(args[0].ToString()).ToUpper()));
case "Substring":
var startIndex = Int32.Parse(args[0].ToString()) + 1;
if (args.Count == 2)

View File

@@ -106,6 +106,37 @@ namespace Umbraco.Tests.Persistence.Repositories
Assert.That(textpage.HasIdentity, Is.True);
}
//Covers issue U4-2791 and U4-2607
[Test]
public void Can_Save_Content_With_AtSign_In_Name_On_ContentRepository()
{
// Arrange
var provider = new PetaPocoUnitOfWorkProvider();
var unitOfWork = provider.GetUnitOfWork();
var contentTypeRepository = RepositoryResolver.Current.ResolveByType<IContentTypeRepository>(unitOfWork);
var repository = RepositoryResolver.Current.ResolveByType<IContentRepository>(unitOfWork);
ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage");
Content textpage = MockedContent.CreateSimpleContent(contentType, "test@umbraco.org", -1);
Content anotherTextpage = MockedContent.CreateSimpleContent(contentType, "@lightgiants", -1);
// Act
contentTypeRepository.AddOrUpdate(contentType);
repository.AddOrUpdate(textpage);
repository.AddOrUpdate(anotherTextpage);
unitOfWork.Commit();
// Assert
Assert.That(contentType.HasIdentity, Is.True);
Assert.That(textpage.HasIdentity, Is.True);
var content = repository.Get(textpage.Id);
Assert.That(content.Name, Is.EqualTo(textpage.Name));
var content2 = repository.Get(anotherTextpage.Id);
Assert.That(content2.Name, Is.EqualTo(anotherTextpage.Name));
}
[Test]
public void Can_Perform_Multiple_Adds_On_ContentRepository()
{