public void WhenNoChildElementName_ThenThrows()
            {
                var rule = new CardinalityValidationRule();

                Assert.Throws <ValidationException>(
                    () => rule.Validate().ToList());
            }
            public void WhenMinimunIsGreaterThanMaximun_ThenThrows()
            {
                var rule = new CardinalityValidationRule();

                rule.ChildElementName = "Foo";
                rule.Maximum          = 1;
                rule.Minimum          = 3;
                rule.CurrentElement   = new Mock <IProduct>().Object;

                Assert.Throws <InvalidOperationException>(() =>
                                                          rule.Validate().ToList());
            }
            public void InitializeContext()
            {
                var elementInfo1 = Mocks.Of <IElementInfo>().First(i => i.Name == "FooElementName" && i.DisplayName == "FooElementNameDisplayName");
                var element1     = new Mock <IElement>();

                element1.SetupGet(e => e.Info).Returns(elementInfo1);
                element1.As <IAbstractElement>().SetupGet(e => e.Info).Returns(elementInfo1);
                element1.As <IProductElement>().SetupGet(e => e.Info).Returns(elementInfo1);

                var elementInfo2 = Mocks.Of <IElementInfo>().First(i => i.Name == "BarElementName" && i.DisplayName == "BarElementNameDisplayName");
                var element2     = new Mock <IElement>();

                element2.Setup(e => e.InstanceName).Returns("FooElement2NameDisplayName");
                element2.SetupGet(e => e.Info).Returns(elementInfo2);
                element2.As <IAbstractElement>().SetupGet(e => e.Info).Returns(elementInfo2);
                element2.As <IProductElement>().SetupGet(e => e.Info).Returns(elementInfo2);

                var viewInfo = new Mock <IViewInfo>();

                viewInfo.SetupGet(v => v.Elements).Returns(new[] { elementInfo1, elementInfo2 });
                var view = new Mock <IView>();

                view.SetupGet(v => v.Info).Returns(viewInfo.Object);
                view.SetupGet(v => v.Elements).Returns(new[] { element1.Object, element2.Object });

                var productInfo = new Mock <IPatternInfo>();

                productInfo.SetupGet(pi => pi.Name).Returns("FooProductName");
                productInfo.SetupGet(pi => pi.Views).Returns(new[] { viewInfo.Object });

                var product = new Mock <IProduct>();

                product.Setup(p => p.InstanceName).Returns("TestProduct");
                product.As <IProduct>().SetupGet(p => p.Info).Returns(productInfo.Object);
                product.As <IProductElement>().SetupGet(p => p.Info).Returns(productInfo.Object);
                product.SetupGet(p => p.Views).Returns(new[] { view.Object });

                this.rule = new CardinalityValidationRule();
                this.rule.CurrentElement = product.Object;
            }