using Bit.Api.Billing.Controllers; using Bit.Core.AdminConsole.Entities; using Bit.Core.Billing.Models; using Bit.Core.Billing.Services; using Bit.Core.Context; using Bit.Core.Repositories; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using Microsoft.AspNetCore.Http.HttpResults; using NSubstitute; using Xunit; using static Bit.Api.Test.Billing.Utilities; namespace Bit.Api.Test.Billing.Controllers; [ControllerCustomize(typeof(OrganizationBillingController))] [SutProviderCustomize] public class OrganizationBillingControllerTests { [Theory, BitAutoData] public async Task GetHistoryAsync_Unauthorized_ReturnsUnauthorized( Guid organizationId, SutProvider sutProvider) { sutProvider.GetDependency().ViewBillingHistory(organizationId).Returns(false); var result = await sutProvider.Sut.GetHistoryAsync(organizationId); AssertUnauthorized(result); } [Theory, BitAutoData] public async Task GetHistoryAsync_OrganizationNotFound_ReturnsNotFound( Guid organizationId, SutProvider sutProvider) { sutProvider.GetDependency().ViewBillingHistory(organizationId).Returns(true); sutProvider.GetDependency().GetByIdAsync(organizationId).Returns((Organization)null); var result = await sutProvider.Sut.GetHistoryAsync(organizationId); AssertNotFound(result); } [Theory] [BitAutoData] public async Task GetHistoryAsync_OK( Guid organizationId, Organization organization, SutProvider sutProvider) { // Arrange sutProvider.GetDependency().ViewBillingHistory(organizationId).Returns(true); sutProvider.GetDependency().GetByIdAsync(organizationId).Returns(organization); // Manually create a BillingHistoryInfo object to avoid requiring AutoFixture to create HttpResponseHeaders var billingInfo = new BillingHistoryInfo(); sutProvider.GetDependency().GetBillingHistoryAsync(organization).Returns(billingInfo); // Act var result = await sutProvider.Sut.GetHistoryAsync(organizationId); // Assert var okResult = Assert.IsType>(result); Assert.Equal(billingInfo, okResult.Value); } }