Skip to content

Commit

Permalink
Add GUID checks and unit tests for TypeExtensions
Browse files Browse the repository at this point in the history
Ensure GUIDs are non-empty in TypeExtensions for AssetRelatedItem and WebPageRelatedItem. Add unit tests in IContentItemFieldsSourceExtensionsTests and IWebPageFieldsSourceExtensionsTests. Update TypeExtensionsTests with new tests and properties. Add CMS.MediaLibrary using directive.
  • Loading branch information
brandonhenricks committed Jan 28, 2025
1 parent 849a1a7 commit d20d092
Show file tree
Hide file tree
Showing 4 changed files with 208 additions and 12 deletions.
35 changes: 25 additions & 10 deletions src/XperienceCommunity.DataRepository/Extensions/TypeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,17 @@ public static IEnumerable<Guid> GetRelatedAssetItemGuids<T>(this T source, Expre
{
if (property.GetValue(source) is AssetRelatedItem item)
{
guids.Add(item.Identifier);
if (item.Identifier != Guid.Empty)
{
guids.Add(item.Identifier);
}
}
}
else if (typeof(IEnumerable<AssetRelatedItem>).IsAssignableFrom(property.PropertyType))
{
if (property.GetValue(source) is IEnumerable<AssetRelatedItem> items)
{
guids.AddRange(items.Select(item => item.Identifier));
guids.AddRange(items.Where(item => item.Identifier != Guid.Empty).Select(item => item.Identifier));
}
}
}
Expand All @@ -189,14 +192,17 @@ public static IEnumerable<Guid> GetRelatedAssetItemGuids<T>(this T source) where
{
if (property.GetValue(source) is AssetRelatedItem item)
{
guids.Add(item.Identifier);
if (item.Identifier != Guid.Empty)
{
guids.Add(item.Identifier);
}
}
}
else if (typeof(IEnumerable<AssetRelatedItem>).IsAssignableFrom(property.PropertyType))
{
if (property.GetValue(source) is IEnumerable<AssetRelatedItem> items)
{
guids.AddRange(items.Select(item => item.Identifier));
guids.AddRange(items.Where(item => item.Identifier != Guid.Empty).Select(item => item.Identifier));
}
}
}
Expand Down Expand Up @@ -229,14 +235,17 @@ public static IEnumerable<Guid> GetRelatedWebPageGuids<T>(this T source, Express
{
if (property.GetValue(source) is WebPageRelatedItem item)
{
guids.Add(item.WebPageGuid);
if (item.WebPageGuid != Guid.Empty)
{
guids.Add(item.WebPageGuid);
}
}
}
else if (typeof(IEnumerable<WebPageRelatedItem>).IsAssignableFrom(property.PropertyType))
{
if (property.GetValue(source) is IEnumerable<WebPageRelatedItem> items)
{
guids.AddRange(items.Select(item => item.WebPageGuid));
guids.AddRange(items.Where(item => item.WebPageGuid != Guid.Empty).Select(item => item.WebPageGuid));
}
}
}
Expand All @@ -253,14 +262,17 @@ public static IEnumerable<Guid> GetRelatedWebPageGuids<T>(this T source, Express
{
if (property.GetValue(source) is WebPageRelatedItem item)
{
guids.Add(item.WebPageGuid);
if (item.WebPageGuid != Guid.Empty)
{
guids.Add(item.WebPageGuid);
}
}
}
else if (typeof(IEnumerable<WebPageRelatedItem>).IsAssignableFrom(property.PropertyType))
{
if (property.GetValue(source) is IEnumerable<WebPageRelatedItem> items)
{
guids.AddRange(items.Select(item => item.WebPageGuid));
guids.AddRange(items.Where(item => item.WebPageGuid != Guid.Empty).Select(item => item.WebPageGuid));
}
}
}
Expand All @@ -287,14 +299,17 @@ public static IEnumerable<Guid> GetRelatedWebPageGuids<T>(this T source) where T
{
if (property.GetValue(source) is WebPageRelatedItem item)
{
guids.Add(item.WebPageGuid);
if (item.WebPageGuid != Guid.Empty)
{
guids.Add(item.WebPageGuid);
}
}
}
else if (typeof(IEnumerable<WebPageRelatedItem>).IsAssignableFrom(property.PropertyType))
{
if (property.GetValue(source) is IEnumerable<WebPageRelatedItem> items)
{
guids.AddRange(items.Select(item => item.WebPageGuid));
guids.AddRange(items.Where(item => item.WebPageGuid != Guid.Empty).Select(item => item.WebPageGuid));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,25 @@ public void ToTypedList_ReturnsCorrectList()
Assert.That(result, Has.Count.EqualTo(2));
}

[Test]
public void GetContentItemGUIDs_ReturnsCorrectGUIDs()
{
var source = new List<IContentItemFieldsSource>
{
Substitute.For<IContentItemFieldsSource>(), Substitute.For<IContentItemFieldsSource>()
};

var systemFields1 = new ContentItemFields { ContentItemGUID = Guid.NewGuid() };
var systemFields2 = new ContentItemFields { ContentItemGUID = Guid.NewGuid() };

source[0].SystemFields.Returns(systemFields1);
source[1].SystemFields.Returns(systemFields2);

var result = source.GetContentItemGUIDs();

Assert.That(result, Is.EqualTo(new[] { systemFields1.ContentItemGUID, systemFields2.ContentItemGUID }));
}

public class TestContentItemFieldsSource : IContentItemFieldsSource
{
public static string CONTENT_TYPE_NAME = "TestContentItemFieldsSource";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,61 @@ public void GetContentTypes_ShouldReturnCorrectContentTypes_WhenSourcesAreNotNul
Assert.That(result, Is.EqualTo(new[] { "TestWebPageFieldsSource", "TestWebPageFieldsSource" }));
Assert.That(result, Is.EqualTo(new[] { "TestWebPageFieldsSource", "TestWebPageFieldsSource" }));
}
[Test]
public void GetCacheDependencyKey_ShouldReturnEmptyArray_WhenSourceIsNull()
{
IWebPageFieldsSource? source = null;

string[] result = source.GetCacheDependencyKey();

Assert.That(result, Is.Empty);
}

[Test]
public void GetCacheDependencyKeys_ShouldReturnEmptyArray_WhenSourcesAreNull()
{
IEnumerable<IWebPageFieldsSource>? sources = null;

string[] result = sources.GetCacheDependencyKeys();

Assert.That(result, Is.Empty);
}

[Test]
public void GetWebPageItemIds_ShouldReturnEmptyArray_WhenSourcesAreNull()
{
IEnumerable<IWebPageFieldsSource>? sources = null;

var result = sources.GetWebPageItemIds();

Assert.That(result, Is.Empty);
}

[Test]
public void GetWebPageItemGuids_ShouldReturnCorrectGuids_WhenSourcesAreNotNull()
{
var sources = new List<IWebPageFieldsSource>
{
Substitute.For<IWebPageFieldsSource>(), Substitute.For<IWebPageFieldsSource>()
};

var systemFields1 = new WebPageFields() { WebPageItemGUID = Guid.NewGuid(), ContentItemIsSecured = false };
var systemFields2 = new WebPageFields() { WebPageItemGUID = Guid.NewGuid(), ContentItemIsSecured = false };

sources[0].SystemFields.Returns(systemFields1);
sources[1].SystemFields.Returns(systemFields2);

var result = sources.GetWebPageItemGuids();
Assert.That(result, Is.EqualTo(new[] { systemFields1.WebPageItemGUID, systemFields2.WebPageItemGUID }));
}

[Test]
public void GetWebPageItemGuids_ShouldReturnEmptyArray_WhenSourcesAreNull()
{
IEnumerable<IWebPageFieldsSource>? sources = null;

var result = sources.GetWebPageItemGuids();

Assert.That(result, Is.Empty);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using CMS.ContentEngine;
using CMS.MediaLibrary;
using CMS.Websites;

using NSubstitute;
Expand Down Expand Up @@ -158,7 +159,7 @@ public void GetRelatedWebPageGuids_SingleItem_ReturnsGuid()
var guid = Guid.NewGuid();
var relatedItem = new WebPageRelatedItem { WebPageGuid = guid };

var source = new TestContentItemFieldsSource() { RelatedItem = relatedItem };
var source = new TestWebPageFieldsSource() { RelatedItem = relatedItem };

// Act
var result = source.GetRelatedWebPageGuids(x => x.RelatedItem);
Expand Down Expand Up @@ -190,6 +191,29 @@ public void GetRelatedWebPageGuids_MultipleItems_ReturnsGuids()
Assert.That(result, Is.EquivalentTo(new[] { guid1, guid2 }));
}

[Test]
public void GetRelatedWebPageGuids_NoPropertySpecified_MultipleItems_ReturnsGuids()
{
// Arrange
var guid1 = Guid.NewGuid();
var guid2 = Guid.NewGuid();

var relatedItems = new List<WebPageRelatedItem>
{
new() { WebPageGuid = guid1 },
new() { WebPageGuid = guid2 }
};

var source = new TestWebPageFieldsSource() { RelatedItems = relatedItems };


// Act
var result = source.GetRelatedWebPageGuids();

// Assert
Assert.That(result, Is.EquivalentTo(new[] { guid1, guid2 }));
}

[Test]
public void GetRelatedWebPageGuids_NoItems_ReturnsEmpty()
{
Expand All @@ -202,11 +226,88 @@ public void GetRelatedWebPageGuids_NoItems_ReturnsEmpty()
// Assert
Assert.That(result, Is.Empty);
}

[Test]
public void GetRelatedAssetItemGuids_SingleItem_ReturnsGuid()
{
// Arrange
var guid = Guid.NewGuid();
var relatedItem = new AssetRelatedItem { Identifier = guid };

var source = new TestContentItemFieldsSource() { RelatedAssetItem = relatedItem };

// Act
var result = source.GetRelatedAssetItemGuids(x => x.RelatedAssetItem);

// Assert
Assert.That(result, Is.EquivalentTo(new[] { guid }));
}

[Test]
public void GetRelatedAssetItemGuids_MultipleItems_ReturnsGuids()
{
// Arrange
var guid1 = Guid.NewGuid();
var guid2 = Guid.NewGuid();

var relatedItems = new List<AssetRelatedItem>
{
new() { Identifier = guid1 },
new() { Identifier = guid2 }
};

var source = new TestContentItemFieldsSource() { RelatedAssetItems = relatedItems };

// Act
var result = source.GetRelatedAssetItemGuids(x => x.RelatedAssetItems);

// Assert
Assert.That(result, Is.EquivalentTo(new[] { guid1, guid2 }));
}

[Test]
public void GetRelatedAssetItemGuids_NoPropertyExpression_MultipleItems_ReturnsGuids()
{
// Arrange
var guid1 = Guid.NewGuid();
var guid2 = Guid.NewGuid();

var relatedItems = new List<AssetRelatedItem>
{
new() { Identifier = guid1 },
new() { Identifier = guid2 }
};

var source = new TestContentItemFieldsSource() { RelatedAssetItems = relatedItems };

// Act
var result = source.GetRelatedAssetItemGuids();

// Assert
Assert.That(result, Is.EquivalentTo(new[] { guid1, guid2 }));
}

[Test]
public void GetRelatedAssetItemGuids_NoItems_ReturnsEmpty()
{
// Arrange
var source = new TestContentItemFieldsSource();

// Act
var result = source.GetRelatedAssetItemGuids(x => x.RelatedAssetItems);

// Assert
Assert.That(result, Is.Empty);
}

public class TestContentItemFieldsSource : IContentItemFieldsSource
{
public static string CONTENT_TYPE_NAME = "TestContentItemFieldsSource";

public WebPageRelatedItem RelatedItem { get; set; } = new WebPageRelatedItem();
public AssetRelatedItem RelatedAssetItem { get; set; } = new AssetRelatedItem();


public IEnumerable<AssetRelatedItem> RelatedAssetItems { get; set; } = [];

public ContentItemFields SystemFields => throw new NotImplementedException();
}
Expand All @@ -215,9 +316,13 @@ public class TestWebPageFieldsSource : IWebPageFieldsSource
{
public static string CONTENT_TYPE_NAME = "TestWebPageFieldsSource";

public WebPageRelatedItem RelatedItem { get; set; } = new WebPageRelatedItem();

public IEnumerable<WebPageRelatedItem> RelatedItems { get; set; } = [];

public WebPageFields SystemFields => throw new NotImplementedException();
}


}
}

0 comments on commit d20d092

Please sign in to comment.