diff --git a/src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs b/src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs index 7120bd37d4ca..3bd325bc8094 100644 --- a/src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs +++ b/src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs @@ -112,7 +112,10 @@ public override ValueSetValidationResult Validate(ValueSet valueSet) return new ValueSetValidationResult(ValueSetValidationStatus.Failed, valueSet); } - var isFiltered = baseValidate.Status == ValueSetValidationStatus.Filtered; + if (baseValidate.Status == ValueSetValidationStatus.Filtered) + { + return new ValueSetValidationResult(ValueSetValidationStatus.Filtered, valueSet); + } var filteredValues = valueSet.Values.ToDictionary(x => x.Key, x => x.Value.ToList()); //check for published content @@ -134,17 +137,16 @@ public override ValueSetValidationResult Validate(ValueSet valueSet) { //so this valueset is for a content that varies by culture, now check for non-published cultures and remove those values foreach (KeyValuePair> publishField in valueSet.Values - .Where(x => x.Key.StartsWith($"{UmbracoExamineFieldNames.PublishedFieldName}_")).ToList()) + .Where(x => x.Key.StartsWith($"{UmbracoExamineFieldNames.PublishedFieldName}_")).ToArray()) { if (publishField.Value.Count <= 0 || !publishField.Value[0].Equals("y")) { //this culture is not published, so remove all of these culture values var cultureSuffix = publishField.Key.Substring(publishField.Key.LastIndexOf('_')); foreach (KeyValuePair> cultureField in valueSet.Values - .Where(x => x.Key.InvariantEndsWith(cultureSuffix)).ToList()) + .Where(x => x.Key.InvariantEndsWith(cultureSuffix)).ToArray()) { filteredValues.Remove(cultureField.Key); - isFiltered = true; } } } @@ -167,13 +169,12 @@ public override ValueSetValidationResult Validate(ValueSet valueSet) return new ValueSetValidationResult(ValueSetValidationStatus.Failed, valueSet); } - if (pathValues[0].ToString().IsNullOrWhiteSpace()) + string? path = pathValues[0].ToString(); + if (path.IsNullOrWhiteSpace()) { return new ValueSetValidationResult(ValueSetValidationStatus.Failed, valueSet); } - var path = pathValues[0].ToString(); - var filteredValueSet = new ValueSet(valueSet.Id, valueSet.Category, valueSet.ItemType, filteredValues.ToDictionary(x => x.Key, x => (IEnumerable)x.Value)); // We need to validate the path of the content based on ParentId, protected content and recycle bin rules. // We cannot return FAILED here because we need the value set to get into the indexer and then deal with it from there @@ -185,7 +186,6 @@ public override ValueSetValidationResult Validate(ValueSet valueSet) return new ValueSetValidationResult(ValueSetValidationStatus.Filtered, filteredValueSet); } - return new ValueSetValidationResult( - isFiltered ? ValueSetValidationStatus.Filtered : ValueSetValidationStatus.Valid, filteredValueSet); + return new ValueSetValidationResult(ValueSetValidationStatus.Valid, filteredValueSet); } } diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Examine/UmbracoContentValueSetValidatorTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Examine/UmbracoContentValueSetValidatorTests.cs index c3d357c477eb..fd20632846fc 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Examine/UmbracoContentValueSetValidatorTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Examine/UmbracoContentValueSetValidatorTests.cs @@ -416,7 +416,7 @@ public void Published_Only_With_Variants() Assert.IsTrue(valueSet.Values.ContainsKey("title_es-ES")); result = validator.Validate(valueSet); - Assert.AreEqual(ValueSetValidationStatus.Filtered, result.Status); + Assert.AreEqual(ValueSetValidationStatus.Valid, result.Status); Assert.AreEqual(7, result.ValueSet.Values.Count()); // filtered to 7 values (removes es-es values) Assert.IsFalse(result.ValueSet.Values.ContainsKey($"{UmbracoExamineFieldNames.PublishedFieldName}_es-es"));