Prevent duplicate profile pins

This commit is contained in:
sudokoko 2024-04-05 09:54:03 -04:00
parent 931f079265
commit 67d0d3d7b1
No known key found for this signature in database
GPG key ID: 248D68C664937395
2 changed files with 26 additions and 1 deletions

View file

@ -180,7 +180,7 @@ public class UserController : ControllerBase
// Sometimes the update gets called periodically as pin progress updates via playing,
// may not affect equipped profile pins however, so check before setting it.
string currentPins = user.Pins;
string newPins = string.Join(",", pinJson.ProfilePins);
string newPins = string.Join(",", pinJson.ProfilePins.Distinct());
if (string.Equals(currentPins, newPins)) return this.Ok("[{\"StatusCode\":200}]");

View file

@ -177,4 +177,29 @@ public class UserControllerTests
Assert.Equal(expectedPins, dbMock.Users.First().Pins);
Assert.Equal(expectedResponse, pinsResponse);
}
[Fact]
public async Task UpdateMyPins_ShouldRemove_DuplicatePins()
{
UserEntity entity = MockHelper.GetUnitTestUser();
entity.Pins = "1234";
List<UserEntity> users = new()
{
entity,
};
await using DatabaseContext dbMock = await MockHelper.GetTestDatabase(users);
UserController userController = new(dbMock);
userController.SetupTestController("{\"profile_pins\": [1234, 1234]}");
const string expectedPins = "1234";
const string expectedResponse = "[{\"StatusCode\":200}]";
IActionResult result = await userController.UpdateMyPins();
string pinsResponse = result.CastTo<OkObjectResult, string>();
Assert.Equal(expectedPins, dbMock.Users.First().Pins);
Assert.Equal(expectedResponse, pinsResponse);
}
}