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