public void OnProvidersExecuting_DoesNotAddFilter_IfTypeHasNoTempDataProperties()
        {
            // Arrange
            var type     = typeof(TestPageModel_NoTempDataProperties);
            var options  = Options.Create(new MvcViewOptions());
            var provider = new TempDataFilterPageApplicationModelProvider(options);
            var context  = CreateProviderContext(type);

            // Act
            provider.OnProvidersExecuting(context);

            // Assert
            Assert.Empty(context.PageApplicationModel.Filters);
        }
        public void OnProvidersExecuting_ValidatesTempDataProperties()
        {
            // Arrange
            var type     = typeof(TestPageModel_PrivateSet);
            var expected = $"The '{type.FullName}.Test' property with TempDataAttribute is invalid. A property using TempDataAttribute must have a public getter and setter.";

            var options  = Options.Create(new MvcViewOptions());
            var provider = new TempDataFilterPageApplicationModelProvider(options);
            var context  = CreateProviderContext(type);

            // Act & Assert
            var ex = Assert.Throws <InvalidOperationException>(() => provider.OnProvidersExecuting(context));

            Assert.Equal(expected, ex.Message);
        }
        public void AddsTempDataPropertyFilter_ForTempDataAttributeProperties()
        {
            // Arrange
            var type     = typeof(TestPageModel_OneTempDataProperty);
            var options  = Options.Create(new MvcViewOptions());
            var provider = new TempDataFilterPageApplicationModelProvider(options);
            var context  = CreateProviderContext(type);

            // Act
            provider.OnProvidersExecuting(context);

            // Assert
            var filter = Assert.Single(context.PageApplicationModel.Filters);

            Assert.IsType <PageSaveTempDataPropertyFilterFactory>(filter);
        }
        public void InitializeFilterFactory_WithExpectedPropertyHelpers_ForTempDataAttributeProperties()
        {
            // Arrange
            var type     = typeof(TestPageModel_OneTempDataProperty);
            var options  = Options.Create(new MvcViewOptions());
            var provider = new TempDataFilterPageApplicationModelProvider(options);
            var context  = CreateProviderContext(type);

            // Act
            provider.OnProvidersExecuting(context);

            // Assert
            var filter = Assert.IsType <PageSaveTempDataPropertyFilterFactory>(Assert.Single(context.PageApplicationModel.Filters));

            Assert.Collection(
                filter.Properties,
                property =>
            {
                Assert.Equal("TempDataProperty-Test2", property.Key);
                Assert.Equal(type.GetProperty(nameof(TestPageModel_OneTempDataProperty.Test2)), property.PropertyInfo);
            });
        }
        public void OnProvidersExecuting_AddsFiltersToModel()
        {
            // Arrange
            var actionDescriptor = new PageActionDescriptor();
            var applicationModel = new PageApplicationModel(
                actionDescriptor,
                typeof(object).GetTypeInfo(),
                new object[0]);
            var applicationModelProvider = new TempDataFilterPageApplicationModelProvider();
            var context = new PageApplicationModelProviderContext(new PageActionDescriptor(), typeof(object).GetTypeInfo())
            {
                PageApplicationModel = applicationModel,
            };

            // Act
            applicationModelProvider.OnProvidersExecuting(context);

            // Assert
            Assert.Collection(
                applicationModel.Filters,
                filter => Assert.IsType <PageSaveTempDataPropertyFilterFactory>(filter));
        }
        public void OnProvidersExecuting_SetsKeyPrefixToEmptyString_IfCompatSwitchIsSet()
        {
            // Arrange
            var type    = typeof(TestPageModel_OneTempDataProperty);
            var options = Options.Create(new MvcViewOptions {
                SuppressTempDataAttributePrefix = true
            });
            var provider = new TempDataFilterPageApplicationModelProvider(options);
            var context  = CreateProviderContext(type);

            // Act
            provider.OnProvidersExecuting(context);

            // Assert
            var filter = Assert.IsType <PageSaveTempDataPropertyFilterFactory>(Assert.Single(context.PageApplicationModel.Filters));

            Assert.Collection(
                filter.Properties,
                property =>
            {
                Assert.Equal("Test2", property.Key);
            });
        }