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()
{