public void Decorate_IWebElement(
            IEnumerable <By> bys,
            IElementLocator elementLocator,
            [Frozen] Mock <IWebDriver> webDriverMock,
            [Frozen] WrapsElement wrapsElement,
            [Frozen] Mock <IElementActivator> elementActivatorMock,
            ProxyPageObjectMemberDecorator sut)
        {
            var result = sut.Decorate(typeof(IWebElement), bys, elementLocator);

            result.GetType().Name.Should().Contain("Proxy");
        }
        public void Decorate_IWrapsElementIEnumerableImplementation(
            Type type,
            IEnumerable <By> bys,
            IElementLocator elementLocator,
            [Frozen] WrapsElement wrapsElement,
            [Frozen] Mock <IElementActivator> elementActivatorMock,
            ProxyPageObjectMemberDecorator sut)
        {
            elementActivatorMock
            .Setup(x => x.Create(type, It.IsAny <object[]>()))
            .Returns(wrapsElement);

            new Action(() => sut.Decorate(type, bys, elementLocator)).Should().NotThrow();
        }
        public void Decorate_IWebElementEnumerable(
            Type type,
            IEnumerable <By> bys,
            IElementLocator elementLocator,
            [Frozen] Mock <IWebDriver> webDriverMock,
            [Frozen] WrapsElement wrapsElement,
            [Frozen] Mock <IElementActivator> elementActivatorMock,
            ProxyPageObjectMemberDecorator sut)
        {
            var result = (IEnumerable <IWebElement>)sut.Decorate(type, bys, elementLocator);

            foreach (var member in result)
            {
                member.Should().GetType().Name.Should().Contain("Proxy");
            }
        }
        public void Decorate_IWrapsElementIEnumerableImplementation_Unsupported(
            Type type,
            IEnumerable <By> bys,
            IElementLocator elementLocator,
            [Frozen] WrapsElement wrapsElement,
            [Frozen] Mock <IElementActivator> elementActivatorMock,
            ProxyPageObjectMemberDecorator sut)
        {
            elementActivatorMock
            .Setup(x => x.Create(type, It.IsAny <object[]>()))
            .Returns(wrapsElement);

            new Action(() => sut.Decorate(type, bys, elementLocator)).Should()
            .Throw <DecorationException>()
            .WithMessage($"Unable to decorate {type.Name}, it is unsupported");
        }
        public void Decorate_IWrapsElementImplementation(
            IEnumerable <By> bys,
            IElementLocator elementLocator,
            [Frozen] Mock <IWebDriver> webDriverMock,
            [Frozen] WrapsElement wrapsElement,
            [Frozen] Mock <IElementActivator> elementActivatorMock,
            ProxyPageObjectMemberDecorator sut)
        {
            elementActivatorMock
            .Setup(x => x.Create(typeof(WrapsElement), It.IsAny <object[]>()))
            .Callback(new Action <Type, object[]>((typeToActivate, args) =>
            {
                args[0].GetType().Name.Should().Contain("Proxy");
            }))
            .Returns(wrapsElement);

            var result = sut.Decorate(typeof(WrapsElement), bys, elementLocator);

            result.Should().BeOfType <WrapsElement>();
            elementActivatorMock
            .Verify(x => x.Create(typeof(WrapsElement), It.IsAny <object[]>()), Times.Once());
        }