1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Collections;
using System.Collections.Specialized;
using System.Web.WebPages.TestUtils;
using Microsoft.TestCommon;
using Moq;
using Xunit;
using Xunit.Extensions;
namespace System.Web.Http.WebHost
{
public class SuppressFormsAuthRedirectModuleTest
{
[Fact]
public void DisableAuthenticationRedirect_SetTheFlagToTrue()
{
// Arrange
Mock<HttpContextBase> contextMock = new Mock<HttpContextBase>() {DefaultValue = DefaultValue.Mock};
IDictionary contextItems = new Hashtable();
contextMock.SetupGet(hcb => hcb.Items).Returns(contextItems);
// Act
SuppressFormsAuthRedirectModule.DisableAuthenticationRedirect(contextMock.Object);
// Assert
AssertEx.True(contextItems.Contains(SuppressFormsAuthRedirectModule.DisableAuthenticationRedirectKey));
AssertEx.True((bool) contextItems[SuppressFormsAuthRedirectModule.DisableAuthenticationRedirectKey]);
}
[Fact]
public void EnableAuthenticationRedirect_SetTheFlagToFalse()
{
// Arrange
Mock<HttpContextBase> contextMock = new Mock<HttpContextBase>() { DefaultValue = DefaultValue.Mock };
IDictionary contextItems = new Hashtable();
contextMock.SetupGet(hcb => hcb.Items).Returns(contextItems);
// Act
SuppressFormsAuthRedirectModule.AllowAuthenticationRedirect(contextMock.Object);
// Assert
AssertEx.True(contextItems.Contains(SuppressFormsAuthRedirectModule.DisableAuthenticationRedirectKey));
AssertEx.False((bool) contextItems[SuppressFormsAuthRedirectModule.DisableAuthenticationRedirectKey]);
}
[Fact]
public void OnEndRequest_IfDisableRedirectAndStatusIsRedirect_ModifyResponse()
{
// Arrange
HttpResponse response = new HttpResponse(null);
IDictionary contextItems = new Hashtable();
Mock<HttpContextBase> contextMock = new Mock<HttpContextBase>() { DefaultValue = DefaultValue.Mock };
DisableRedirectStub disableRedirectStub = new DisableRedirectStub(contextItems, response);
contextMock.SetupGet(hcb => hcb.Items).Returns(contextItems);
response.StatusCode = 302;
// Act
SuppressFormsAuthRedirectModule.DisableAuthenticationRedirect(contextMock.Object);
SuppressFormsAuthRedirectModule.EnsureRestoreUnauthorized(disableRedirectStub);
// Assert
AssertEx.Equal(401, response.StatusCode);
}
[Fact]
public void OnEndRequest_IfDisableRedirectAndStatusIsNotRedirect_DoNothing()
{
// Arrange
HttpResponse response = new HttpResponse(null);
IDictionary contextItems = new Hashtable();
Mock<HttpContextBase> contextMock = new Mock<HttpContextBase>() { DefaultValue = DefaultValue.Mock };
DisableRedirectStub disableRedirectStub = new DisableRedirectStub(contextItems, response);
contextMock.SetupGet(hcb => hcb.Items).Returns(contextItems);
response.StatusCode = 200;
// Act
SuppressFormsAuthRedirectModule.DisableAuthenticationRedirect(contextMock.Object);
SuppressFormsAuthRedirectModule.EnsureRestoreUnauthorized(disableRedirectStub);
// Assert
AssertEx.Equal(200, response.StatusCode);
}
[Fact]
public void OnEndRequest_IfEnableRedirectAndStatusIsRedirect_DoNothing()
{
// Arrange
HttpResponse response = new HttpResponse(null);
IDictionary contextItems = new Hashtable();
Mock<HttpContextBase> contextMock = new Mock<HttpContextBase>() { DefaultValue = DefaultValue.Mock };
DisableRedirectStub disableRedirectStub = new DisableRedirectStub(contextItems, response);
contextMock.SetupGet(hcb => hcb.Items).Returns(contextItems);
response.StatusCode = 302;
// Act
SuppressFormsAuthRedirectModule.AllowAuthenticationRedirect(contextMock.Object);
SuppressFormsAuthRedirectModule.EnsureRestoreUnauthorized(disableRedirectStub);
// Assert
AssertEx.Equal(302, response.StatusCode);
}
[Fact]
public void OnEndRequest_IfWebApiControllerReturnsARedirect_DoNothing() {
// Arrange
HttpResponse response = new HttpResponse(null);
IDictionary contextItems = new Hashtable();
Mock<HttpContextBase> contextMock = new Mock<HttpContextBase>() { DefaultValue = DefaultValue.Mock };
DisableRedirectStub disableRedirectStub = new DisableRedirectStub(contextItems, response);
contextMock.SetupGet(hcb => hcb.Items).Returns(contextItems);
response.StatusCode = 302;
// Act
HttpControllerHandler.EnsureSuppressFormsAuthenticationRedirect(contextMock.Object);
SuppressFormsAuthRedirectModule.AllowAuthenticationRedirect(contextMock.Object);
SuppressFormsAuthRedirectModule.EnsureRestoreUnauthorized(disableRedirectStub);
// Assert
AssertEx.Equal(302, response.StatusCode);
}
[Fact]
public void OnEndRequest_IfEnableRedirectAndStatusIsNotRedirect_DoNothing()
{
// Arrange
HttpResponse response = new HttpResponse(null);
IDictionary contextItems = new Hashtable();
Mock<HttpContextBase> contextMock = new Mock<HttpContextBase>() { DefaultValue = DefaultValue.Mock };
DisableRedirectStub disableRedirectStub = new DisableRedirectStub(contextItems, response);
contextMock.SetupGet(hcb => hcb.Items).Returns(contextItems);
response.StatusCode = 200;
// Act
SuppressFormsAuthRedirectModule.AllowAuthenticationRedirect(contextMock.Object);
SuppressFormsAuthRedirectModule.EnsureRestoreUnauthorized(disableRedirectStub);
// Assert
AssertEx.Equal(200, response.StatusCode);
}
[Theory]
[InlineData("false", false)]
[InlineData("true", true)]
[InlineData("", true)]
[InlineData("foo", true)]
public void GetDisabled_ParsesAppSettings(string setting, bool expected)
{
AssertEx.Equal(expected, SuppressFormsAuthRedirectModule.GetEnabled(new NameValueCollection() { { SuppressFormsAuthRedirectModule.AppSettingsSuppressFormsAuthenticationRedirectKey, setting } }));
}
[Fact]
public void PreApplicationStartCode_IsValid()
{
PreAppStartTestHelper.TestPreAppStartClass(typeof(PreApplicationStartCode));
}
}
internal class DisableRedirectStub : SuppressFormsAuthRedirectModule.IDisableRedirect {
private readonly IDictionary _contextItems;
private readonly HttpResponse _response;
public DisableRedirectStub(IDictionary contextItems, HttpResponse response) {
_contextItems = contextItems;
_response = response;
}
public IDictionary ContextItems {
get { return _contextItems; }
}
public HttpResponse Response {
get { return _response; }
}
}
}
|