mirror of
https://github.com/bitwarden/server.git
synced 2025-07-02 08:32:50 -05:00
[SM-1211] Adding API endpoint to send out Access Request for SM to Admins, addi… (#4155)
* Adding API endpoint to send out Access Request for SM to Admins, adding email template * Fixing email template HTML, adding tests * fixing tests * fixing lint * Moving files to proper locations * fixing build error relating to not removing some old code * Updating namespaces and removing unused using statements * Dependency injection fix * Fixing tests and moving them to proper files * lint * format fixes * dotnet format fix * small fixes * removing using directive's that aren't needed * Update bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/PasswordManager/RequestSMAccessCommandTests.cs Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> * Update src/Core/MailTemplates/Handlebars/SecretsManagerAccessRequest.text.hbs Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> * Update bitwarden_license/src/Commercial.Core/SecretsManager/Commands/PasswordManager/RequestSMAccessCommand.cs Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> * Changes requested by Thomas * Lint fixes * Suggested changes from Maceij * Current state of tests * Fixing tests and getting the core.csproj file from main * Reverting csproj file change * Removing usings directory * dotnet format * Fixing test * Update bitwarden_license/test/Commercial.Core.Test/SecretsManager/Commands/Requests/RequestSMAccessCommandTests.cs Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> * Update test/Api.Test/SecretsManager/Controllers/RequestSMAccessControllerTests.cs Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> * Thomas requested changes * Fixing 500 error when user name is null * Prettier error message if user sends over an whitespace string * Fixing word wrapping issue in email contents --------- Co-authored-by: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com>
This commit is contained in:
@ -0,0 +1,96 @@
|
||||
using Bit.Commercial.Core.SecretsManager.Commands.Requests;
|
||||
using Bit.Core.AdminConsole.Entities;
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Enums;
|
||||
using Bit.Core.Exceptions;
|
||||
using Bit.Core.Models.Data.Organizations.OrganizationUsers;
|
||||
using Bit.Core.Services;
|
||||
using Bit.Test.Common.AutoFixture;
|
||||
using Bit.Test.Common.AutoFixture.Attributes;
|
||||
using Bit.Test.Common.Helpers;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Bit.Commercial.Core.Test.SecretsManager.Commands.Requests;
|
||||
|
||||
[SutProviderCustomize]
|
||||
public class RequestSMAccessCommandTests
|
||||
{
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task SendRequestAccessToSM_Success(
|
||||
User user,
|
||||
Organization organization,
|
||||
ICollection<OrganizationUserUserDetails> orgUsers,
|
||||
string emailContent,
|
||||
SutProvider<RequestSMAccessCommand> sutProvider)
|
||||
{
|
||||
foreach (var userDetails in orgUsers)
|
||||
{
|
||||
userDetails.Type = OrganizationUserType.Admin;
|
||||
}
|
||||
|
||||
orgUsers.First().Type = OrganizationUserType.Owner;
|
||||
|
||||
await sutProvider.Sut.SendRequestAccessToSM(organization, orgUsers, user, emailContent);
|
||||
|
||||
var adminEmailList = orgUsers
|
||||
.Where(o => o.Type <= OrganizationUserType.Admin)
|
||||
.Select(a => a.Email)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
await sutProvider.GetDependency<IMailService>()
|
||||
.Received(1)
|
||||
.SendRequestSMAccessToAdminEmailAsync(Arg.Is(AssertHelper.AssertPropertyEqual(adminEmailList)), Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>());
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task SendRequestAccessToSM_NoAdmins_ThrowsBadRequestException(
|
||||
User user,
|
||||
Organization organization,
|
||||
ICollection<OrganizationUserUserDetails> orgUsers,
|
||||
string emailContent,
|
||||
SutProvider<RequestSMAccessCommand> sutProvider)
|
||||
{
|
||||
// Set OrgUsers so they are only users, no admins or owners
|
||||
foreach (OrganizationUserUserDetails userDetails in orgUsers)
|
||||
{
|
||||
userDetails.Type = OrganizationUserType.User;
|
||||
}
|
||||
|
||||
await Assert.ThrowsAsync<BadRequestException>(() => sutProvider.Sut.SendRequestAccessToSM(organization, orgUsers, user, emailContent));
|
||||
}
|
||||
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task SendRequestAccessToSM_SomeAdmins_EmailListIsAsExpected(
|
||||
User user,
|
||||
Organization organization,
|
||||
ICollection<OrganizationUserUserDetails> orgUsers,
|
||||
string emailContent,
|
||||
SutProvider<RequestSMAccessCommand> sutProvider)
|
||||
{
|
||||
foreach (OrganizationUserUserDetails userDetails in orgUsers)
|
||||
{
|
||||
userDetails.Type = OrganizationUserType.User;
|
||||
}
|
||||
|
||||
// Make the first orgUser an admin so it's a mix of Admin + Users
|
||||
orgUsers.First().Type = OrganizationUserType.Admin;
|
||||
|
||||
var adminEmailList = orgUsers
|
||||
.Where(o => o.Type == OrganizationUserType.Admin) // Filter by Admin type
|
||||
.Select(a => a.Email)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
await sutProvider.Sut.SendRequestAccessToSM(organization, orgUsers, user, emailContent);
|
||||
|
||||
await sutProvider.GetDependency<IMailService>()
|
||||
.Received(1)
|
||||
.SendRequestSMAccessToAdminEmailAsync(Arg.Is(AssertHelper.AssertPropertyEqual(adminEmailList)), Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user