public void GivenPageTypeDefinition_ValidatePageTypeProperties_CallsValidatePageTypePropertyForEachPropertyWithPageTypePropertyAttribute()
        {
            PageTypeDefinition definition = new PageTypeDefinition
            {
                Type      = typeof(TestPageType),
                Attribute = new PageTypeAttribute()
            };
            MockRepository fakes = new MockRepository();
            PageTypeDefinitionPropertiesValidator propertiesValidator = fakes.PartialMock <PageTypeDefinitionPropertiesValidator>((PageDefinitionTypeMapper)null);

            propertiesValidator.Stub(
                validator => validator.ValidatePageTypeProperty(
                    Arg <PropertyInfo> .Is.Anything));
            propertiesValidator.Replay();

            propertiesValidator.ValidatePageTypeProperties(definition);

            int expectedNumberOfCalls = (from property in definition.Type.GetPublicOrPrivateProperties()
                                         where property.HasAttribute(typeof(PageTypePropertyAttribute))
                                         select property).Count();

            propertiesValidator.AssertWasCalled(validator =>
                                                validator.ValidatePageTypeProperty(
                                                    Arg <PropertyInfo> .Is.NotNull), options => options.Repeat.Times(expectedNumberOfCalls));
        }
        public void GivenPageTypeDefinition_ValidatePageTypeProperties_ValidatesOk_WhenCollissionsExistsInInterfaceDefinitionsButIsTrumpedByDefinitionInPageTypeDefinition()
        {
            PageTypeDefinition definition = new PageTypeDefinition
            {
                Type      = typeof(TestPageTypeWithClashingInterfacesWhichAlsoDefinesProperty),
                Attribute = new PageTypeAttribute()
            };
            MockRepository fakes = new MockRepository();
            PageTypeDefinitionPropertiesValidator propertiesValidator = fakes.PartialMock <PageTypeDefinitionPropertiesValidator>((PageDefinitionTypeMapper)null);

            propertiesValidator.Stub(
                validator => validator.ValidatePageTypePropertyType(Arg <PropertyInfo> .Is.Anything));
            propertiesValidator.Replay();
            propertiesValidator.ValidatePageTypeProperties(definition);
        }
        public void GivenPageTypeDefinition_ValidatePageTypeProperties_ValidatesNotOk_WhenCollissionsExistsInInterfaceDefinitions()
        {
            PageTypeDefinition definition = new PageTypeDefinition
            {
                Type      = typeof(TestPageTypeWithClashingInterfaces),
                Attribute = new PageTypeAttribute()
            };
            MockRepository fakes = new MockRepository();
            PageTypeDefinitionPropertiesValidator propertiesValidator = fakes.PartialMock <PageTypeDefinitionPropertiesValidator>((PageDefinitionTypeMapper)null);

            propertiesValidator.Stub(
                validator => validator.ValidatePageTypePropertyType(Arg <PropertyInfo> .Is.Anything));
            propertiesValidator.Replay();
            Assert.Throws(typeof(PageTypeBuilderException), () => propertiesValidator.ValidatePageTypeProperties(definition));
        }
        public void GivenPageTypeDefinition_ValidatePageTypeProperties_ValidatesOk_WhenNoCollissionsInInterfaceDefinitions()
        {
            PageTypeDefinition definition = new PageTypeDefinition
            {
                Type      = typeof(TestPageTypeWithInterface),
                Attribute = new PageTypeAttribute()
            };
            MockRepository fakes = new MockRepository();
            PageTypeDefinitionPropertiesValidator propertiesValidator = fakes.PartialMock <PageTypeDefinitionPropertiesValidator>((PageDefinitionTypeMapper)null);

            propertiesValidator.Stub(
                validator => validator.ValidatePageTypePropertyType(Arg <PropertyInfo> .Is.Anything));
            propertiesValidator.Replay();

            propertiesValidator.ValidatePageTypeProperties(definition);
        }
        public void GivenPageTypeDefinition_ValidatePageTypeProperties_FindsCorrectNumberOfPropertisInInterface()
        {
            PageTypeDefinition definition = new PageTypeDefinition
            {
                Type      = typeof(TestPageTypeWithInterface),
                Attribute = new PageTypeAttribute()
            };
            MockRepository fakes = new MockRepository();
            PageTypeDefinitionPropertiesValidator propertiesValidator = fakes.PartialMock <PageTypeDefinitionPropertiesValidator>((PageDefinitionTypeMapper)null);

            propertiesValidator.Stub(
                validator => validator.ValidatePageTypePropertyType(Arg <PropertyInfo> .Is.Anything));
            propertiesValidator.Replay();
            propertiesValidator.ValidatePageTypeProperties(definition);
            propertiesValidator.AssertWasCalled(validator =>
                                                validator.ValidatePageTypePropertyType(
                                                    Arg <PropertyInfo> .Is.NotNull), options => options.Repeat.Times(1));
        }
        public void GivenPageTypeDefinition_ValidatePageTypeProperties_FindsCorrectPropertyInInterface()
        {
            PageTypeDefinition definition = new PageTypeDefinition
            {
                Type      = typeof(TestPageTypeWithInterface),
                Attribute = new PageTypeAttribute()
            };
            MockRepository fakes = new MockRepository();
            PageTypeDefinitionPropertiesValidator propertiesValidator = fakes.PartialMock <PageTypeDefinitionPropertiesValidator>((PageDefinitionTypeMapper)null);

            propertiesValidator.Stub(
                validator => validator.ValidatePageTypePropertyType(Arg <PropertyInfo> .Is.Anything));
            propertiesValidator.Replay();
            propertiesValidator.ValidatePageTypeProperties(definition);
            propertiesValidator.AssertWasCalled(validator =>
                                                validator.ValidatePageTypePropertyType(
                                                    Arg <PropertyInfo> .Matches(p => ((PageTypePropertyAttribute)
                                                                                      p.GetCustomAttributes(typeof(PageTypePropertyAttribute), false).First()).EditCaption == TestEditCaptions.FromInterfaceA)));
        }
        public void GivenPageTypeDefinition_ValidatePageTypeProperties_CanOverridePropertyFromClashingInterfacesInPageType()
        {
            PageTypeDefinition definition = new PageTypeDefinition
            {
                Type      = typeof(TestPageTypeWithClashingInterfacesWhichAlsoDefinesProperty),
                Attribute = new PageTypeAttribute()
            };
            MockRepository fakes = new MockRepository();
            PageTypeDefinitionPropertiesValidator propertiesValidator = fakes.PartialMock <PageTypeDefinitionPropertiesValidator>((PageDefinitionTypeMapper)null);

            propertiesValidator.Stub(
                validator => validator.ValidatePageTypePropertyType(Arg <PropertyInfo> .Is.Anything));
            propertiesValidator.Replay();
            propertiesValidator.ValidatePageTypeProperties(definition);
            propertiesValidator.AssertWasCalled(validator =>
                                                validator.ValidatePageTypePropertyType(
                                                    Arg <PropertyInfo> .Matches(p => ((PageTypePropertyAttribute)
                                                                                      p.GetCustomAttributes(typeof(PageTypePropertyAttribute), false).First()).EditCaption == TestEditCaptions.FromPageType)));
            propertiesValidator.AssertWasCalled(validator =>
                                                validator.ValidatePageTypeProperty(
                                                    Arg <PropertyInfo> .Is.NotNull), options => options.Repeat.Times(1));
        }