public void InitElements_Indexer(PageObjectWithDecoratedIndexer pageObjectWithDecoratedIndexer,
                                  PageObjectFactory pageObjectFactory)
 {
     new Action(() => pageObjectFactory.InitElements(pageObjectWithDecoratedIndexer)).Should()
     .Throw <DecorationException>()
     .WithMessage($"Unable to decorate {pageObjectWithDecoratedIndexer.GetType().Name}.Item, it cannot be written to");
 }
        public void InitElements_DoesNotDecorateUndecoratedMembers([Frozen] Mock <IPageObjectMemberDecorator> memberDecoratorMock,
                                                                   PageObjectFactory pageObjectFactory)
        {
            pageObjectFactory.InitElements(new PageObjectWithUndecoratedMembers());

            memberDecoratorMock.Verify(x => x.Decorate(It.IsAny <Type>(),
                                                       It.IsAny <IEnumerable <By> >(),
                                                       It.IsAny <IElementLocator>()), Times.Never());
        }
        public void InitElements_DecoratesProperties([Frozen] Mock <IPageObjectMemberDecorator> memberDecoratorMock,
                                                     PageObjectFactory pageObjectFactory,
                                                     PageObjectWithProperties pageObject,
                                                     int value)
        {
            memberDecoratorMock.Setup(x => x.Decorate(typeof(int),
                                                      It.IsAny <IEnumerable <By> >(),
                                                      It.IsAny <IElementLocator>()))
            .Returns(value);

            pageObjectFactory.InitElements(pageObject);

            memberDecoratorMock.Verify(x => x.Decorate(typeof(int),
                                                       It.IsAny <IEnumerable <By> >(),
                                                       It.IsAny <IElementLocator>()), Times.Exactly(4));

            pageObject.PublicProperty.Should().Be(value);
            pageObject.PrivatePropertyValue().Should().Be(value);
            pageObject.ProtectedPropertyValue().Should().Be(value);
            pageObject.InternalPropertyValue().Should().Be(value);
        }
 public void InitElements_ArgumentNullException(PageObjectFactory pageObjectFactory)
 {
     new Action(() => pageObjectFactory.InitElements(null)).Should()
     .Throw <ArgumentNullException>();
 }