using Bit.Api.Controllers; using Bit.Api.SecretManagerFeatures.Models.Request; using Bit.Core.Entities; using Bit.Core.Repositories; using Bit.Core.SecretManagerFeatures.AccessTokens.Interfaces; using Bit.Core.SecretManagerFeatures.ServiceAccounts.Interfaces; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using Bit.Test.Common.Helpers; using NSubstitute; using Xunit; namespace Bit.Api.Test.Controllers; [ControllerCustomize(typeof(ServiceAccountsController))] [SutProviderCustomize] [JsonDocumentCustomize] public class ServiceAccountsControllerTests { [Theory] [BitAutoData] public async void GetServiceAccountsByOrganization_ReturnsEmptyList(SutProvider sutProvider, Guid id) { var result = await sutProvider.Sut.GetServiceAccountsByOrganizationAsync(id); await sutProvider.GetDependency().Received(1) .GetManyByOrganizationIdAsync(Arg.Is(AssertHelper.AssertPropertyEqual(id))); Assert.Empty(result.Data); } [Theory] [BitAutoData] public async void GetServiceAccountsByOrganization_Success(SutProvider sutProvider, ServiceAccount resultServiceAccount) { sutProvider.GetDependency().GetManyByOrganizationIdAsync(default).ReturnsForAnyArgs(new List() { resultServiceAccount }); var result = await sutProvider.Sut.GetServiceAccountsByOrganizationAsync(resultServiceAccount.OrganizationId); await sutProvider.GetDependency().Received(1) .GetManyByOrganizationIdAsync(Arg.Is(AssertHelper.AssertPropertyEqual(resultServiceAccount.OrganizationId))); } [Theory] [BitAutoData] public async void CreateServiceAccount_Success(SutProvider sutProvider, ServiceAccountCreateRequestModel data, Guid organizationId) { var resultServiceAccount = data.ToServiceAccount(organizationId); sutProvider.GetDependency().CreateAsync(default).ReturnsForAnyArgs(resultServiceAccount); var result = await sutProvider.Sut.CreateServiceAccountAsync(organizationId, data); await sutProvider.GetDependency().Received(1) .CreateAsync(Arg.Any()); } [Theory] [BitAutoData] public async void UpdateServiceAccount_Success(SutProvider sutProvider, ServiceAccountUpdateRequestModel data, Guid serviceAccountId) { var resultServiceAccount = data.ToServiceAccount(serviceAccountId); sutProvider.GetDependency().UpdateAsync(default).ReturnsForAnyArgs(resultServiceAccount); var result = await sutProvider.Sut.UpdateServiceAccountAsync(serviceAccountId, data); await sutProvider.GetDependency().Received(1) .UpdateAsync(Arg.Any()); } [Theory] [BitAutoData] public async void CreateAccessToken_Success(SutProvider sutProvider, AccessTokenCreateRequestModel data, Guid serviceAccountId) { var resultAccessToken = data.ToApiKey(serviceAccountId); sutProvider.GetDependency().CreateAsync(default).ReturnsForAnyArgs(resultAccessToken); var result = await sutProvider.Sut.CreateAccessTokenAsync(serviceAccountId, data); await sutProvider.GetDependency().Received(1) .CreateAsync(Arg.Any()); } }