Skip to content

Commit c335281

Browse files
committed
feat: Implement ElementWrapper class to enhance IHasFolder functionality for IElement instances
1 parent 380aef5 commit c335281

File tree

2 files changed

+55
-10
lines changed

2 files changed

+55
-10
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using Intent.Metadata.Models;
2+
using Intent.Modules.Common.Types.Api;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
7+
namespace Intent.Modules.UnitTesting.Templates;
8+
9+
/// <summary>
10+
/// Wrapper class to provide IHasFolder functionality for IElement instances.
11+
/// This mimics the behavior of the old strongly-typed model classes.
12+
/// </summary>
13+
internal class ElementWrapper : IHasFolder
14+
{
15+
private readonly IElement _element;
16+
private readonly FolderModel _folder;
17+
18+
public ElementWrapper(IElement element)
19+
{
20+
_element = element ?? throw new ArgumentNullException(nameof(element));
21+
22+
// Initialize folder if parent is a folder
23+
_folder = _element.ParentElement?.SpecializationTypeId == FolderModel.SpecializationTypeId
24+
? new FolderModel(_element.ParentElement)
25+
: null;
26+
}
27+
28+
public string Id => _element.Id;
29+
30+
public string Name => _element.Name;
31+
32+
public FolderModel Folder => _folder;
33+
34+
public IEnumerable<string> GetParentFolderNames()
35+
{
36+
var folders = new List<string>();
37+
var currentFolder = _folder;
38+
39+
while (currentFolder != null)
40+
{
41+
folders.Insert(0, currentFolder.Name);
42+
currentFolder = currentFolder.Folder;
43+
}
44+
45+
return folders;
46+
}
47+
}

Modules/Intent.Modules.UnitTesting/Templates/TestHelpers.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,23 @@ public static string GetTestElementNormalizedPath<TModel>(this CSharpTemplateBas
2828

2929
public static string GetOperationNormalizedPath<TModel>(this CSharpTemplateBase<TModel> template)
3030
{
31-
var model = template.Model as IElementWrapper;
32-
if (model?.InternalElement == null || model.InternalElement.SpecializationTypeId != SpecializationTypeIds.Service)
31+
var model = template.Model as IElement;
32+
if (model == null || model.SpecializationTypeId != SpecializationTypeIds.Service)
3333
{
3434
return template.GetFolderPath();
3535
}
3636

37-
var parentService = model as IHasFolder;
38-
if (parentService == null)
39-
{
40-
return template.GetFolderPath();
41-
}
37+
// Wrap the element to get IHasFolder functionality
38+
var wrapper = new ElementWrapper(model);
4239

4340
// these have to be done as two seperate join calls, otherwise the incorrect overloaded Join method is called
44-
if(parentService.GetParentFolderNames().Count > 0)
41+
var parentFolders = wrapper.GetParentFolderNames().ToList();
42+
if(parentFolders.Count > 0)
4543
{
46-
return string.Join("/", parentService.GetParentFolderNames());
44+
return string.Join("/", parentFolders);
4745
}
4846

49-
return string.Join("/", model.InternalElement.Name.Replace("Service", string.Empty));
47+
return string.Join("/", model.Name.Replace("Service", string.Empty));
5048
}
5149

5250
public static void PopulateTestConstructor(ICSharpTemplate template, CSharpConstructor ctor, ITemplate handlerTemplate,

0 commit comments

Comments
 (0)