From ee2d7bbb1b66ff5f0855fea6ef531e83af2795d2 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 29 Jan 2025 21:10:11 +0100 Subject: [PATCH] Excluded tags from trashed content (#18164) --- .../Repositories/Implement/TagRepository.cs | 7 +- .../Repositories/TagRepositoryTest.cs | 83 +++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs index ecc6600d4c..a722bea2a0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs @@ -387,7 +387,9 @@ WHERE r.tagId IS NULL"; }).ToList(); /// - public IEnumerable GetTagsForEntityType(TaggableObjectTypes objectType, string? group = null, + public IEnumerable GetTagsForEntityType( + TaggableObjectTypes objectType, + string? group = null, string? culture = null) { Sql sql = GetTagsSql(culture, true); @@ -401,6 +403,9 @@ WHERE r.tagId IS NULL"; .Where(dto => dto.NodeObjectType == nodeObjectType); } + sql = sql + .Where(dto => !dto.Trashed); + if (group.IsNullOrWhiteSpace() == false) { sql = sql diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TagRepositoryTest.cs b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TagRepositoryTest.cs index 1ce5eeefd9..297bd50699 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TagRepositoryTest.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/TagRepositoryTest.cs @@ -638,6 +638,89 @@ public class TagRepositoryTest : UmbracoIntegrationTest } } + [Test] + public void Can_Get_Tags_For_Entity_Type_Excluding_Trashed_Entity() + { + 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); + content1.PublishCulture(CultureImpact.Invariant); + content1.PublishedState = PublishedState.Publishing; + DocumentRepository.Save(content1); + + var content2 = ContentBuilder.CreateSimpleContent(contentType); + content2.PublishCulture(CultureImpact.Invariant); + content2.PublishedState = PublishedState.Publishing; + content2.Trashed = true; + DocumentRepository.Save(content2); + + var mediaType = MediaTypeBuilder.CreateImageMediaType("image2"); + MediaTypeRepository.Save(mediaType); + + var media1 = MediaBuilder.CreateMediaImage(mediaType, -1); + MediaRepository.Save(media1); + + var media2 = MediaBuilder.CreateMediaImage(mediaType, -1); + media2.Trashed = true; + MediaRepository.Save(media2); + + var repository = CreateRepository(provider); + Tag[] tags = + { + new Tag {Text = "tag1", Group = "test"}, + new Tag {Text = "tag2", Group = "test1"}, + new Tag {Text = "tag3", Group = "test"} + }; + + Tag[] tags2 = +{ + new Tag {Text = "tag4", Group = "test"}, + new Tag {Text = "tag5", Group = "test1"}, + new Tag {Text = "tag6", Group = "test"} + }; + + repository.Assign( + content1.Id, + contentType.PropertyTypes.First().Id, + tags, + false); + + repository.Assign( + content2.Id, + contentType.PropertyTypes.First().Id, + tags2, + false); + + repository.Assign( + media1.Id, + contentType.PropertyTypes.First().Id, + tags, + false); + + repository.Assign( + media2.Id, + contentType.PropertyTypes.First().Id, + tags2, + false); + + var result1 = repository.GetTagsForEntityType(TaggableObjectTypes.Content).ToArray(); + var result2 = repository.GetTagsForEntityType(TaggableObjectTypes.Media).ToArray(); + var result3 = repository.GetTagsForEntityType(TaggableObjectTypes.All).ToArray(); + + const string ExpectedTags = "tag1,tag2,tag3"; + Assert.AreEqual(ExpectedTags, string.Join(",", result1.Select(x => x.Text))); + Assert.AreEqual(ExpectedTags, string.Join(",", result2.Select(x => x.Text))); + Assert.AreEqual(ExpectedTags, string.Join(",", result3.Select(x => x.Text))); + } + } + [Test] public void Can_Get_Tags_For_Entity_Type() {