@@ -268,6 +268,102 @@ public void CannotRenameToTakenUsername()
268268 Assert . That ( updated ! . Username , Is . Not . EqualTo ( takenUsername ) ) ;
269269 }
270270
271+ [ Test ]
272+ public void CannotRenameToOtherUsersPreviousName ( )
273+ {
274+ using TestContext context = this . GetServer ( ) ;
275+
276+ GameUser mod = context . CreateUser ( null , GameUserRole . Moderator ) ;
277+ GameUser owner = context . CreateUser ( "original" , GameUserRole . User ) ;
278+ GameUser target = context . CreateUser ( "stinker" , GameUserRole . User ) ;
279+
280+ context . Database . RenameUser ( owner , "original_2" ) ;
281+ GameUser ? modifiedOwner = context . Database . GetUserByObjectId ( owner . UserId ) ;
282+ Assert . That ( modifiedOwner , Is . Not . Null ) ;
283+ Assert . That ( modifiedOwner ! . Username , Is . EqualTo ( "original_2" ) ) ;
284+
285+ HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , mod ) ;
286+ ApiAdminUpdateUserRequest request = new ( )
287+ {
288+ Username = "original"
289+ } ;
290+
291+ ApiResponse < ApiExtendedGameUserResponse > ? response = client . PatchData < ApiExtendedGameUserResponse > ( $ "/api/v3/admin/users/uuid/{ target . UserId } ", request , false , true ) ;
292+ Assert . That ( response ? . Error , Is . Not . Null ) ;
293+ Assert . That ( response ! . Error ! . StatusCode , Is . EqualTo ( BadRequest ) ) ;
294+
295+ context . Database . Refresh ( ) ;
296+
297+ GameUser ? modifiedTarget = context . Database . GetUserByObjectId ( target . UserId ) ;
298+ Assert . That ( modifiedTarget , Is . Not . Null ) ;
299+ Assert . That ( modifiedTarget ! . Username , Is . EqualTo ( "stinker" ) ) ;
300+ }
301+
302+ [ Test ]
303+ public void CanRenameUserBackToTheirPreviousName ( )
304+ {
305+ using TestContext context = this . GetServer ( ) ;
306+
307+ GameUser mod = context . CreateUser ( null , GameUserRole . Moderator ) ;
308+ GameUser owner = context . CreateUser ( "original" , GameUserRole . User ) ;
309+
310+ context . Database . RenameUser ( owner , "original_2" ) ;
311+ GameUser ? modifiedOwner = context . Database . GetUserByObjectId ( owner . UserId ) ;
312+ Assert . That ( modifiedOwner , Is . Not . Null ) ;
313+ Assert . That ( modifiedOwner ! . Username , Is . EqualTo ( "original_2" ) ) ;
314+
315+ HttpClient client = context . GetAuthenticatedClient ( TokenType . Api , mod ) ;
316+ ApiAdminUpdateUserRequest request = new ( )
317+ {
318+ Username = "original"
319+ } ;
320+
321+ ApiResponse < ApiExtendedGameUserResponse > ? response = client . PatchData < ApiExtendedGameUserResponse > ( $ "/api/v3/admin/users/uuid/{ owner . UserId } ", request ) ;
322+ Assert . That ( response ? . Data , Is . Not . Null ) ;
323+ Assert . That ( response ! . Data ! . Username == "original" ) ;
324+
325+ context . Database . Refresh ( ) ;
326+
327+ GameUser ? modifiedOwner2 = context . Database . GetUserByObjectId ( owner . UserId ) ;
328+ Assert . That ( modifiedOwner2 , Is . Not . Null ) ;
329+ Assert . That ( modifiedOwner2 ! . Username , Is . EqualTo ( "original" ) ) ;
330+ }
331+
332+ [ Test ]
333+ public void CanRenameUserBackAndForth ( )
334+ {
335+ using TestContext context = this . GetServer ( ) ;
336+
337+ GameUser mod = context . CreateUser ( null , GameUserRole . Moderator ) ;
338+ GameUser owner = context . CreateUser ( "original" , GameUserRole . User ) ;
339+
340+ context . Database . RenameUser ( owner , "original_2" ) ;
341+ GameUser ? modifiedOwner = context . Database . GetUserByObjectId ( owner . UserId ) ;
342+ Assert . That ( modifiedOwner , Is . Not . Null ) ;
343+ Assert . That ( modifiedOwner ! . Username , Is . EqualTo ( "original_2" ) ) ;
344+
345+ context . Time . TimestampMilliseconds += 1000 ;
346+
347+ context . Database . RenameUser ( owner , "original" ) ;
348+ modifiedOwner = context . Database . GetUserByObjectId ( owner . UserId ) ;
349+ Assert . That ( modifiedOwner , Is . Not . Null ) ;
350+ Assert . That ( modifiedOwner ! . Username , Is . EqualTo ( "original" ) ) ;
351+
352+ context . Time . TimestampMilliseconds += 1000 ;
353+
354+ context . Database . RenameUser ( owner , "original_2" ) ;
355+ modifiedOwner = context . Database . GetUserByObjectId ( owner . UserId ) ;
356+ Assert . That ( modifiedOwner , Is . Not . Null ) ;
357+ Assert . That ( modifiedOwner ! . Username , Is . EqualTo ( "original_2" ) ) ;
358+
359+ context . Time . TimestampMilliseconds += 1000 ;
360+
361+ context . Database . RenameUser ( owner , "original" ) ;
362+ modifiedOwner = context . Database . GetUserByObjectId ( owner . UserId ) ;
363+ Assert . That ( modifiedOwner , Is . Not . Null ) ;
364+ Assert . That ( modifiedOwner ! . Username , Is . EqualTo ( "original" ) ) ;
365+ }
366+
271367 [ Test ]
272368 [ TestCase ( "!jeff" , true ) ]
273369 [ TestCase ( "dddd" , true ) ]
0 commit comments