forked from aspnet/AspNetWebStack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHostAuthenticationAttributeTest.cs
More file actions
201 lines (165 loc) · 6.97 KB
/
Copy pathHostAuthenticationAttributeTest.cs
File metadata and controls
201 lines (165 loc) · 6.97 KB
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Security.Principal;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using Microsoft.TestCommon;
using Moq;
namespace System.Web.Http.Owin
{
public class HostAuthenticationAttributeTest
{
[Fact]
public void AttributeUsageValidOn_IsClassOrMethod()
{
// Act
AttributeUsageAttribute usage = (AttributeUsageAttribute)Attribute.GetCustomAttribute(
typeof(HostAuthenticationAttribute), typeof(AttributeUsageAttribute));
// Assert
Assert.NotNull(usage);
Assert.Equal(AttributeTargets.Class | AttributeTargets.Method, usage.ValidOn);
}
[Fact]
public void AttributeUsageAllowMultiple_IsTrue()
{
// Act
AttributeUsageAttribute usage = (AttributeUsageAttribute)Attribute.GetCustomAttribute(
typeof(HostAuthenticationAttribute), typeof(AttributeUsageAttribute));
// Assert
Assert.NotNull(usage);
Assert.True(usage.AllowMultiple);
}
[Fact]
public void Constructor_ThrowsWhenInnerFilterIsNull()
{
// Arrange
IAuthenticationFilter innerFilter = null;
// Act & Assert
Assert.ThrowsArgumentNull(() => { var ignore = CreateProductUnderTest(innerFilter); }, "innerFilter");
}
[Fact]
public void InnerFilter_ReturnsSpecifiedInstance()
{
// Arrange
IAuthenticationFilter expectedInnerFilter = CreateDummyFilter();
HostAuthenticationAttribute product = CreateProductUnderTest(expectedInnerFilter);
// Act
IAuthenticationFilter innerFilter = product.InnerFilter;
// Assert
Assert.Same(expectedInnerFilter, innerFilter);
}
[Fact]
public void AllowMultiple_ReturnsTrue()
{
// Arrange
IAuthenticationFilter innerFilter = CreateDummyFilter();
IAuthenticationFilter product = CreateProductUnderTest(innerFilter);
// Act
bool allowMultiple = product.AllowMultiple;
// Assert
Assert.True(allowMultiple);
}
[Fact]
public void AuthenticateAsync_DelegatesToInnerFilter()
{
// Arrange
Task expectedTask = CreateTask();
HttpAuthenticationContext context = CreateAuthenticationContext();
CancellationToken cancellationToken = CreateCancellationToken();
Mock<IAuthenticationFilter> spyMock = new Mock<IAuthenticationFilter>(MockBehavior.Strict);
spyMock.Setup(f => f.AuthenticateAsync(context, cancellationToken)).Returns(expectedTask);
IAuthenticationFilter spy = spyMock.Object;
IAuthenticationFilter product = CreateProductUnderTest(spy);
// Act
Task task = product.AuthenticateAsync(context, cancellationToken);
// Assert
Assert.Same(expectedTask, task);
}
[Fact]
public void ChallengeAsync_DelegatesToInnerFilter()
{
// Arrange
Task expectedTask = CreateTask();
HttpAuthenticationChallengeContext context = CreateChallengeContext();
CancellationToken cancellationToken = CreateCancellationToken();
Mock<IAuthenticationFilter> spyMock = new Mock<IAuthenticationFilter>(MockBehavior.Strict);
spyMock.Setup(f => f.ChallengeAsync(context, cancellationToken)).Returns(expectedTask);
IAuthenticationFilter spy = spyMock.Object;
IAuthenticationFilter product = CreateProductUnderTest(spy);
// Act
Task task = product.ChallengeAsync(context, cancellationToken);
// Assert
Assert.Same(expectedTask, task);
}
[Fact]
public void ConstructorWithString_ThrowsWhenAuthenticationTypeIsNull()
{
// Arrange
string authenticationType = null;
// Act & Assert
Assert.ThrowsArgumentNull(() => { var ignore = CreateProductUnderTest(authenticationType); },
"authenticationType");
}
[Fact]
public void InnerFilter_IsHostAuthenticationFilter_WhenUsingConstructorWithString()
{
// Arrange
string expectedAuthenticationType = "Ignore";
HostAuthenticationAttribute product = CreateProductUnderTest(expectedAuthenticationType);
// Act
IAuthenticationFilter innerFilter = product.InnerFilter;
// Assert
HostAuthenticationFilter typedInnerFilter = Assert.IsType<HostAuthenticationFilter>(innerFilter);
Assert.Same(expectedAuthenticationType, typedInnerFilter.AuthenticationType);
}
[Fact]
public void AuthenticationType_IsSpecifiedInstance_WhenUsingConstructorWithString()
{
// Arrange
string expectedAuthenticationType = "Ignore";
HostAuthenticationAttribute product = CreateProductUnderTest(expectedAuthenticationType);
// Act
string authenticationType = product.AuthenticationType;
// Assert
Assert.Same(expectedAuthenticationType, authenticationType);
}
private static HttpAuthenticationContext CreateAuthenticationContext()
{
return new HttpAuthenticationContext(new HttpActionContext(), CreateDummyPrincipal());
}
private static CancellationToken CreateCancellationToken()
{
return new CancellationToken(true);
}
private static HttpAuthenticationChallengeContext CreateChallengeContext()
{
return new HttpAuthenticationChallengeContext(new HttpActionContext(), CreateDummyActionResult());
}
private static IHttpActionResult CreateDummyActionResult()
{
return new Mock<IHttpActionResult>(MockBehavior.Strict).Object;
}
private static IAuthenticationFilter CreateDummyFilter()
{
return new Mock<IAuthenticationFilter>(MockBehavior.Strict).Object;
}
private static IPrincipal CreateDummyPrincipal()
{
return new Mock<IPrincipal>(MockBehavior.Strict).Object;
}
private static HostAuthenticationAttribute CreateProductUnderTest(string authenticationType)
{
return new HostAuthenticationAttribute(authenticationType);
}
private static HostAuthenticationAttribute CreateProductUnderTest(IAuthenticationFilter innerFilter)
{
return new HostAuthenticationAttribute(innerFilter);
}
private static Task CreateTask()
{
return Task.FromResult<object>(null);
}
}
}