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_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 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 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 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>());
        }
        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);
        }