Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public void Assign(int contentId, int propertyTypeId, IEnumerable<ITag> tags, bo
var sql1 = $@"INSERT INTO cmsTags (tag, {group}, languageId)
SELECT tagSet.tag, tagSet.{group}, tagSet.languageId
FROM {tagSetSql}
LEFT OUTER JOIN cmsTags ON (tagSet.tag = cmsTags.tag AND tagSet.{group} = cmsTags.{group} AND COALESCE(tagSet.languageId, -1) = COALESCE(cmsTags.languageId, -1))
LEFT OUTER JOIN cmsTags ON (tagSet.tag LIKE cmsTags.tag AND tagSet.{group} = cmsTags.{group} AND COALESCE(tagSet.languageId, -1) = COALESCE(cmsTags.languageId, -1))
WHERE cmsTags.id IS NULL";

Database.Execute(sql1);
Expand Down Expand Up @@ -321,7 +321,7 @@ public IEnumerable<TaggedEntity> GetTaggedEntitiesByTag(TaggableObjectTypes obje
Sql<ISqlContext> sql = GetTaggedEntitiesSql(objectType, culture);

sql = sql
.Where<TagDto>(dto => dto.Text == tag);
.WhereLike<TagDto>(dto => dto.Text, tag);

if (group.IsNullOrWhiteSpace() == false)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Tests.Common.Testing;
using Umbraco.Cms.Tests.Integration.Testing;
using static Umbraco.Cms.Core.Constants.Conventions;

namespace Umbraco.Cms.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositories;

Expand Down Expand Up @@ -98,6 +99,45 @@ public void Can_Create_Tag_Relations()
}
}

[Test]
public void Can_Create_Tag_Relations_With_Mixed_Casing()
{
var provider = ScopeProvider;
using (ScopeProvider.CreateScope())
{
var template = TemplateBuilder.CreateTextPageTemplate();
FileService.SaveTemplate(template);

var contentType =
ContentTypeBuilder.CreateSimpleContentType("test", "Test", defaultTemplateId: template.Id);
ContentTypeRepository.Save(contentType);

var content1 = ContentBuilder.CreateSimpleContent(contentType);
var content2 = ContentBuilder.CreateSimpleContent(contentType);
DocumentRepository.Save(content1);
DocumentRepository.Save(content2);

var repository = CreateRepository(provider);
Tag[] tags1 = { new Tag { Text = "tag1", Group = "test" } };
repository.Assign(
content1.Id,
contentType.PropertyTypes.First().Id,
tags1,
false);

// Note the casing is different from tags1, but both should be considered equivalent
Tag[] tags2 = { new Tag { Text = "TAG1", Group = "test" } };
repository.Assign(
content2.Id,
contentType.PropertyTypes.First().Id,
tags2,
false);

// The template should have only one tag, despite case differences
Assert.AreEqual(1, repository.GetTaggedEntitiesByTag(TaggableObjectTypes.Content, "tag1").Count());
}
}

[Test]
public void Can_Append_Tag_Relations()
{
Expand Down