public void GetStandardValue_WithNonLayoutField_DoesNotCallLayoutValueProvider()
        {
            // Arrange
            var innerProvider = Substitute.For<StandardValuesProvider>();
            var settings = TestUtil.CreateFakeSettings();
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();
            var validator = Substitute.For<IBaseLayoutValidator>();
            var log = Substitute.For<ILog>();
            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);
            var field = MasterFakesFactory.CreateFakeEmptyField();

            // Act
            var result = provider.GetStandardValue(field);

            // Assert
            layoutProvider.DidNotReceive().GetBaseLayoutValue(Arg.Any<Item>());
        }
        public void GetStandardValue_WithNonLayoutField_ReturnsValueFromInnerProvider()
        {
            // Arrange
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();

            var innerProviderValue = "Standard value from inner provider";
            var innerProvider = Substitute.For<StandardValuesProvider>();
            var settings = TestUtil.CreateFakeSettings();
            var validator = Substitute.For<IBaseLayoutValidator>();
            var log = Substitute.For<ILog>();
            innerProvider.GetStandardValue(Arg.Any<Field>()).Returns(innerProviderValue);

            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);
            var field = MasterFakesFactory.CreateFakeEmptyField();

            // Act
            var result = provider.GetStandardValue(field);

            // Assert
            Assert.Equal(innerProviderValue, result);
        }
        public void IsStandardValuesHolder_Always_ReturnsInnerProviderIsStandardValuesHolder()
        {
            // Arrange
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();
            var innerProvider = Substitute.For<StandardValuesProvider>();
            innerProvider.IsStandardValuesHolder(Arg.Any<Item>()).Returns(true);
            var validator = Substitute.For<IBaseLayoutValidator>();
            var settings = TestUtil.CreateFakeSettings();
            var log = Substitute.For<ILog>();
            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);

            var item = MasterFakesFactory.CreateFakeEmptyField().Item;

            // Act
            var result = provider.IsStandardValuesHolder(item);

            // Assert
            Assert.True(result);
        }
        public void Description_Always_ReturnsInnerProviderDescription()
        {
            // Arrange
            var description = "I don't think this is even used";
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();
            var innerProvider = Substitute.For<StandardValuesProvider>();
            var settings = TestUtil.CreateFakeSettings();
            innerProvider.Description.Returns(description);
            var validator = Substitute.For<IBaseLayoutValidator>();
            var log = Substitute.For<ILog>();
            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);

            // Act
            var result = provider.Description;

            // Assert
            Assert.Equal(description, result);
        }
        public void Name_Always_ReturnsInnerProviderName()
        {
            // Arrange
            var name = "baseLayouts";
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();
            var innerProvider = Substitute.For<StandardValuesProvider>();
            innerProvider.Name.Returns(name);
            var settings = TestUtil.CreateFakeSettings();
            var validator = Substitute.For<IBaseLayoutValidator>();
            var log = Substitute.For<ILog>();
            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);

            // Act
            var result = provider.Name;

            // Assert
            Assert.Equal(name, result);
        }
        public void Initialize_Always_CallsInnerProviderInitialize()
        {
            // Arrange
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();
            var innerProvider = Substitute.For<StandardValuesProvider>();
            var settings = TestUtil.CreateFakeSettings();
            var validator = Substitute.For<IBaseLayoutValidator>();
            var log = Substitute.For<ILog>();
            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);

            var name = "baseLayouts";
            var config = new NameValueCollection();

            // Act
            provider.Initialize(name, config);

            // Assert
            innerProvider.Received().Initialize(name, config);
        }
        public void GetStandardValue_WhenLayoutProviderThrowsException_LogsErrorAndReturnsValueFromInnerProvider()
        {
            // Arrange
            var ex = new Exception("Something bad happened.");
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();
            layoutProvider.GetBaseLayoutValue(Arg.Any<Item>()).Throws(ex);

            var innerProviderValue = "Standard value from inner provider";
            var innerProvider = Substitute.For<StandardValuesProvider>();
            innerProvider.GetStandardValue(Arg.Any<Field>()).Returns(innerProviderValue);

            var validator = Substitute.For<IBaseLayoutValidator>();
            validator.ItemSupportsBaseLayouts(Arg.Any<Item>()).Returns(true);
            validator.HasCircularBaseLayoutReference(Arg.Any<Item>()).Returns(false);

            var settings = TestUtil.CreateFakeSettings();
            var log = Substitute.For<ILog>();
            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);
            var field = MasterFakesFactory.CreateFakeLayoutField();

            // Act
            var result = provider.GetStandardValue(field);

            // Assert
            log.Received().Error(ex, Arg.Any<string>());
            Assert.Equal(innerProviderValue, result);
        }
        public void GetStandardValue_WithFinalLayoutFieldAndEmptyLayoutValue_ReturnsValueFromInnerProvider()
        {
            // Arrange
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();
            layoutProvider.GetBaseLayoutValue(Arg.Any<Item>()).Returns(string.Empty);

            var innerProviderValue = "Standard value from inner provider";
            var innerProvider = Substitute.For<StandardValuesProvider>();
            innerProvider.GetStandardValue(Arg.Any<Field>()).Returns(innerProviderValue);

            var settings = TestUtil.CreateFakeSettings();
            var validator = Substitute.For<IBaseLayoutValidator>();
            validator.ItemSupportsBaseLayouts(Arg.Any<Item>()).Returns(true);
            validator.HasCircularBaseLayoutReference(Arg.Any<Item>()).Returns(false);
            var log = Substitute.For<ILog>();
            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);
            var field = MasterFakesFactory.CreateFakeFinalLayoutField();

            // Act
            var result = provider.GetStandardValue(field);

            // Assert
            Assert.Equal(innerProviderValue, result);
        }
        public void GetStandardValue_WithAlwaysCheckForCircularReferenceTrueAndFinalLayoutFieldFromItemWithCircularReference_CallsLogWarn()
        {
            // Arrange
            var layoutProvider = Substitute.For<IBaseLayoutValueProvider>();
            var innerProvider = Substitute.For<StandardValuesProvider>();
            var settings = TestUtil.CreateFakeSettings(null, true);
            var validator = Substitute.For<IBaseLayoutValidator>();
            validator.HasCircularBaseLayoutReference(Arg.Any<Item>()).Returns(true);
            validator.ItemSupportsBaseLayouts(Arg.Any<Item>()).Returns(true);
            var log = Substitute.For<ILog>();
            var provider = new BaseLayoutStandardValuesProvider(innerProvider, settings, layoutProvider, validator, log);
            var field = MasterFakesFactory.CreateFakeFinalLayoutField();

            // Act
            var result = provider.GetStandardValue(field);

            // Assert
            log.ReceivedWithAnyArgs().Warn(Arg.Any<string>());
        }