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 @@ -69,7 +69,9 @@ public bool IsDocumentPublished(Guid documentKey, string culture)

if (_publishedCultures.TryGetValue(documentKey, out ISet<string>? publishedCultures))
{
return publishedCultures.Contains(culture, StringComparer.InvariantCultureIgnoreCase);
// If "*" is provided as the culture, we consider this as "published in any culture". This aligns
// with behaviour in Umbraco 13.
return culture == Constants.System.InvariantCulture || publishedCultures.Contains(culture, StringComparer.InvariantCultureIgnoreCase);
}

_logger.LogDebug("Document {DocumentKey} not found in the publish status cache", documentKey);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Extensions;

Expand Down Expand Up @@ -40,13 +40,14 @@ public IEnumerable<IPublishedContent> FilterAvailable(IEnumerable<Guid> candidat
_publishStatusQueryService.IsDocumentPublished(key, culture)
&& _publishStatusQueryService.HasPublishedAncestorPath(key));

return WhereIsInvariantOrHasCulture(candidateKeys, culture, preview).ToArray();
return WhereIsInvariantOrHasCultureOrRequestedAllCultures(candidateKeys, culture, preview).ToArray();
}

private IEnumerable<IPublishedContent> WhereIsInvariantOrHasCulture(IEnumerable<Guid> keys, string culture, bool preview)
private IEnumerable<IPublishedContent> WhereIsInvariantOrHasCultureOrRequestedAllCultures(IEnumerable<Guid> keys, string culture, bool preview)
=> keys
.Select(key => _publishedContentCache.GetById(preview, key))
.WhereNotNull()
.Where(content => content.ContentType.VariesByCulture() is false
.Where(content => culture == Constants.System.InvariantCulture
|| content.ContentType.VariesByCulture() is false
|| content.Cultures.ContainsKey(culture));
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Moq;
using Moq;

Check notice on line 1 in tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/PublishStatus/PublishedContentStatusFilteringServiceTests.cs

View check run for this annotation

CodeScene Delta Analysis / CodeScene Code Health Review (main)

✅ No longer an issue: String Heavy Function Arguments

The ratio of strings in function arguments is no longer above the threshold
using NUnit.Framework;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
Expand Down Expand Up @@ -44,9 +45,10 @@

[TestCase("da-DK", 3)]
[TestCase("en-US", 4)]
[TestCase("*", 5)]
public void FilterAvailable_Variant_ForNonPreview_YieldsPublishedItemsInCulture(string culture, int expectedNumberOfChildren)
{
var (sut, items) = SetupVariant(false, culture);
var (sut, items) = SetupVariant(false, culture == Constants.System.InvariantCulture ? "en-US" : culture);

var children = sut.FilterAvailable(items.Keys, culture).ToArray();
Assert.AreEqual(expectedNumberOfChildren, children.Length);
Expand All @@ -70,51 +72,70 @@
{
Assert.AreEqual(8, children[2].Id);
}

if (culture == Constants.System.InvariantCulture)
{
Assert.AreEqual(4, children[2].Id);
Assert.AreEqual(6, children[3].Id);
Assert.AreEqual(8, children[4].Id);
}
}

[TestCase("da-DK")]
[TestCase("en-US")]
public void FilterAvailable_Variant_ForPreview_YieldsUnpublishedItemsInCulture(string culture)
[TestCase("da-DK", 7)]
[TestCase("en-US", 7)]
[TestCase("*", 10)]
public void FilterAvailable_Variant_ForPreview_YieldsUnpublishedItemsInCulture(string culture, int expectedNumberOfChildren)
{
var (sut, items) = SetupVariant(true, culture);
var (sut, items) = SetupVariant(true, culture == Constants.System.InvariantCulture ? "en-US" : culture);

var children = sut.FilterAvailable(items.Keys, culture).ToArray();
Assert.AreEqual(7, children.Length);
Assert.AreEqual(expectedNumberOfChildren, children.Length);

// IDs 0 through 3 exist in both en-US and da-DK
Assert.Multiple(() =>
{
Assert.AreEqual(0, children[0].Id);
Assert.AreEqual(1, children[1].Id);
Assert.AreEqual(2, children[2].Id);
Assert.AreEqual(3, children[3].Id);
});

// IDs 4 through 6 exist only in en-US
if (culture == "en-US")
{
Assert.AreEqual(4, children[4].Id);
Assert.AreEqual(5, children[5].Id);
Assert.AreEqual(6, children[6].Id);
}

// IDs 7 through 9 exist only in da-DK
if (culture == "da-DK")
{
Assert.AreEqual(7, children[4].Id);
Assert.AreEqual(8, children[5].Id);
Assert.AreEqual(9, children[6].Id);
}

if (culture == Constants.System.InvariantCulture)
{
Assert.AreEqual(4, children[4].Id);
Assert.AreEqual(5, children[5].Id);
Assert.AreEqual(6, children[6].Id);
Assert.AreEqual(7, children[7].Id);
Assert.AreEqual(8, children[8].Id);
Assert.AreEqual(9, children[9].Id);
}

Check warning on line 127 in tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/PublishStatus/PublishedContentStatusFilteringServiceTests.cs

View check run for this annotation

CodeScene Delta Analysis / CodeScene Code Health Review (main)

❌ New issue: Large Assertion Blocks

The test suite contains 5 assertion blocks with at least 4 assertions, threshold = 4. This test file has several blocks of large, consecutive assert statements. Avoid adding more.
}

[TestCase("da-DK")]
[TestCase("en-US")]
public void FilterAvailable_MixedVariance_ForNonPreview_YieldsPublishedItemsInCultureOrInvariant(string culture)
[TestCase("da-DK", 4)]
[TestCase("en-US", 4)]
[TestCase("*", 5)]
public void FilterAvailable_MixedVariance_ForNonPreview_YieldsPublishedItemsInCultureOrInvariant(string culture, int expectedNumberOfChildren)
{
var (sut, items) = SetupMixedVariance(false, culture);
var (sut, items) = SetupMixedVariance(false, culture == Constants.System.InvariantCulture ? "en-US" : culture);

var children = sut.FilterAvailable(items.Keys, culture).ToArray();
Assert.AreEqual(4, children.Length);
Assert.AreEqual(expectedNumberOfChildren, children.Length);

// IDs 0 through 2 are invariant - only even IDs are published
Assert.Multiple(() =>
Expand All @@ -140,16 +161,23 @@
{
Assert.AreEqual(8, children[3].Id);
}

if (culture == Constants.System.InvariantCulture)
{
Assert.AreEqual(6, children[3].Id);
Assert.AreEqual(8, children[4].Id);
}
}

[TestCase("da-DK")]
[TestCase("en-US")]
public void FilterAvailable_MixedVariance_FoPreview_YieldsPublishedItemsInCultureOrInvariant(string culture)
[TestCase("da-DK", 8)]
[TestCase("en-US", 8)]
[TestCase("*", 10)]
public void FilterAvailable_MixedVariance_ForPreview_YieldsPublishedItemsInCultureOrInvariant(string culture, int expectedNumberOfChildren)
{
var (sut, items) = SetupMixedVariance(true, culture);
var (sut, items) = SetupMixedVariance(true, culture == Constants.System.InvariantCulture ? "en-US" : culture);

var children = sut.FilterAvailable(items.Keys, culture).ToArray();
Assert.AreEqual(8, children.Length);
Assert.AreEqual(expectedNumberOfChildren, children.Length);

// IDs 0 through 2 are invariant
Assert.Multiple(() =>
Expand Down Expand Up @@ -180,6 +208,14 @@
Assert.AreEqual(8, children[6].Id);
Assert.AreEqual(9, children[7].Id);
}

if (culture == Constants.System.InvariantCulture)
{
Assert.AreEqual(6, children[6].Id);
Assert.AreEqual(7, children[7].Id);
Assert.AreEqual(8, children[8].Id);
Assert.AreEqual(9, children[9].Id);
}
}

// sets up invariant test data:
Expand Down Expand Up @@ -328,7 +364,7 @@
.Returns((Guid key, string culture) => items
.TryGetValue(key, out var item)
&& idIsPublished(item.Id)
&& (item.ContentType.VariesByCulture() is false || item.Cultures.ContainsKey(culture)));
&& (culture == Constants.System.InvariantCulture || item.ContentType.VariesByCulture() is false || item.Cultures.ContainsKey(culture)));
publishStatusQueryService
.Setup(s => s.HasPublishedAncestorPath(It.IsAny<Guid>()))
.Returns(true);
Expand Down