Skip to content

Commit

Permalink
#28 - Formatting tweaks and added test
Browse files Browse the repository at this point in the history
  • Loading branch information
blipson89 committed Aug 29, 2019
1 parent 9ab51b5 commit 6e8e4f4
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 59 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
using Leprechaun.Model;
using Leprechaun.TemplateReaders;
Expand Down Expand Up @@ -31,6 +33,19 @@ public void ParseTemplate_WhenTemplateIsATemplate_ReturnTemplate(TestableDataSou
sut.Public_ParseTemplate(templateItem).Id.Should().Be(templateItem.Id);
}

#endregion

#region GetAllFields
[Theory, DataStoreTemplateReaderConventions]
public void GetAllFields_Includes_AllFields(TestableDataSourceTemplateReader sut, IItemData itemData)
{
var allFields = sut.Public_GetAllFields(itemData);
itemData.SharedFields.Select(x => x.FieldId).All(allFields.Keys.Contains).Should().BeTrue();
itemData.UnversionedFields.SelectMany(x => x.Fields.Select(y => y.FieldId)).All(allFields.Keys.Contains).Should().BeTrue();
itemData.Versions.SelectMany(x => x.Fields.Select(y => y.FieldId)).All(allFields.Keys.Contains).Should().BeTrue();
}


#endregion
}

Expand All @@ -44,5 +59,10 @@ public TemplateInfo Public_ParseTemplate(IItemData templateItem)
{
return ParseTemplate(templateItem);
}

public IDictionary<Guid, string> Public_GetAllFields(IItemData item)
{
return GetAllFields(item);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public TemplateFieldCodeGenerationMetadata(TemplateFieldInfo field, string codeN

public virtual int SortOrder => Field.SortOrder;

public virtual Dictionary<Guid, string> AllFields => Field.AllFields;
public virtual IDictionary<Guid, string> AllFields => Field.AllFields;

/// <summary>
/// A unique name for this template field, usable as a C# identifier (e.g. property name)
Expand Down
7 changes: 3 additions & 4 deletions src/Leprechaun/Model/TemplateFieldInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ namespace Leprechaun.Model
[DebuggerDisplay("{Path} ({Id})")]
public class TemplateFieldInfo
{
public TemplateFieldInfo()
{
AllFields = new Dictionary<Guid, string>();
public TemplateFieldInfo()
{
}

public Guid Id { get; set; }
Expand All @@ -30,6 +29,6 @@ public TemplateFieldInfo()

public int SortOrder { get; set; }

public Dictionary<Guid, string> AllFields { get; set; }
public IDictionary<Guid, string> AllFields { get; set; } = new Dictionary<Guid, string>();
}
}
80 changes: 26 additions & 54 deletions src/Leprechaun/TemplateReaders/DataStoreTemplateReader.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Leprechaun.Model;
Expand Down Expand Up @@ -124,25 +125,19 @@ protected virtual TemplateFieldInfo[] ParseTemplateFields(IItemData templateItem

protected virtual string GetFieldValue(IItemData item, Guid fieldId, string defaultValue)
{
foreach (var field in item.SharedFields)
foreach (IItemFieldValue field in item.SharedFields)
{
if (field.FieldId == fieldId) return field.Value;
}

foreach (var language in item.UnversionedFields)
foreach (IItemFieldValue field in item.UnversionedFields.SelectMany(uf => uf.Fields))
{
foreach (var field in language.Fields)
{
if (field.FieldId == fieldId) return field.Value;
}
if (field.FieldId == fieldId) return field.Value;
}

foreach (var version in item.Versions)
foreach (IItemFieldValue field in item.Versions.SelectMany(v => v.Fields))
{
foreach (var field in version.Fields)
{
if (field.FieldId == fieldId) return field.Value;
}
if (field.FieldId == fieldId) return field.Value;
}

return defaultValue;
Expand All @@ -159,7 +154,7 @@ protected virtual int GetFieldValueAsInt(IItemData item, Guid fieldId, int defau

protected virtual Guid[] ParseBaseTemplatesAndRejectIgnoredBaseTemplates(string value)
{
var ignoredIds = IgnoredBaseTemplateIds;
ICollection<Guid> ignoredIds = IgnoredBaseTemplateIds;

return ParseMultilistValue(value)
.Where(id => !ignoredIds.Contains(id))
Expand All @@ -169,15 +164,7 @@ protected virtual Guid[] ParseBaseTemplatesAndRejectIgnoredBaseTemplates(string
protected virtual Guid[] ParseMultilistValue(string value)
{
return value.Split('|')
.Select(item =>
{
if (Guid.TryParse(item, out Guid result))
{
return result;
}

return Guid.Empty;
})
.Select(item => Guid.TryParse(item, out Guid result) ? result : Guid.Empty)
.Where(item => item != Guid.Empty)
.ToArray();
}
Expand All @@ -188,41 +175,26 @@ protected virtual Guid[] ParseMultilistValue(string value)
FolderId
};

protected virtual Dictionary<Guid, string> GetAllFields(IItemData item)
{
protected virtual IDictionary<Guid, string> GetAllFields(IItemData item)
{
var allFields = new Dictionary<Guid, string>();

foreach (var field in item.SharedFields)
{
if (!allFields.ContainsKey(field.FieldId))
{
allFields.Add(field.FieldId, field.Value);
}
}

foreach (var language in item.UnversionedFields)
{
foreach (var field in language.Fields)
{
if (!allFields.ContainsKey(field.FieldId))
{
allFields.Add(field.FieldId, field.Value);
}
}
}

foreach (var version in item.Versions)
{
foreach (var field in version.Fields)
{
if (!allFields.ContainsKey(field.FieldId))
{
allFields.Add(field.FieldId, field.Value);
}
}
}
foreach (IItemFieldValue field in item.SharedFields)
{
allFields[field.FieldId] = field.Value;
}

return allFields;
}
foreach (IItemFieldValue field in item.UnversionedFields.SelectMany(f => f.Fields))
{
allFields[field.FieldId] = field.Value;
}

foreach (IItemFieldValue field in item.Versions.SelectMany(v => v.Fields))
{
allFields[field.FieldId] = field.Value;
}

return allFields;
}
}
}

0 comments on commit 6e8e4f4

Please sign in to comment.