diff --git a/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs b/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs index ecea7caa96..6d2dd61aa1 100644 --- a/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs +++ b/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs @@ -227,7 +227,7 @@ public class OrganizationUsersController : BaseAdminConsoleController public async Task GetResetPasswordDetails(Guid orgId, Guid id) { var organizationUser = await _organizationUserRepository.GetByIdAsync(id); - if (organizationUser is null || organizationUser.UserId is null) + if (organizationUser is null || organizationUser.OrganizationId != orgId || organizationUser.UserId is null) { throw new NotFoundException(); } diff --git a/test/Api.Test/AdminConsole/Controllers/OrganizationUsersControllerTests.cs b/test/Api.Test/AdminConsole/Controllers/OrganizationUsersControllerTests.cs index f9b50e736d..2d39ee8b82 100644 --- a/test/Api.Test/AdminConsole/Controllers/OrganizationUsersControllerTests.cs +++ b/test/Api.Test/AdminConsole/Controllers/OrganizationUsersControllerTests.cs @@ -340,6 +340,72 @@ public class OrganizationUsersControllerTests ou.EncryptedPrivateKey == r.EncryptedPrivateKey))); } + [Theory] + [BitAutoData] + public async Task GetResetPasswordDetails_WhenOrganizationUserNotFound_ThrowsNotFound( + Guid orgId, Guid orgUserId, + SutProvider sutProvider) + { + // Arrange + sutProvider.GetDependency().GetByIdAsync(orgUserId).Returns((OrganizationUser)null); + + // Act & Assert + await Assert.ThrowsAsync(() => sutProvider.Sut.GetResetPasswordDetails(orgId, orgUserId)); + } + + [Theory] + [BitAutoData] + public async Task GetResetPasswordDetails_WhenOrganizationIdMismatch_ThrowsNotFound( + Guid orgId, Guid orgUserId, OrganizationUser organizationUser, + SutProvider sutProvider) + { + // Arrange + organizationUser.OrganizationId = Guid.NewGuid(); // Different org ID + organizationUser.UserId = Guid.NewGuid(); + sutProvider.GetDependency().GetByIdAsync(orgUserId).Returns(organizationUser); + + // Act & Assert + await Assert.ThrowsAsync(() => sutProvider.Sut.GetResetPasswordDetails(orgId, orgUserId)); + } + + [Theory] + [BitAutoData] + public async Task GetResetPasswordDetails_WhenUserIdIsNull_ThrowsNotFound( + Guid orgId, Guid orgUserId, OrganizationUser organizationUser, + SutProvider sutProvider) + { + // Arrange + organizationUser.OrganizationId = orgId; + organizationUser.UserId = null; + sutProvider.GetDependency().GetByIdAsync(orgUserId).Returns(organizationUser); + + // Act & Assert + await Assert.ThrowsAsync(() => sutProvider.Sut.GetResetPasswordDetails(orgId, orgUserId)); + } + + [Theory] + [BitAutoData] + public async Task GetResetPasswordDetails_WhenValid_ReturnsDetails( + Guid orgId, Guid orgUserId, OrganizationUser organizationUser, User user, Organization org, + SutProvider sutProvider) + { + // Arrange + organizationUser.OrganizationId = orgId; + organizationUser.UserId = user.Id; + sutProvider.GetDependency().GetByIdAsync(orgUserId).Returns(organizationUser); + sutProvider.GetDependency().GetUserByIdAsync(user.Id).Returns(user); + sutProvider.GetDependency().GetByIdAsync(orgId).Returns(org); + + // Act + var response = await sutProvider.Sut.GetResetPasswordDetails(orgId, orgUserId); + + // Assert + Assert.Equal(organizationUser.Id, response.OrganizationUserId); + Assert.Equal(user.Kdf, response.Kdf); + Assert.Equal(user.KdfIterations, response.KdfIterations); + Assert.Equal(org.PrivateKey, response.EncryptedPrivateKey); + } + [Theory] [BitAutoData] public async Task DeleteAccount_WhenCurrentUserNotFound_ReturnsUnauthorizedResult(