Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add HideContentTypeFieldLinksDefinition reverse handler #78
- Loading branch information
1 parent
0ef797c
commit e7a1156
Showing
12 changed files
with
363 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
98 changes: 98 additions & 0 deletions
98
...eta2.Reverse.CSOM/ReverseHandlers/ContentTypes/HideContentTypeFieldLinksReverseHandler.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
using SPMeta2.Reverse.CSOM.ReverseHandlers.Base; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using Microsoft.SharePoint.Client; | ||
using SPMeta2.CSOM.Extensions; | ||
using SPMeta2.Definitions; | ||
using SPMeta2.Definitions.ContentTypes; | ||
using SPMeta2.ModelHosts; | ||
using SPMeta2.Models; | ||
using SPMeta2.Reverse.CSOM.ReverseHosts; | ||
using SPMeta2.Reverse.ReverseHosts; | ||
using SPMeta2.Reverse.Services; | ||
using SPMeta2.Syntax.Default; | ||
using SPMeta2.Utils; | ||
|
||
namespace SPMeta2.Reverse.CSOM.ReverseHandlers.ContentTypes | ||
{ | ||
public class HideContentTypeFieldLinksReverseHandler : CSOMReverseHandlerBase | ||
{ | ||
#region properties | ||
public override Type ReverseType | ||
{ | ||
get { return typeof(HideContentTypeFieldLinksDefinition); } | ||
} | ||
|
||
public override IEnumerable<Type> ReverseParentTypes | ||
{ | ||
get | ||
{ | ||
return new[] | ||
{ | ||
typeof(ContentTypeDefinition) | ||
}; | ||
} | ||
} | ||
|
||
|
||
#endregion | ||
|
||
#region methods | ||
|
||
public override IEnumerable<ReverseHostBase> ReverseHosts(ReverseHostBase parentHost, ReverseOptions options) | ||
{ | ||
var result = new List<ContentTypeReverseHost>(); | ||
|
||
var typedHost = parentHost.WithAssertAndCast<ContentTypeReverseHost>("reverseHost", value => value.RequireNotNull()); | ||
|
||
var contentType = typedHost.HostContentType; | ||
var context = typedHost.HostClientContext; | ||
|
||
var item = contentType; | ||
|
||
context.Load(item); | ||
|
||
context.Load(item, i => i.Fields); | ||
context.Load(item, i => i.FieldLinks); | ||
|
||
context.ExecuteQueryWithTrace(); | ||
|
||
result.AddRange(ApplyReverseFilters(new[] { item }, options).ToArray().Select(i => | ||
{ | ||
return ModelHostBase.Inherit<ContentTypeReverseHost>(parentHost, h => | ||
{ | ||
h.HostContentType = i; | ||
}); | ||
})); | ||
|
||
return result; | ||
} | ||
|
||
public override ModelNode ReverseSingleHost(object reverseHost, ReverseOptions options) | ||
{ | ||
var item = (reverseHost as ContentTypeReverseHost).HostContentType; | ||
|
||
var def = new HideContentTypeFieldLinksDefinition(); | ||
|
||
foreach (var fieldLink in item.FieldLinks.ToArray() | ||
.Where(l => l.Hidden)) | ||
{ | ||
def.Fields.Add(new FieldLinkValue | ||
{ | ||
Id = fieldLink.Id | ||
}); | ||
} | ||
|
||
return new HideContentTypeFieldLinksModelNode | ||
{ | ||
Options = { RequireSelfProcessing = true }, | ||
Value = def | ||
}; | ||
} | ||
|
||
#endregion | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
65 changes: 65 additions & 0 deletions
65
...everse.Regression/Validation/ContentTypes/HideContentTypeFieldLinksDefinitionValidator.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using SPMeta2.Definitions; | ||
using SPMeta2.Reverse.Regression.Base; | ||
using SPMeta2.Definitions.ContentTypes; | ||
using SPMeta2.Utils; | ||
using SPMeta2.Containers.Assertion; | ||
|
||
namespace SPMeta2.Reverse.Regression.Validation.ContentTypes | ||
{ | ||
public class HideContentTypeFieldLinksDefinitionValidator : | ||
TypedReverseDefinitionValidatorBase<HideContentTypeFieldLinksDefinition> | ||
{ | ||
|
||
public override void DeployModel(object modelHost, DefinitionBase model) | ||
{ | ||
var typedModelHost = modelHost.WithAssertAndCast<ReverseValidationModeHost>("modelHost", m => m.RequireNotNull()); | ||
|
||
var originalDefinition = typedModelHost.OriginalModel.Value.WithAssertAndCast<HideContentTypeFieldLinksDefinition>("value", m => m.RequireNotNull()); | ||
var reversedDefinition = typedModelHost.ReversedModel.Value.WithAssertAndCast<HideContentTypeFieldLinksDefinition>("value", m => m.RequireNotNull()); | ||
|
||
var assert = ServiceFactory.AssertService.NewAssert(originalDefinition, reversedDefinition); | ||
|
||
assert.ShouldBeEqual((p, s, d) => | ||
{ | ||
var isValid = true; | ||
var srcProp = s.GetExpressionValue(o => o.Fields); | ||
var dstProp = d.GetExpressionValue(o => o.Fields); | ||
// check the reversed order, should be the same | ||
// these aray should be the same in terms of ordering | ||
var srcArray = s.Fields.Select(l => l.Id).ToList(); | ||
var dstArray = d.Fields.Where(f => s.Fields.Any(sl => sl.Id == f.Id)) | ||
.Select(l => l.Id).ToList(); | ||
isValid = srcArray.Count == dstArray.Count; | ||
if (isValid) | ||
{ | ||
for (var i = 0; i < srcArray.Count; i++) | ||
{ | ||
isValid = dstArray.Contains(srcArray[i]); | ||
if (!isValid) | ||
break; | ||
} | ||
} | ||
return new PropertyValidationResult | ||
{ | ||
Tag = p.Tag, | ||
Src = srcProp, | ||
Dst = dstProp, | ||
IsValid = isValid | ||
}; | ||
}); | ||
|
||
|
||
} | ||
} | ||
} |
68 changes: 68 additions & 0 deletions
68
...2.Reverse.Tests/Impl/Definitions/ContentTypes/HideContentTypeFieldLinksDefinitionTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
using SPMeta2.Reverse.Tests.Base; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
using System.Threading.Tasks; | ||
using Microsoft.VisualStudio.TestTools.UnitTesting; | ||
using SPMeta2.Definitions; | ||
using SPMeta2.Definitions.Fields; | ||
using SPMeta2.Syntax.Default; | ||
using SPMeta2.Definitions.ContentTypes; | ||
using SPMeta2.Reverse.Services; | ||
|
||
namespace SPMeta2.Reverse.Tests.Impl.Definitions.ContentTypes | ||
{ | ||
[TestClass] | ||
public class HideContentTypeFieldLinksDefinitionTests : ReverseTestBase | ||
{ | ||
#region tests | ||
|
||
[TestMethod] | ||
[TestCategory("ContentTypes.HideContentTypeFieldLinks")] | ||
public void Can_Reverse_HideContentTypeFieldLinks() | ||
{ | ||
var options = ReverseOptions.Default | ||
.AddDepthOption<WebDefinition>(0); | ||
|
||
var f1 = Def<BooleanFieldDefinition>(); | ||
var f2 = Def<BooleanFieldDefinition>(); | ||
var f3 = Def<BooleanFieldDefinition>(); | ||
|
||
var c1 = Def<ContentTypeDefinition>(); | ||
|
||
options.AddFilterOption<ContentTypeDefinition>(l => l.Name == c1.Name); | ||
options.AddFilterOption<FieldDefinition>(l => l.InternalName == f1.InternalName); | ||
|
||
//ContentTypeFieldLinkDefinition | ||
|
||
var model = SPMeta2Model.NewSiteModel(site => | ||
{ | ||
site.AddField(f1); | ||
site.AddField(f2); | ||
site.AddField(f3); | ||
site.AddContentType(c1, contentType => | ||
{ | ||
contentType.AddContentTypeFieldLink(f1); | ||
contentType.AddContentTypeFieldLink(f2); | ||
contentType.AddContentTypeFieldLink(f3); | ||
contentType.AddHideContentTypeFieldLinks(new HideContentTypeFieldLinksDefinition | ||
{ | ||
Fields = new List<FieldLinkValue>() | ||
{ | ||
new FieldLinkValue { Id = f2.Id }, | ||
new FieldLinkValue { Id = f3.Id }, | ||
new FieldLinkValue { Id = f1.Id } | ||
} | ||
}); | ||
}); | ||
}); | ||
|
||
DeployReverseAndTestModel(model, options); | ||
} | ||
|
||
#endregion | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
...erse.Tests/_coverage_reports/_m2.UniqueContentTypeFieldsOrderDefinition.def-coverage.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<div> | ||
<h4>UniqueContentTypeFieldsOrderDefinition</h4> | ||
<table> | ||
<thead> | ||
<td>Property</td> | ||
<td>Support</td> | ||
<td>Comments</td> | ||
</thead> | ||
<tbody> | ||
<tr> | ||
<td>Fields</td> | ||
<td>True</td> | ||
<td> | ||
</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.