A filter that saves temp data.
Inheritance: IResourceFilter, IResultFilter
Esempio n. 1
0
        public void OnResourceExecuting_RegistersOnStartingCallback()
        {
            // Arrange
            var responseFeature = new Mock <IHttpResponseFeature>(MockBehavior.Strict);

            responseFeature
            .Setup(rf => rf.OnStarting(It.IsAny <Func <object, Task> >(), It.IsAny <object>()))
            .Verifiable();
            responseFeature
            .SetupGet(rf => rf.HasStarted)
            .Returns(false);

            var tempDataFactory = new Mock <ITempDataDictionaryFactory>(MockBehavior.Strict);

            tempDataFactory
            .Setup(f => f.GetTempData(It.IsAny <HttpContext>()))
            .Verifiable();
            var filter      = new SaveTempDataFilter(tempDataFactory.Object);
            var httpContext = GetHttpContext(responseFeature.Object);
            var context     = GetResourceExecutingContext(httpContext);

            // Act
            filter.OnResourceExecuting(context);

            // Assert
            responseFeature.Verify();
            tempDataFactory.Verify(tdf => tdf.GetTempData(It.IsAny <HttpContext>()), Times.Never());
        }
Esempio n. 2
0
        public async Task OnResourceExecuting_DoesNotSaveTempData_WhenUnhandledExceptionOccurs()
        {
            // Arrange
            var responseFeature = new TestResponseFeature();
            var httpContext     = GetHttpContext(responseFeature);

            httpContext.Items[SaveTempDataFilter.SaveTempDataFilterContextKey] = new SaveTempDataFilter.SaveTempDataContext()
            {
                RequestHasUnhandledException = true
            };
            var tempDataFactory = new Mock <ITempDataDictionaryFactory>(MockBehavior.Strict);

            tempDataFactory
            .Setup(f => f.GetTempData(It.IsAny <HttpContext>()))
            .Verifiable();
            var filter  = new SaveTempDataFilter(tempDataFactory.Object);
            var context = GetResourceExecutingContext(httpContext);

            filter.OnResourceExecuting(context); // registers callback

            // Act
            await responseFeature.FireOnSendingHeadersAsync();

            // Assert
            tempDataFactory.Verify(tdf => tdf.GetTempData(It.IsAny <HttpContext>()), Times.Never());
        }
        public void SaveTempDataFilter_OnResultExecuted_KeepsTempData_ForIKeepTempDataResult()
        {
            // Arrange
            var tempData = new Mock <ITempDataDictionary>(MockBehavior.Strict);

            tempData
            .Setup(m => m.Keep())
            .Verifiable();

            var tempDataFactory = new Mock <ITempDataDictionaryFactory>(MockBehavior.Strict);

            tempDataFactory
            .Setup(f => f.GetTempData(It.IsAny <HttpContext>()))
            .Returns(tempData.Object);

            var filter = new SaveTempDataFilter(tempDataFactory.Object);

            var context = new ResultExecutedContext(
                new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor()),
                new IFilterMetadata[] { },
                new Mock <IKeepTempDataResult>().Object,
                new object());

            // Act
            filter.OnResultExecuted(context);

            // Assert
            tempData.Verify();
        }
Esempio n. 4
0
        public void OnResultExecuted_DoesNotSaveTempData_WhenResponseHas_AlreadyStarted()
        {
            // Arrange
            var tempDataFactory = new Mock <ITempDataDictionaryFactory>(MockBehavior.Strict);

            tempDataFactory
            .Setup(f => f.GetTempData(It.IsAny <HttpContext>()))
            .Verifiable();
            var filter      = new SaveTempDataFilter(tempDataFactory.Object);
            var httpContext = GetHttpContext(new TestResponseFeature(hasStarted: true));
            var context     = GetResultExecutedContext(httpContext);

            // Act
            filter.OnResultExecuted(context);

            // Assert
            tempDataFactory.Verify(tdf => tdf.GetTempData(It.IsAny <HttpContext>()), Times.Never());
        }
Esempio n. 5
0
        public async Task OnResultExecuting_DoesntThrowIfResponseStarted()
        {
            // Arrange
            var responseFeature = new TestResponseFeature(hasStarted: true);
            var httpContext     = GetHttpContext(responseFeature);
            var tempDataFactory = new Mock <ITempDataDictionaryFactory>(MockBehavior.Loose);

            tempDataFactory
            .Setup(f => f.GetTempData(It.IsAny <HttpContext>()))
            .Verifiable();
            var filter  = new SaveTempDataFilter(tempDataFactory.Object);
            var context = GetResultExecutingContext(httpContext);

            filter.OnResultExecuting(context);

            // Act
            // Checking it doesn't throw
            await responseFeature.FireOnSendingHeadersAsync();
        }
Esempio n. 6
0
        public void OnResultExecuted_CanBeCalledTwice()
        {
            // Arrange
            var responseFeature = new TestResponseFeature();
            var httpContext     = GetHttpContext(responseFeature);
            var tempData        = GetTempDataDictionary();
            var tempDataFactory = new Mock <ITempDataDictionaryFactory>(MockBehavior.Strict);

            tempDataFactory
            .Setup(f => f.GetTempData(It.IsAny <HttpContext>()))
            .Returns(tempData.Object)
            .Verifiable();
            var filter  = new SaveTempDataFilter(tempDataFactory.Object);
            var context = GetResultExecutedContext(httpContext);

            // Act (No Assert)
            filter.OnResultExecuted(context);
            // Shouldn't have thrown
            filter.OnResultExecuted(context);
        }
Esempio n. 7
0
        public async Task OnResultExecuting_DoesNotSaveTempData_WhenTempDataAlreadySaved()
        {
            // Arrange
            var responseFeature = new TestResponseFeature();
            var httpContext     = GetHttpContext(responseFeature);

            httpContext.Items[SaveTempDataFilter.TempDataSavedKey] = true; // indicate that tempdata was already saved
            var tempDataFactory = new Mock <ITempDataDictionaryFactory>(MockBehavior.Strict);

            tempDataFactory
            .Setup(f => f.GetTempData(It.IsAny <HttpContext>()))
            .Verifiable();
            var filter  = new SaveTempDataFilter(tempDataFactory.Object);
            var context = GetResultExecutingContext(httpContext);

            filter.OnResultExecuting(context); // registers callback

            // Act
            await responseFeature.FireOnSendingHeadersAsync();

            // Assert
            tempDataFactory.Verify(tdf => tdf.GetTempData(It.IsAny <HttpContext>()), Times.Never());
        }
        public void SaveTempDataFilter_OnResultExecuted_DoesNotKeepTempData_ForNonIKeepTempDataResult()
        {
            // Arrange
            var tempData = new Mock <ITempDataDictionary>(MockBehavior.Strict);

            var tempDataFactory = new Mock <ITempDataDictionaryFactory>(MockBehavior.Strict);

            tempDataFactory
            .Setup(f => f.GetTempData(It.IsAny <HttpContext>()))
            .Returns(tempData.Object);

            var filter = new SaveTempDataFilter(tempDataFactory.Object);

            var context = new ResultExecutedContext(
                new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor()),
                new IFilterMetadata[] { },
                new Mock <IActionResult>().Object,
                new object());

            // Act
            filter.OnResultExecuted(context);

            // Assert - The mock will throw if we do the wrong thing.
        }