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
43 changes: 13 additions & 30 deletions tests/Umbraco.Tests.Common/Builders/ContentEditingBaseBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,25 @@
namespace Umbraco.Cms.Tests.Common.Builders;

public abstract class ContentEditingBaseBuilder<TCreateModel> : BuilderBase<TCreateModel>,
IWithInvariantNameBuilder,
IWithKeyBuilder,
IWithContentTypeKeyBuilder,
IWithParentKeyBuilder,
IBuildContentTypes
where TCreateModel : ContentCreationModelBase, new()
{
protected TCreateModel _model = new();
private List<ContentEditingPropertyValueBuilder<ContentEditingBaseBuilder<TCreateModel>>> _invariantProperties = [];
private List<ContentEditingPropertyValueBuilder<ContentEditingBaseBuilder<TCreateModel>>> _properties = [];
private List<ContentEditingVariantBuilder<ContentEditingBaseBuilder<TCreateModel>>> _variants = [];
private Guid _contentTypeKey;
private Guid? _parentKey;
private Guid? _key;
private string _invariantName;

Guid? IWithKeyBuilder.Key
{
get => _key;
set => _key = value;
}

string IWithInvariantNameBuilder.InvariantName
{
get => _invariantName;
set => _invariantName = value;
}

Guid? IWithParentKeyBuilder.ParentKey
{
get => _parentKey;
Expand All @@ -45,44 +37,35 @@ Guid IWithContentTypeKeyBuilder.ContentTypeKey
set => _contentTypeKey = value;
}

public ContentEditingPropertyValueBuilder<ContentEditingBaseBuilder<TCreateModel>> AddInvariantProperty()
public ContentEditingVariantBuilder<ContentEditingBaseBuilder<TCreateModel>> AddVariant()
{
var builder = new ContentEditingPropertyValueBuilder<ContentEditingBaseBuilder<TCreateModel>>(this);
_invariantProperties.Add(builder);
var builder = new ContentEditingVariantBuilder<ContentEditingBaseBuilder<TCreateModel>>(this);
_variants.Add(builder);
return builder;
}

public ContentEditingVariantBuilder<ContentEditingBaseBuilder<TCreateModel>> AddVariant()
public ContentEditingPropertyValueBuilder<ContentEditingBaseBuilder<TCreateModel>> AddProperty()
{
var builder = new ContentEditingVariantBuilder<ContentEditingBaseBuilder<TCreateModel>>(this);
_variants.Add(builder);
var builder = new ContentEditingPropertyValueBuilder<ContentEditingBaseBuilder<TCreateModel>>(this);
_properties.Add(builder);
return builder;
}

public override TCreateModel Build()
{
if (_variants.Any() is false)
{
throw new InvalidOperationException("Expected at least one variant (invariant is also a variant).");
}

if (_parentKey is not null)
{
_model.ParentKey = _parentKey;
}

_model.ContentTypeKey = _contentTypeKey;
_model.Key = _key ?? Guid.NewGuid();
_model.Properties = _invariantProperties
.Select(p => p.Build())
.Union(_variants.SelectMany(variant => variant.GetProperties().Select(p => p.Build())))
.ToArray();

if (_invariantName.IsNullOrWhiteSpace() is false)
{
if (_variants.Any())
{
throw new InvalidOperationException("Cannot combine invariant and variant variants.");
}

AddVariant().WithName(_invariantName);
}

_model.Properties = _properties.Select(p => p.Build()).ToArray();
_model.Variants = _variants.Select(x => x.Build()).ToList();

return _model;
Expand Down
54 changes: 34 additions & 20 deletions tests/Umbraco.Tests.Common/Builders/ContentEditingBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,18 @@ public static ContentCreateModel CreateBasicContent(Guid contentTypeKey, Guid? k
new ContentEditingBuilder()
.WithKey(key)
.WithContentTypeKey(contentTypeKey)
.WithInvariantName("Home")
.AddVariant()
.WithName("Home")
.Done()
.Build();

public static ContentCreateModel CreateSimpleContent(Guid contentTypeKey) =>
new ContentEditingBuilder()
.WithContentTypeKey(contentTypeKey)
.WithInvariantName("Home")
.AddInvariantProperty()
.AddVariant()
.WithName("Home")
.Done()
.AddProperty()
.WithAlias("title")
.WithValue("Welcome to our Home page")
.Done()
Expand All @@ -43,9 +47,11 @@ public static ContentCreateModel CreateSimpleContent(Guid contentTypeKey) =>
public static ContentCreateModel CreateSimpleContent(Guid contentTypeKey, string name, Guid? parentKey) =>
new ContentEditingBuilder()
.WithContentTypeKey(contentTypeKey)
.WithInvariantName(name)
.AddVariant()
.WithName(name)
.Done()
.WithParentKey(parentKey)
.AddInvariantProperty()
.AddProperty()
.WithAlias("title")
.WithValue("Welcome to our Home page")
.Done()
Expand All @@ -54,8 +60,10 @@ public static ContentCreateModel CreateSimpleContent(Guid contentTypeKey, string
public static ContentCreateModel CreateSimpleContent(Guid contentTypeKey, string name) =>
new ContentEditingBuilder()
.WithContentTypeKey(contentTypeKey)
.WithInvariantName(name)
.AddInvariantProperty()
.AddVariant()
.WithName(name)
.Done()
.AddProperty()
.WithAlias("title")
.WithValue("Welcome to our Home page")
.Done()
Expand All @@ -64,13 +72,15 @@ public static ContentCreateModel CreateSimpleContent(Guid contentTypeKey, string
public static ContentCreateModel CreateContentWithTwoInvariantProperties(Guid contentTypeKey, string name, string firstPropertyAlias, string firstPropertyValue, string secondPropertyAlias, string secondPropertyValue, Guid? parentKey) =>
new ContentEditingBuilder()
.WithContentTypeKey(contentTypeKey)
.WithInvariantName(name)
.AddVariant()
.WithName(name)
.Done()
.WithParentKey(parentKey)
.AddInvariantProperty()
.AddProperty()
.WithAlias(firstPropertyAlias)
.WithValue(firstPropertyValue)
.Done()
.AddInvariantProperty()
.AddProperty()
.WithAlias(secondPropertyAlias)
.WithValue(secondPropertyValue)
.Done()
Expand All @@ -79,8 +89,10 @@ public static ContentCreateModel CreateContentWithTwoInvariantProperties(Guid co
public static ContentCreateModel CreateContentWithOneInvariantProperty(Guid contentTypeKey, string name, string propertyAlias, object propertyValue) =>
new ContentEditingBuilder()
.WithContentTypeKey(contentTypeKey)
.WithInvariantName(name)
.AddInvariantProperty()
.AddVariant()
.WithName(name)
.Done()
.AddProperty()
.WithAlias(propertyAlias)
.WithValue(propertyValue)
.Done()
Expand All @@ -92,18 +104,20 @@ public static ContentCreateModel CreateContentWithTwoVariantProperties(Guid cont
.AddVariant()
.WithCulture(firstCulture)
.WithName(firstCulture)
.AddProperty()
.WithAlias(propertyAlias)
.WithValue(propertyName)
.Done()
.Done()
.AddVariant()
.WithCulture(secondCulture)
.WithName(secondCulture)
.AddProperty()
.WithAlias(propertyAlias)
.WithValue(propertyName)
.Done()
.Done()
.AddProperty()
.WithCulture(firstCulture)
.WithAlias(propertyAlias)
.WithValue(propertyName)
.Done()
.AddProperty()
.WithCulture(secondCulture)
.WithAlias(propertyAlias)
.WithValue(propertyName)
.Done()
.Build();
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
namespace Umbraco.Cms.Tests.Common.Builders;

public class ContentEditingPropertyValueBuilder<TParent>(TParent parentBuilder)
: ChildBuilderBase<TParent, PropertyValueModel>(parentBuilder), IWithAliasBuilder, IWithValueBuilder, IWithCultureBuilder
: ChildBuilderBase<TParent, PropertyValueModel>(parentBuilder), IWithAliasBuilder, IWithValueBuilder, IWithCultureBuilder, IWithSegmentBuilder
{
private string _alias;
private object? _value;
private string? _culture;
private string? _segment;

string IWithAliasBuilder.Alias
{
Expand All @@ -22,11 +23,17 @@ string IWithAliasBuilder.Alias
set => _value = value;
}

string IWithCultureBuilder.Culture
string? IWithCultureBuilder.Culture
{
get => _culture;
set => _culture = value;
}

string? IWithSegmentBuilder.Segment
{
get => _segment;
set => _segment = value;
}

public override PropertyValueModel Build() => new() { Alias = _alias, Value = _value, Culture = _culture };
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ public class ContentEditingVariantBuilder<TParent>(TParent parentBuilder)
private string? _culture;
private string? _segment;
private string _name;
private readonly List<ContentEditingPropertyValueBuilder<ContentEditingVariantBuilder<TParent>>> _properties = new();

string? IWithCultureBuilder.Culture
{
Expand All @@ -30,23 +29,6 @@ string IWithNameBuilder.Name
set => _name = value;
}

public ContentEditingPropertyValueBuilder<ContentEditingVariantBuilder<TParent>> AddProperty()
{
var builder = new ContentEditingPropertyValueBuilder<ContentEditingVariantBuilder<TParent>>((ContentEditingVariantBuilder<TParent>)this);
_properties.Add(builder);
return builder;
}

public IReadOnlyCollection<ContentEditingPropertyValueBuilder<ContentEditingVariantBuilder<TParent>>> GetProperties()
{
if (_culture is null)
{
throw new InvalidOperationException("Culture must be defined for the variant before building.");
}

return _properties.Select(property => property.WithCulture(_culture)).ToList();
}

public override VariantModel Build() =>
new()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) Umbraco.

Check notice on line 1 in tests/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (v16/dev)

✅ Getting better: Primitive Obsession

The ratio of primitive types in function arguments decreases from 42.27% to 42.11%, threshold = 30.0%. The functions in this file have too many primitive types (e.g. int, double, float) in their function argument lists. Using many primitive types lead to the code smell Primitive Obsession. Avoid adding more primitive arguments.
// See LICENSE for more details.

using System.Globalization;
Expand Down Expand Up @@ -247,13 +247,6 @@
return builder;
}

public static T WithInvariantName<T>(this T builder, string invariantName)
where T : IWithInvariantNameBuilder
{
builder.InvariantName = invariantName;
return builder;
}

public static T WithKey<T>(this T builder, Guid? key)
where T : IWithKeyBuilder
{
Expand Down

This file was deleted.

14 changes: 10 additions & 4 deletions tests/Umbraco.Tests.Common/Builders/MediaEditingBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,28 @@ public static MediaCreateModel CreateBasicMedia(Guid mediaTypeKey, Guid? key) =>
new MediaEditingBuilder()
.WithKey(key)
.WithContentTypeKey(mediaTypeKey)
.WithInvariantName("Media")
.AddVariant()
.WithName("Media")
.Done()
.Build();

public static MediaCreateModel CreateSimpleMedia(Guid mediaTypeKey, string name, Guid? parentKey) =>
new MediaEditingBuilder()
.WithContentTypeKey(mediaTypeKey)
.WithInvariantName(name)
.AddVariant()
.WithName(name)
.Done()
.WithParentKey(parentKey)
.Build();

public static MediaCreateModel CreateMediaWithAProperty(Guid mediaTypeKey, string name, Guid? parentKey, string propertyAlias = "testProperty", string propertyValue = "TestValue") =>
new MediaEditingBuilder()
.WithContentTypeKey(mediaTypeKey)
.WithInvariantName(name)
.AddVariant()
.WithName(name)
.Done()
.WithParentKey(parentKey)
.AddInvariantProperty()
.AddProperty()
.WithAlias(propertyAlias)
.WithValue(propertyValue)
.Done()
Expand Down