@@ -11,7 +11,10 @@ namespace Backend.Tests.Controllers
1111{
1212 internal sealed class UserControllerTests : IDisposable
1313 {
14+ private IProjectRepository _projectRepo = null ! ;
1415 private IUserRepository _userRepo = null ! ;
16+ private IUserEditRepository _userEditRepo = null ! ;
17+ private IUserRoleRepository _userRoleRepo = null ! ;
1518 private UserController _userController = null ! ;
1619
1720 public void Dispose ( )
@@ -23,9 +26,12 @@ public void Dispose()
2326 [ SetUp ]
2427 public void Setup ( )
2528 {
29+ _projectRepo = new ProjectRepositoryMock ( ) ;
2630 _userRepo = new UserRepositoryMock ( ) ;
27- _userController = new UserController (
28- _userRepo , new CaptchaServiceMock ( ) , new PermissionServiceMock ( _userRepo ) ) ;
31+ _userEditRepo = new UserEditRepositoryMock ( ) ;
32+ _userRoleRepo = new UserRoleRepositoryMock ( ) ;
33+ _userController = new UserController ( _projectRepo , _userRepo , _userEditRepo , _userRoleRepo ,
34+ new CaptchaServiceMock ( ) , new PermissionServiceMock ( _userRepo ) ) ;
2935 }
3036
3137 private static User RandomUser ( )
@@ -171,8 +177,7 @@ public void TestCreateUser()
171177 [ Test ]
172178 public void TestCreateUserBadUsername ( )
173179 {
174- var user = RandomUser ( ) ;
175- _userRepo . Create ( user ) ;
180+ var user = _userRepo . Create ( RandomUser ( ) ) . Result ?? throw new UserCreationException ( ) ;
176181
177182 var user2 = RandomUser ( ) ;
178183 user2 . Username = " " ;
@@ -186,8 +191,7 @@ public void TestCreateUserBadUsername()
186191 [ Test ]
187192 public void TestCreateUserBadEmail ( )
188193 {
189- var user = RandomUser ( ) ;
190- _userRepo . Create ( user ) ;
194+ var user = _userRepo . Create ( RandomUser ( ) ) . Result ?? throw new UserCreationException ( ) ;
191195
192196 var user2 = RandomUser ( ) ;
193197 user2 . Email = " " ;
@@ -259,15 +263,109 @@ public void TestDeleteUserNoPermission()
259263 Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
260264 }
261265
266+ [ Test ]
267+ public void TestDeleteUserWithRolesAndEdits ( )
268+ {
269+ // Create a user, project, user role, and user edit
270+ var user = _userRepo . Create ( RandomUser ( ) ) . Result ?? throw new UserCreationException ( ) ;
271+ var project = _projectRepo . Create ( new ( ) { Name = "Test Project" } ) . Result
272+ ?? throw new ProjectCreationException ( ) ;
273+ var userRole = _userRoleRepo . Create ( new ( ) { ProjectId = project . Id , Role = Role . Editor } ) . Result
274+ ?? throw new UserRoleCreationException ( ) ;
275+ var userEdit = _userEditRepo . Create ( new ( ) { ProjectId = project . Id } ) . Result
276+ ?? throw new UserEditCreationException ( ) ;
277+
278+ // Add role and edit to user
279+ user . ProjectRoles [ project . Id ] = userRole . Id ;
280+ user . WorkedProjects [ project . Id ] = userEdit . Id ;
281+ _ = _userRepo . Update ( user . Id , user ) . Result ;
282+
283+ // Verify they exist
284+ Assert . That ( _userRoleRepo . GetUserRole ( project . Id , userRole . Id ) . Result , Is . Not . Null ) ;
285+ Assert . That ( _userEditRepo . GetUserEdit ( project . Id , userEdit . Id ) . Result , Is . Not . Null ) ;
286+
287+ // Delete the user
288+ _ = _userController . DeleteUser ( user . Id ) . Result ;
289+
290+ // Verify user is deleted
291+ Assert . That ( _userRepo . GetAllUsers ( ) . Result , Is . Empty ) ;
292+
293+ // Verify user role and edit are deleted
294+ Assert . That ( _userRoleRepo . GetUserRole ( project . Id , userRole . Id ) . Result , Is . Null ) ;
295+ Assert . That ( _userEditRepo . GetUserEdit ( project . Id , userEdit . Id ) . Result , Is . Null ) ;
296+ }
297+
298+ [ Test ]
299+ public void TestDeleteAdminUser ( )
300+ {
301+ // Create an admin user
302+ var user = _userRepo . Create ( RandomUser ( ) ) . Result ?? throw new UserCreationException ( ) ;
303+ user . IsAdmin = true ;
304+ _ = _userRepo . Update ( user . Id , user , updateIsAdmin : true ) . Result ;
305+
306+ // Try to delete admin user
307+ var result = _userController . DeleteUser ( user . Id ) . Result ;
308+
309+ // Should be forbidden
310+ Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
311+
312+ // Verify user is not deleted
313+ Assert . That ( _userRepo . GetAllUsers ( ) . Result , Has . Count . EqualTo ( 1 ) ) ;
314+ }
315+
316+ [ Test ]
317+ public void TestGetUserProjects ( )
318+ {
319+ // Create a user and two projects
320+ var user = _userRepo . Create ( RandomUser ( ) ) . Result ?? throw new UserCreationException ( ) ;
321+ var project1 = _projectRepo . Create ( new ( ) { IsActive = false , Name = "Test Project 1" } ) . Result
322+ ?? throw new ProjectCreationException ( ) ;
323+ var project2 = _projectRepo . Create ( new ( ) { IsActive = true , Name = "Test Project 2" } ) . Result
324+ ?? throw new ProjectCreationException ( ) ;
325+
326+ // Create user roles for both projects
327+ var userRole1 = _userRoleRepo . Create ( new ( ) { ProjectId = project1 . Id , Role = Role . Editor } ) . Result
328+ ?? throw new UserRoleCreationException ( ) ;
329+ var userRole2 = _userRoleRepo . Create ( new ( ) { ProjectId = project2 . Id , Role = Role . Administrator } ) . Result
330+ ?? throw new UserRoleCreationException ( ) ;
331+
332+ // Add roles to user
333+ user . ProjectRoles [ project1 . Id ] = userRole1 . Id ;
334+ user . ProjectRoles [ project2 . Id ] = userRole2 . Id ;
335+ _ = _userRepo . Update ( user . Id , user ) . Result ;
336+
337+ // Get user projects
338+ var result = ( ObjectResult ) _userController . GetUserProjects ( user . Id ) . Result ;
339+ var projects = result . Value as List < UserProjectInfo > ;
340+
341+ // Verify both projects are returned with correct roles
342+ Assert . That ( projects , Has . Count . EqualTo ( 2 ) ) ;
343+ Assert . That ( projects ! . Exists ( p => p . ProjectId == project1 . Id && p . ProjectIsActive == project1 . IsActive
344+ && p . ProjectName == project1 . Name && p . Role == userRole1 . Role ) ) ;
345+ Assert . That ( projects . Exists ( p => p . ProjectId == project2 . Id && p . ProjectIsActive == project2 . IsActive
346+ && p . ProjectName == project2 . Name && p . Role == userRole2 . Role ) ) ;
347+ }
348+
349+ [ Test ]
350+ public void TestGetUserProjectsNoPermission ( )
351+ {
352+ _userController . ControllerContext . HttpContext = PermissionServiceMock . UnauthorizedHttpContext ( ) ;
353+ var result = _userController . GetUserProjects ( "anything" ) . Result ;
354+ Assert . That ( result , Is . InstanceOf < ForbidResult > ( ) ) ;
355+ }
356+
357+ [ Test ]
358+ public void TestGetUserProjectsNoUser ( )
359+ {
360+ var result = _userController . GetUserProjects ( "not-a-user" ) . Result ;
361+ Assert . That ( result , Is . InstanceOf < NotFoundResult > ( ) ) ;
362+ }
363+
262364 [ Test ]
263365 public void TestIsEmailOrUsernameAvailable ( )
264366 {
265- var user1 = RandomUser ( ) ;
266- var user2 = RandomUser ( ) ;
267- var email1 = user1 . Email ;
268- var email2 = user2 . Email ;
269- _userRepo . Create ( user1 ) ;
270- _userRepo . Create ( user2 ) ;
367+ var email1 = _userRepo . Create ( RandomUser ( ) ) . Result ? . Email ?? throw new UserCreationException ( ) ;
368+ var email2 = _userRepo . Create ( RandomUser ( ) ) . Result ? . Email ?? throw new UserCreationException ( ) ;
271369
272370 var result1 = ( ObjectResult ) _userController . IsEmailOrUsernameAvailable ( email1 . ToLowerInvariant ( ) ) . Result ;
273371 Assert . That ( result1 . Value , Is . False ) ;
0 commit comments