public PolymorphicSubLinkedSourcesTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <WithPolymorphicSubLinkedSource>() .LoadLinkPolymorphicList( linkedSource => linkedSource.Model.Subs, linkedSource => linkedSource.Subs, link => link.GetType(), includes => includes.Include <SubContentWithImageLinkedSource>().AsNestedLinkedSourceFromModel( typeof(SubContentWithImage), link => (SubContentWithImage)link, (linkedSource, referenceIndex, childLinkedSource) => childLinkedSource.Contextualization = linkedSource.Model.Contextualizations[referenceIndex] ) .Include <SubContentWithoutReferencesLinkedSource>().AsNestedLinkedSourceFromModel( typeof(SubContentWithoutReferences), link => (SubContentWithoutReferences)link, (linkedSource, referenceIndex, childLinkedSource) => childLinkedSource.Contextualization = linkedSource.Model.Contextualizations[referenceIndex] ) ); loadLinkProtocolBuilder.For <SubContentWithImageLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.ImageId, linkedSource => linkedSource.Image); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public PolymorphicMixtedTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>() .LoadLinkPolymorphic( linkedSource => linkedSource.Model.TargetReference, linkedSource => linkedSource.Target, link => link.GetType(), includes => includes.Include <Person>().AsReferenceById( typeof(int), link => link.ToString() ) .Include <PersonLinkedSource>().AsNestedLinkedSourceById( typeof(string), link => link.ToString() ) .Include <PersonLinkedSource>().AsNestedLinkedSourceFromModel( typeof(Person), link => (Person)link ) ); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public GenericPieTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <StringPieLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.PieContent, linkedSource => linkedSource.SummaryImage); loadLinkProtocolBuilder.For <IntPieLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.PieContent, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub( new ReferenceTypeConfig <Pie <string>, string>( ids => new PieRepository <string>().GetByPieContentIds(ids), reference => reference.Id ), new ReferenceTypeConfig <Pie <int>, string>( ids => new PieRepository <int>().GetByPieContentIds(ids), reference => reference.Id ) ) ); }
public PolymorphicSubLinkedSourceTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>() .LoadLinkPolymorphic( linkedSource => linkedSource.Model.Target, linkedSource => linkedSource.Target, link => link.Type, includes => includes.Include <PdfReferenceLinkedSource>().AsNestedLinkedSourceFromModel( "pdf", link => link, (linkedSource, referenceIndex, childLinkedSource) => childLinkedSource.Contextualization = "From the level below:" + linkedSource.Model.Id ) .Include <WebPageReferenceLinkedSource>().AsNestedLinkedSourceFromModel( "web-page", link => link.GetAsBlogPostReference() ) ); loadLinkProtocolBuilder.For <WebPageReferenceLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.ImageId, linkedSource => linkedSource.Image); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public void CreateLoadLinkConfig_WithCycleCausedByIndirectLinkedSources_ShouldThrow() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <IndirectCycleLinkedSourceA>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.ModelBId, linkedSource => linkedSource.ModelB ); loadLinkProtocolBuilder.For <IndirectCycleLinkedSourceB>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.ModelCId, linkedSource => linkedSource.ModelC ); loadLinkProtocolBuilder.For <IndirectCycleLinkedSourceC>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.ModelAId, linkedSource => linkedSource.ModelA ); Action act = () => loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); var exception = Assert.Throws <InvalidOperationException>(act); exception.Message.Should().BeOneOf( $"Recursive dependency detected for type {{ {nameof(IndirectCycleLinkedSourceA)} }}.", $"Recursive dependency detected for type {{ {nameof(IndirectCycleLinkedSourceB)} }}.", $"Recursive dependency detected for type {{ {nameof(IndirectCycleLinkedSourceC)} }}."); }
public PolymorphicTest() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>() .LoadLinkPolymorphic( linkedSource => linkedSource.Model.PolyRef, linkedSource => linkedSource.Poly, link => link.Kind, includes => includes.Include <PersonLinkedSource>().AsNestedLinkedSourceById( "person-nested", link => (string)link.Value) .Include <PersonLinkedSource>().AsNestedLinkedSourceFromModel( "person-sub", link => (Person)link.Value) .Include <Image>().AsReferenceById( "img", link => (string)link.Value) ); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public DebugModeTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <BlogPostLinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.AuthorId, linkedSource => linkedSource.Author) .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.MediaId, linkedSource => linkedSource.Media); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); loadLinkProtocolBuilder.For <MediaLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); var blogPostConfig = new ReferenceTypeConfig <BlogPost, string>( ids => ids.Select(GetBlogPost), reference => reference.Id ); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub(blogPostConfig)); }
public SideEffectBetweenNestedLinkedSourceTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.PersonId, linkedSource => linkedSource.Person ) .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.PersonGroupId, linkedSource => linkedSource.PersonGroup ); loadLinkProtocolBuilder.For <PersonGroupLinkedSource>() .LoadLinkReferencesByIds( linkedSource => linkedSource.Model.PersonIds, linkedSource => linkedSource.People); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build( () => null //not required ); }
public LoadLinkExpressionOverridingTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <SingleReferenceLinkedSource>() .LoadLinkReferenceById( linkedSource => { throw new Exception("Not overridden!"); #pragma warning disable 162 return(linkedSource.Model.SummaryImageId); #pragma warning restore 162 }, linkedSource => linkedSource.SummaryImage ); //override loadLinkProtocolBuilder.For <SingleReferenceLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId + "-overridden", linkedSource => linkedSource.SummaryImage ); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public PolymorphicList_WithDependenciesBetweenItemsTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>() .LoadLinkPolymorphicList( linkedSource => linkedSource.Model.PolyLinks, linkedSource => linkedSource.PolyLinks, link => link.Type, includes => includes.Include <Image>().AsReferenceById( "image", link => link.Id ) .Include <PersonLinkedSource>().AsNestedLinkedSourceById( "person", link => link.Id ) ); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public NestedLinkedSourcesTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <NestedLinkedSources>() .LoadLinkNestedLinkedSourcesByIds( linkedSource => linkedSource.Model.AuthorIds, linkedSource => linkedSource.Authors); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public void LoadLink_WithDiscriminantDuplicate_ShouldThrow() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); Action act = () => loadLinkProtocolBuilder.For <PolymorphicSubLinkedSourceTests.LinkedSource>() .LoadLinkPolymorphic( linkedSource => linkedSource.Model.Target, linkedSource => linkedSource.Target, link => link.Type, includes => includes.Include <PolymorphicSubLinkedSourceTests.WebPageReferenceLinkedSource>().AsNestedLinkedSourceFromModel( "web-page", _ => new PolymorphicSubLinkedSourceTests.WebPageReference() ) .Include <PolymorphicSubLinkedSourceTests.WebPageReferenceLinkedSource>().AsNestedLinkedSourceFromModel( "web-page", _ => new PolymorphicSubLinkedSourceTests.WebPageReference() ) ); var ex = Assert.Throws <LinkItException>(act); Assert.Contains("LinkedSource", ex.Message); Assert.Contains("linkedSource.Target", ex.Message); Assert.Contains("web-page", ex.Message); }
public PolymorphicNestedLinkedSourcesTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <WithNestedPolymorphicContentsLinkedSource>() .LoadLinkPolymorphicList( linkedSource => linkedSource.Model.ContentContextualizations, linkedSource => linkedSource.Contents, link => link.ContentType, includes => includes.Include <PersonWithoutContextualizationLinkedSource>().AsNestedLinkedSourceById( "person", link => (string)link.Id) .Include <ImageWithContextualizationLinkedSource>().AsNestedLinkedSourceById( "image", link => (string)link.Id, (linkedSource, referenceIndex, childLinkedSource) => { var contextualization = linkedSource.Model.ContentContextualizations[referenceIndex]; childLinkedSource.ContentContextualization = contextualization; } ) ); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public SimplestRootLinkedSourceTest() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>(); _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public OptionalNestedLinkedSourceTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.MediaId, linkedSource => linkedSource.Media ); loadLinkProtocolBuilder.For <MediaLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public void ApplySingleValueConventionGeneric <TLinkedSource, TLinkTargetProperty, TLinkedSourceModelProperty>(ConventionMatch match) { var getLinkTargetProperty = FuncGenerator.GenerateFromGetterAsExpression <TLinkedSource, TLinkTargetProperty>( match.LinkTargetProperty.Name ); var getLinkedSourceModelProperty = FuncGenerator .GenerateFromGetter <TLinkedSource, TLinkedSourceModelProperty>( $"Model.{match.LinkedSourceModelProperty.Name}" ); var casted = (ISingleValueConvention)match.Convention; casted.Apply( _loadLinkProtocolBuilder.For <TLinkedSource>(), getLinkedSourceModelProperty, getLinkTargetProperty, match.LinkedSourceModelProperty, match.LinkTargetProperty); }
public LoadLinkModelTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <SingleReferenceLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public LoadLinkPrimitiveModelTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <PrimitiveLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model, linkedSource => linkedSource.Media); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public ContextualizationTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <WithContextualizedReferenceLinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.PersonContextualization.Id, linkedSource => linkedSource.Person, (linkedSource, childLinkedSource) => childLinkedSource.Contextualization = linkedSource.Model.PersonContextualization ); loadLinkProtocolBuilder.For <PersonContextualizedLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Contextualization.SummaryImageId ?? linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public NestedLinkedSourceTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <NestedLinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.AuthorDetailId, linkedSource => linkedSource.AuthorDetail) .LoadLinkReferenceById( linkedSource => linkedSource.Model.ClientSummaryId, linkedSource => linkedSource.ClientSummary); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _referenceLoaderStub = new ReferenceLoaderStub(); _sut = loadLinkProtocolBuilder.Build(() => _referenceLoaderStub); }
public LoadLinkByIdsTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _referenceLoaderStub = new ReferenceLoaderStub(); _sut = loadLinkProtocolBuilder.Build(() => _referenceLoaderStub); }
public void CreateLoadLinkConfig_WithCycleCausedByIndirectNestedLinkedSource_ShouldThrow() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <IndirectCycleLevel0LinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.Level1Id, linkedSource => linkedSource.Level1 ); loadLinkProtocolBuilder.For <IndirectCycleLevel1LinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.Level0Id, linkedSource => linkedSource.Level0 ); Action act = () => loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); var exception = Assert.Throws <InvalidOperationException>(act); Assert.Equal($"Recursive dependency detected for type {{ {typeof(IndirectCycleLevel0LinkedSource).Name} }}.", exception.Message); }
public void CreateLoadLinkConfig_WithCycleCausedByNestedLinkedSourceReference_ShouldThrow() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <ParentLinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.ChildId, linkedSource => linkedSource.Child ); loadLinkProtocolBuilder.For <ChildLinkedSource>() .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.ParentId, linkedSource => linkedSource.Parent ); Action act = () => loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); var exception = Assert.Throws <InvalidOperationException>(act); Assert.Equal($"Recursive dependency detected for type {{ {nameof(ParentLinkedSource)} }}.", exception.Message); }
public NestedLinkedSourceTest() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.PreImageId, linkedSource => linkedSource.PreImage) .LoadLinkNestedLinkedSourceById( linkedSource => linkedSource.Model.PersonId, linkedSource => linkedSource.Person ) .LoadLinkReferenceById( linkedSource => linkedSource.Model.PostImageId, linkedSource => linkedSource.PostImage); loadLinkProtocolBuilder.For <PersonLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public SubLinkedSourceTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <SubContentOwnerLinkedSource>() .LoadLinkNestedLinkedSourceFromModel( linkedSource => linkedSource.Model.SubContent, linkedSource => linkedSource.SubContent) .LoadLinkNestedLinkedSourceFromModel( linkedSource => linkedSource.Model.SubSubContent, linkedSource => linkedSource.SubSubContent); loadLinkProtocolBuilder.For <SubContentLinkedSource>() .LoadLinkNestedLinkedSourceFromModel( linkedSource => linkedSource.Model.SubSubContent, linkedSource => linkedSource.SubSubContent); loadLinkProtocolBuilder.For <SubSubContentLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public ImageWithRatiosCustomLoadLinkTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <WithImageLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.ImageUrl, linkedSource => linkedSource.Image); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub(new ImageReferenceTypeConfigWorkAround()) ); }
public ContextualizationFromRootTests() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <PersonContextualizedLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Contextualization?.SummaryImageId ?? linkedSource.Model.SummaryImageId, linkedSource => linkedSource.SummaryImage); _sut = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }
public void CreateLoadLinkConfig_WithCycleCausedByReference_ShouldNotThrow() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <CycleInReferenceLinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.ParentId, linkedSource => linkedSource.Parent); var loadLinkProtocol = loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); Assert.NotNull(loadLinkProtocol); }
public void ApplySingleValueConventionGeneric <TLinkedSource, TLinkTargetProperty, TLinkedSourceModelProperty>(ConventionMatch match, MethodInfo applyMethod) where TLinkedSource : ILinkedSource { var getLinkTargetProperty = FuncGenerator.GenerateFromGetterAsExpression <TLinkedSource, TLinkTargetProperty>( match.LinkTargetProperty.Name ); var getLinkedSourceModelProperty = FuncGenerator .GenerateFromGetter <TLinkedSource, TLinkedSourceModelProperty>( $"Model.{match.LinkedSourceModelProperty.Name}" ); var parameters = new object[] { _loadLinkProtocolBuilder.For <TLinkedSource>(), getLinkedSourceModelProperty, getLinkTargetProperty, match.LinkedSourceModelProperty, match.LinkTargetProperty }; applyMethod.Invoke(match.Convention, parameters); }
public ReferenceTest() { var loadLinkProtocolBuilder = new LoadLinkProtocolBuilder(); loadLinkProtocolBuilder.For <LinkedSource>() .LoadLinkReferenceById( linkedSource => linkedSource.Model.PersonOneId, linkedSource => linkedSource.PersonOne) .LoadLinkReferenceById( linkedSource => linkedSource.Model.PersonTwoId, linkedSource => linkedSource.PersonTwo ); _sut = (LoadLinkProtocol)loadLinkProtocolBuilder.Build(() => new ReferenceLoaderStub()); }