@@ -12,6 +12,7 @@ namespace Backend.Tests.Controllers
12
12
public class UserControllerTests : IDisposable
13
13
{
14
14
private IUserRepository _userRepo = null ! ;
15
+ private IPasswordResetService _passwordResetService = null ! ;
15
16
private IPermissionService _permissionService = null ! ;
16
17
private UserController _userController = null ! ;
17
18
@@ -33,9 +34,10 @@ protected virtual void Dispose(bool disposing)
33
34
public void Setup ( )
34
35
{
35
36
_userRepo = new UserRepositoryMock ( ) ;
37
+ _passwordResetService = new PasswordResetServiceMock ( ) ;
36
38
_permissionService = new PermissionServiceMock ( _userRepo ) ;
37
39
_userController = new UserController ( _userRepo , _permissionService ,
38
- new CaptchaServiceMock ( ) , new EmailServiceMock ( ) , new PasswordResetServiceMock ( ) ) ;
40
+ new CaptchaServiceMock ( ) , new EmailServiceMock ( ) , _passwordResetService ) ;
39
41
}
40
42
41
43
private static User RandomUser ( )
@@ -49,6 +51,62 @@ private static User RandomUser()
49
51
return user ;
50
52
}
51
53
54
+ [ Test ]
55
+ public void TestVerifyCaptchaToken ( )
56
+ {
57
+ // No permissions should be required to verify CAPTCHA.
58
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
59
+
60
+ var result = _userController . VerifyCaptchaToken ( "token" ) . Result ;
61
+ Assert . That ( result , Is . TypeOf < OkResult > ( ) ) ;
62
+ }
63
+
64
+ [ Test ]
65
+ public void TestResetPasswordRequest ( )
66
+ {
67
+ // No permissions should be required to request a password reset.
68
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
69
+
70
+ // Returns Ok regardless of if user exists.
71
+ var noUserResult = _userController . ResetPasswordRequest ( new ( ) ) . Result ;
72
+ Assert . That ( noUserResult , Is . TypeOf < OkResult > ( ) ) ;
73
+ var username = ( _userRepo . Create ( new ( ) { Username = "Imarealboy" } ) . Result ) ! . Username ;
74
+ var yesUserResult = _userController . ResetPasswordRequest ( new ( ) { EmailOrUsername = username } ) . Result ;
75
+ Assert . That ( yesUserResult , Is . TypeOf < OkResult > ( ) ) ;
76
+ }
77
+
78
+ [ Test ]
79
+ public void TestValidateResetToken ( )
80
+ {
81
+ // No permissions should be required to validate a password reset token.
82
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
83
+
84
+ ( ( PasswordResetServiceMock ) _passwordResetService ) . SetNextBoolResponse ( false ) ;
85
+ var falseResult = _userController . ValidateResetToken ( "token" ) . Result ;
86
+ Assert . That ( falseResult , Is . TypeOf < OkObjectResult > ( ) ) ;
87
+ Assert . That ( ( ( OkObjectResult ) falseResult ) . Value , Is . EqualTo ( false ) ) ;
88
+
89
+ ( ( PasswordResetServiceMock ) _passwordResetService ) . SetNextBoolResponse ( true ) ;
90
+ var trueResult = _userController . ValidateResetToken ( "token" ) . Result ;
91
+ Assert . That ( trueResult , Is . TypeOf < OkObjectResult > ( ) ) ;
92
+ Assert . That ( ( ( OkObjectResult ) trueResult ) . Value , Is . EqualTo ( true ) ) ;
93
+ }
94
+
95
+ [ Test ]
96
+ public void TestResetPassword ( )
97
+ {
98
+ // No permissions should be required to reset password via a token.
99
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
100
+
101
+ ( ( PasswordResetServiceMock ) _passwordResetService ) . SetNextBoolResponse ( false ) ;
102
+ var falseResult = _userController . ResetPassword ( new ( ) ) . Result ;
103
+ Assert . That ( falseResult , Is . TypeOf < ForbidResult > ( ) ) ;
104
+
105
+ ( ( PasswordResetServiceMock ) _passwordResetService ) . SetNextBoolResponse ( true ) ;
106
+ var trueResult = _userController . ResetPassword ( new ( ) ) . Result ;
107
+ Assert . That ( trueResult , Is . TypeOf < OkResult > ( ) ) ;
108
+ }
109
+
52
110
[ Test ]
53
111
public void TestGetAllUsers ( )
54
112
{
@@ -62,6 +120,37 @@ public void TestGetAllUsers()
62
120
user => Assert . That ( users , Does . Contain ( user ) . UsingPropertiesComparer ( ) ) ) ;
63
121
}
64
122
123
+ [ Test ]
124
+ public void TestGetAllUsersNoPermission ( )
125
+ {
126
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
127
+ var result = _userController . GetAllUsers ( ) . Result ;
128
+ Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
129
+ }
130
+
131
+ [ Test ]
132
+ public void TestAuthenticateBadCredentials ( )
133
+ {
134
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
135
+ var result = _userController . Authenticate ( new ( ) { EmailOrUsername = "no" , Password = "no" } ) . Result ;
136
+ Assert . That ( result , Is . InstanceOf < UnauthorizedObjectResult > ( ) ) ;
137
+ }
138
+
139
+ [ Test ]
140
+ public void TestGetCurrentUserNoneAuthenticated ( )
141
+ {
142
+ var result = _userController . GetCurrentUser ( ) . Result ;
143
+ Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
144
+ }
145
+
146
+ [ Test ]
147
+ public void TestGetUserNoPermission ( )
148
+ {
149
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
150
+ var result = _userController . GetUser ( "any-user" ) . Result ;
151
+ Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
152
+ }
153
+
65
154
[ Test ]
66
155
public void TestGetUser ( )
67
156
{
@@ -72,14 +161,14 @@ public void TestGetUser()
72
161
73
162
var result = _userController . GetUser ( user . Id ) . Result ;
74
163
Assert . That ( result , Is . InstanceOf < ObjectResult > ( ) ) ;
75
- Assert . That ( ( ( ObjectResult ) result ) . Value , Is . EqualTo ( user ) . UsingPropertiesComparer ( ) ) ;
164
+ Assert . That ( ( ( ObjectResult ) result ) . Value , Is . EqualTo ( new UserStub ( user ) ) . UsingPropertiesComparer ( ) ) ;
76
165
}
77
166
78
167
[ Test ]
79
168
public void TestGetMissingUser ( )
80
169
{
81
170
var result = _userController . GetUser ( "INVALID_USER_ID" ) . Result ;
82
- Assert . That ( result , Is . InstanceOf < NotFoundObjectResult > ( ) ) ;
171
+ Assert . That ( result , Is . InstanceOf < NotFoundResult > ( ) ) ;
83
172
}
84
173
85
174
[ Test ]
@@ -120,7 +209,7 @@ public void TestGetUserIdByEmailOrUsernameNoPermission()
120
209
{
121
210
_userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
122
211
const string email = "[email protected] " ;
123
- var _ = _userRepo . Create (
212
+ _ = _userRepo . Create (
124
213
new User { Email = email , Username = Util . RandString ( 10 ) , Password = Util . RandString ( 10 ) }
125
214
) . Result ?? throw new UserCreationException ( ) ;
126
215
@@ -142,30 +231,29 @@ public void TestCreateUserBadUsername()
142
231
{
143
232
var user = RandomUser ( ) ;
144
233
_userRepo . Create ( user ) ;
234
+
145
235
var user2 = RandomUser ( ) ;
146
236
user2 . Username = " " ;
147
- var result = _userController . CreateUser ( user ) . Result ;
148
- Assert . That ( result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
237
+ Assert . That ( _userController . CreateUser ( user2 ) . Result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
149
238
user2 . Username = user . Username ;
150
- result = _userController . CreateUser ( user ) . Result ;
151
- Assert . That ( result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
239
+ Assert . That ( _userController . CreateUser ( user2 ) . Result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
152
240
user2 . Username = user . Email ;
153
- result = _userController . CreateUser ( user ) . Result ;
154
- Assert . That ( result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
241
+ Assert . That ( _userController . CreateUser ( user2 ) . Result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
155
242
}
156
243
157
244
[ Test ]
158
245
public void TestCreateUserBadEmail ( )
159
246
{
160
247
var user = RandomUser ( ) ;
161
248
_userRepo . Create ( user ) ;
249
+
162
250
var user2 = RandomUser ( ) ;
163
251
user2 . Email = " " ;
164
- var result = _userController . CreateUser ( user ) . Result ;
165
- Assert . That ( result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
252
+ Assert . That ( _userController . CreateUser ( user2 ) . Result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
166
253
user2 . Email = user . Email ;
167
- result = _userController . CreateUser ( user ) . Result ;
168
- Assert . That ( result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
254
+ Assert . That ( _userController . CreateUser ( user2 ) . Result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
255
+ user2 . Email = user . Username ;
256
+ Assert . That ( _userController . CreateUser ( user2 ) . Result , Is . TypeOf < BadRequestObjectResult > ( ) ) ;
169
257
}
170
258
171
259
[ Test ]
@@ -196,6 +284,14 @@ public void TestUpdateUserCantUpdateIsAdmin()
196
284
Assert . That ( users , Does . Contain ( modUser ) . UsingPropertiesComparer ( ) ) ;
197
285
}
198
286
287
+ [ Test ]
288
+ public void TestUpdateUserNoPermission ( )
289
+ {
290
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
291
+ var result = _userController . UpdateUser ( "any-user" , new ( ) ) . Result ;
292
+ Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
293
+ }
294
+
199
295
[ Test ]
200
296
public void TestDeleteUser ( )
201
297
{
@@ -206,6 +302,21 @@ public void TestDeleteUser()
206
302
Assert . That ( _userRepo . GetAllUsers ( ) . Result , Is . Empty ) ;
207
303
}
208
304
305
+ [ Test ]
306
+ public void TestDeleteUserNoUser ( )
307
+ {
308
+ var result = _userController . DeleteUser ( "not-a-user" ) . Result ;
309
+ Assert . That ( result , Is . InstanceOf < NotFoundResult > ( ) ) ;
310
+ }
311
+
312
+ [ Test ]
313
+ public void TestDeleteUserNoPermission ( )
314
+ {
315
+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
316
+ var result = _userController . DeleteUser ( "anything" ) . Result ;
317
+ Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
318
+ }
319
+
209
320
[ Test ]
210
321
public void TestIsEmailOrUsernameAvailable ( )
211
322
{
@@ -233,7 +344,7 @@ public void TestIsEmailOrUsernameAvailable()
233
344
}
234
345
235
346
[ Test ]
236
- public void TestIsUserSiteAdminNotAuthorized ( )
347
+ public void TestIsUserSiteAdminNoPermission ( )
237
348
{
238
349
_userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
239
350
var result = _userController . IsUserSiteAdmin ( ) . Result ;
0 commit comments