using Bit.Api.Billing.Controllers; using Bit.Api.Billing.Models; using Bit.Core; using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Repositories; using Bit.Core.Billing.Commands; using Bit.Core.Context; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using Microsoft.AspNetCore.Http.HttpResults; using NSubstitute; using NSubstitute.ReturnsExtensions; using Xunit; using ProviderOrganization = Bit.Core.AdminConsole.Entities.Provider.ProviderOrganization; namespace Bit.Api.Test.Billing.Controllers; [ControllerCustomize(typeof(ProviderOrganizationController))] [SutProviderCustomize] public class ProviderOrganizationControllerTests { [Theory, BitAutoData] public async Task UpdateAsync_FFDisabled_NotFound( Guid providerId, Guid providerOrganizationId, UpdateProviderOrganizationRequestBody requestBody, SutProvider sutProvider) { sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.EnableConsolidatedBilling) .Returns(false); var result = await sutProvider.Sut.UpdateAsync(providerId, providerOrganizationId, requestBody); Assert.IsType(result); } [Theory, BitAutoData] public async Task GetSubscriptionAsync_NotProviderAdmin_Unauthorized( Guid providerId, Guid providerOrganizationId, UpdateProviderOrganizationRequestBody requestBody, SutProvider sutProvider) { sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.EnableConsolidatedBilling) .Returns(true); sutProvider.GetDependency().ProviderProviderAdmin(providerId) .Returns(false); var result = await sutProvider.Sut.UpdateAsync(providerId, providerOrganizationId, requestBody); Assert.IsType(result); } [Theory, BitAutoData] public async Task GetSubscriptionAsync_NoProvider_NotFound( Guid providerId, Guid providerOrganizationId, UpdateProviderOrganizationRequestBody requestBody, SutProvider sutProvider) { sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.EnableConsolidatedBilling) .Returns(true); sutProvider.GetDependency().ProviderProviderAdmin(providerId) .Returns(true); sutProvider.GetDependency().GetByIdAsync(providerId) .ReturnsNull(); var result = await sutProvider.Sut.UpdateAsync(providerId, providerOrganizationId, requestBody); Assert.IsType(result); } [Theory, BitAutoData] public async Task GetSubscriptionAsync_NoProviderOrganization_NotFound( Guid providerId, Guid providerOrganizationId, UpdateProviderOrganizationRequestBody requestBody, Provider provider, SutProvider sutProvider) { sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.EnableConsolidatedBilling) .Returns(true); sutProvider.GetDependency().ProviderProviderAdmin(providerId) .Returns(true); sutProvider.GetDependency().GetByIdAsync(providerId) .Returns(provider); sutProvider.GetDependency().GetByIdAsync(providerOrganizationId) .ReturnsNull(); var result = await sutProvider.Sut.UpdateAsync(providerId, providerOrganizationId, requestBody); Assert.IsType(result); } [Theory, BitAutoData] public async Task GetSubscriptionAsync_NoOrganization_ServerError( Guid providerId, Guid providerOrganizationId, UpdateProviderOrganizationRequestBody requestBody, Provider provider, ProviderOrganization providerOrganization, SutProvider sutProvider) { sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.EnableConsolidatedBilling) .Returns(true); sutProvider.GetDependency().ProviderProviderAdmin(providerId) .Returns(true); sutProvider.GetDependency().GetByIdAsync(providerId) .Returns(provider); sutProvider.GetDependency().GetByIdAsync(providerOrganizationId) .Returns(providerOrganization); sutProvider.GetDependency().GetByIdAsync(providerOrganization.OrganizationId) .ReturnsNull(); var result = await sutProvider.Sut.UpdateAsync(providerId, providerOrganizationId, requestBody); Assert.IsType(result); } [Theory, BitAutoData] public async Task GetSubscriptionAsync_NoContent( Guid providerId, Guid providerOrganizationId, UpdateProviderOrganizationRequestBody requestBody, Provider provider, ProviderOrganization providerOrganization, Organization organization, SutProvider sutProvider) { sutProvider.GetDependency().IsEnabled(FeatureFlagKeys.EnableConsolidatedBilling) .Returns(true); sutProvider.GetDependency().ProviderProviderAdmin(providerId) .Returns(true); sutProvider.GetDependency().GetByIdAsync(providerId) .Returns(provider); sutProvider.GetDependency().GetByIdAsync(providerOrganizationId) .Returns(providerOrganization); sutProvider.GetDependency().GetByIdAsync(providerOrganization.OrganizationId) .Returns(organization); var result = await sutProvider.Sut.UpdateAsync(providerId, providerOrganizationId, requestBody); await sutProvider.GetDependency().Received(1) .AssignSeatsToClientOrganization( provider, organization, requestBody.AssignedSeats); Assert.IsType(result); } }