Skip to content

Commit

Permalink
185 fix generating guidelines element
Browse files Browse the repository at this point in the history
  • Loading branch information
Sevitas committed May 18, 2023
1 parent 61829a3 commit 18051c6
Show file tree
Hide file tree
Showing 10 changed files with 143 additions and 26 deletions.
3 changes: 0 additions & 3 deletions src/Kontent.Ai.ModelGenerator.Core/CodeGeneratorBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,6 @@ protected static void WriteConsoleErrorMessage(Exception exception, string eleme
case ArgumentNullException or ArgumentException:
Console.WriteLine($"Warning: Skipping unknown Content Element type '{elementType}'. (Content Type: '{className}', Element Codename: '{elementCodename}').");
break;
case UnsupportedTypeException:
Console.WriteLine($"Info: Skipping unsupported Content Element type '{elementType}'. (Content Type: '{className}', Element Codename: '{elementCodename}').");
break;
}
}

Expand Down
14 changes: 2 additions & 12 deletions src/Kontent.Ai.ModelGenerator.Core/Common/Property.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,7 @@ public static Property FromContentTypeElement(ElementMetadataBase element)
return new Property(element.Codename, ManagementElementTypesDictionary[element.Type], element.Id.ToString());
}

if (element.Type == ElementMetadataType.Guidelines)
{
throw new UnsupportedTypeException();
}

throw new ArgumentException($"Unknown Content Type {element.Type}", nameof(element));
throw new ArgumentException($"Unknown Content Type Element {element.Type}", nameof(element));
}

public static Property FromContentTypeElement(ElementMetadataBase element, string elementType) =>
Expand All @@ -135,11 +130,6 @@ public static Property FromContentTypeElement(ElementMetadataBase element, strin
return new Property(finalPropertyName, resultElementType);
}

if (element.Type == ElementMetadataType.Guidelines)
{
throw new UnsupportedTypeException();
}

throw new ArgumentException($"Unknown Content Type {element.Type}", nameof(element));
throw new ArgumentException($"Unknown Content Type Element {element.Type}", nameof(element));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ internal IEnumerable<ClassCodeGenerator> GetClassCodeGenerators(ContentTypeModel
var classDefinition = new ClassDefinition(contentType.Codename);
var typedClassDefinition = new ClassDefinition(contentType.Codename);

foreach (var element in contentType.Elements)
foreach (var element in contentType.Elements.ExcludeGuidelines())
{
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ namespace Kontent.Ai.ModelGenerator.Core.Helpers;

public static class ManagementElementHelper
{
public static IEnumerable<ElementMetadataBase> ExcludeGuidelines(this IEnumerable<ElementMetadataBase> elements) =>
elements.Where(el => el.Type != ElementMetadataType.Guidelines);

public static IEnumerable<ElementMetadataBase> GetManagementContentTypeSnippetElements(
ElementMetadataBase element,
IEnumerable<ContentTypeSnippetModel> managementSnippets)
Expand All @@ -25,7 +28,7 @@ public static IEnumerable<ElementMetadataBase> GetManagementContentTypeSnippetEl
throw new ArgumentException($"{nameof(managementSnippet)} shouldn't be null.");
}

return managementSnippet.Elements;
return managementSnippet.Elements.ExcludeGuidelines();
}

private static void Validate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ internal ClassCodeGenerator GetClassCodeGenerator(ContentTypeModel contentType,
{
var classDefinition = new ClassDefinition(contentType.Codename);

foreach (var element in contentType.Elements)
foreach (var element in contentType.Elements.ExcludeGuidelines())
{
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public void FromContentTypeElement_ManagementApiModel_GuidelinesElement_Throws()
var fromContentTypeElementCall = () =>
Property.FromContentTypeElement(TestDataGenerator.GenerateGuidelinesElement(Guid.NewGuid(), "codename"));

fromContentTypeElementCall.Should().ThrowExactly<UnsupportedTypeException>();
fromContentTypeElementCall.Should().ThrowExactly<ArgumentException>();
}

[Theory]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@
"id": "93805f03-f759-4634-abe0-90ce0f74475d",
"codename": "snippet__t"
},
{
"guidelines": "<p><br/></p>",
"type": "guidelines",
"id": "d78f1910-d80f-4051-9004-4dd577d5e707",
"codename": "guidelines"
},
{
"maximum_text_length": null,
"maximum_image_size": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@
"id": "738273ab-6159-4b93-a735-89d599d19f49",
"codename": "hero_unit"
},
{
"guidelines": "<p><br/></p>",
"type": "guidelines",
"id": "d78f1910-d80f-4051-9004-4dd577d5e707",
"codename": "guidelines"
},
{
"item_count_limit": null,
"allowed_content_types": [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,4 +127,126 @@ public void GetManagementContentTypeSnippetElements_Returns()
result.Should().ContainSingle(el => el.Id == expectedElementId);
result.Should().ContainSingle(el => el.Id == expectedElement2Id);
}

[Fact]
public void GetManagementContentTypeSnippetElements_SkipsGuidelines_Returns()
{
var expectedElementId = Guid.NewGuid();
var expectedElement2Id = Guid.NewGuid();
var snippetCodename = "snippet_codename";

var snippetElement = TestDataGenerator.GenerateElementMetadataBase(Guid.NewGuid(), snippetCodename, ElementMetadataType.ContentTypeSnippet);

var snippets = new List<ContentTypeSnippetModel>
{
new ContentTypeSnippetModel
{
Codename = snippetCodename,
Elements = new List<ElementMetadataBase>
{
TestDataGenerator.GenerateElementMetadataBase(expectedElementId, $"{snippetCodename}_el"),
TestDataGenerator.GenerateGuidelinesElement(Guid.NewGuid(), $"{snippetCodename}_guidelines"),
TestDataGenerator.GenerateElementMetadataBase(expectedElement2Id, $"{snippetCodename}_el2", ElementMetadataType.Number)
}
}
};

var result = ManagementElementHelper.GetManagementContentTypeSnippetElements(snippetElement, snippets).ToList();

result.Should().NotBeNullOrEmpty();
result.Count.Should().Be(2);
result.Should().ContainSingle(el => el.Id == expectedElementId);
result.Should().ContainSingle(el => el.Id == expectedElement2Id);
}

[Theory]
[MemberData(nameof(HasGuidelinesElement))]
public void ExcludeGuidelines_HasGuidelinesElement_GuidelinesIsExcluded(IEnumerable<ElementMetadataBase> elements, IEnumerable<ElementMetadataBase> expectedElements)
{
var result = elements.ExcludeGuidelines();

result.Should().BeEquivalentTo(expectedElements);
}

[Theory]
[MemberData(nameof(MissingGuidelinesElement))]
public void ExcludeGuidelines_MissingGuidelinesElement_GuidelinesIsExcluded(IEnumerable<ElementMetadataBase> elements)
{
var result = elements.ExcludeGuidelines();

result.Should().BeEquivalentTo(elements);
}

public static IEnumerable<object[]> MissingGuidelinesElement()
{
var firstElement = TestDataGenerator.GenerateElementMetadataBase(Guid.NewGuid(), "element_codename");
var secondElement = TestDataGenerator.GenerateElementMetadataBase(Guid.NewGuid(), "second_element_codename");
var expectedElements = new List<ElementMetadataBase> { firstElement, secondElement };

yield return new object[]
{
new List<ElementMetadataBase>
{
firstElement
}
};
yield return new object[]
{
new List<ElementMetadataBase>
{
firstElement,
secondElement,
}
};
yield return new object[]
{
new List<ElementMetadataBase>()
};
}

public static IEnumerable<object[]> HasGuidelinesElement()
{
var firstElement = TestDataGenerator.GenerateElementMetadataBase(Guid.NewGuid(), "element_codename");
var secondElement = TestDataGenerator.GenerateElementMetadataBase(Guid.NewGuid(), "second_element_codename");
var expectedElements = new List<ElementMetadataBase> { firstElement, secondElement };

yield return new object[]
{
new List<ElementMetadataBase>
{
firstElement,
TestDataGenerator.GenerateGuidelinesElement(Guid.NewGuid(), "element_codename"),
secondElement
},
expectedElements
};
yield return new object[]
{
new List<ElementMetadataBase>
{
TestDataGenerator.GenerateGuidelinesElement(Guid.NewGuid(), "element_codename"),
firstElement,
secondElement
},
expectedElements
};
yield return new object[]
{
new List<ElementMetadataBase>
{
firstElement,
secondElement,
TestDataGenerator.GenerateGuidelinesElement(Guid.NewGuid(), "element_codename")
},
expectedElements
};
yield return new object[]
{
new List<ElementMetadataBase>
{
TestDataGenerator.GenerateGuidelinesElement(Guid.NewGuid(), "element_codename")
},
new List<ElementMetadataBase>()
};
}
}

0 comments on commit 18051c6

Please sign in to comment.