mirror of
https://github.com/bitwarden/server.git
synced 2024-11-29 13:25:17 +01:00
3c86ec6a35
* Refactor: Rename some methods and models for consistency This commit contains no logic changes at all. It's entirely comprised of renames of existing models and methods to bring our codebase more in line with our app's functionality and terminology. * Add feature flag: AC-2476-deprecate-stripe-sources-api * Standardize error responses from applicable billing controllers During my work on CB, I found that just using the built-in TypedResults errors results in the client choking on the response because it's looking for the ErrroResponseModel. The new BaseBillingController provides Error utilities to return TypedResults wrapping that model so the client can process it. * Add feature flagged payment method endoints to OrganizationBillingController * Run dotnet format
115 lines
4.2 KiB
C#
115 lines
4.2 KiB
C#
using Bit.Api.Billing.Controllers;
|
|
using Bit.Api.Billing.Models.Responses;
|
|
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.Core.Services;
|
|
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 GetMetadataAsync_Unauthorized_ReturnsUnauthorized(
|
|
Guid organizationId,
|
|
SutProvider<OrganizationBillingController> sutProvider)
|
|
{
|
|
sutProvider.GetDependency<ICurrentContext>().AccessMembersTab(organizationId).Returns(false);
|
|
|
|
var result = await sutProvider.Sut.GetMetadataAsync(organizationId);
|
|
|
|
AssertUnauthorized(result);
|
|
}
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task GetMetadataAsync_MetadataNull_NotFound(
|
|
Guid organizationId,
|
|
SutProvider<OrganizationBillingController> sutProvider)
|
|
{
|
|
sutProvider.GetDependency<ICurrentContext>().AccessMembersTab(organizationId).Returns(true);
|
|
sutProvider.GetDependency<IOrganizationBillingService>().GetMetadata(organizationId).Returns((OrganizationMetadata)null);
|
|
|
|
var result = await sutProvider.Sut.GetMetadataAsync(organizationId);
|
|
|
|
AssertNotFound(result);
|
|
}
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task GetMetadataAsync_OK(
|
|
Guid organizationId,
|
|
SutProvider<OrganizationBillingController> sutProvider)
|
|
{
|
|
sutProvider.GetDependency<ICurrentContext>().AccessMembersTab(organizationId).Returns(true);
|
|
sutProvider.GetDependency<IOrganizationBillingService>().GetMetadata(organizationId)
|
|
.Returns(new OrganizationMetadata(true));
|
|
|
|
var result = await sutProvider.Sut.GetMetadataAsync(organizationId);
|
|
|
|
Assert.IsType<Ok<OrganizationMetadataResponse>>(result);
|
|
|
|
var organizationMetadataResponse = ((Ok<OrganizationMetadataResponse>)result).Value;
|
|
|
|
Assert.True(organizationMetadataResponse.IsOnSecretsManagerStandalone);
|
|
}
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task GetHistoryAsync_Unauthorized_ReturnsUnauthorized(
|
|
Guid organizationId,
|
|
SutProvider<OrganizationBillingController> sutProvider)
|
|
{
|
|
sutProvider.GetDependency<ICurrentContext>().ViewBillingHistory(organizationId).Returns(false);
|
|
|
|
var result = await sutProvider.Sut.GetHistoryAsync(organizationId);
|
|
|
|
AssertUnauthorized(result);
|
|
}
|
|
|
|
[Theory, BitAutoData]
|
|
public async Task GetHistoryAsync_OrganizationNotFound_ReturnsNotFound(
|
|
Guid organizationId,
|
|
SutProvider<OrganizationBillingController> sutProvider)
|
|
{
|
|
sutProvider.GetDependency<ICurrentContext>().ViewBillingHistory(organizationId).Returns(true);
|
|
sutProvider.GetDependency<IOrganizationRepository>().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<OrganizationBillingController> sutProvider)
|
|
{
|
|
// Arrange
|
|
sutProvider.GetDependency<ICurrentContext>().ViewBillingHistory(organizationId).Returns(true);
|
|
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organizationId).Returns(organization);
|
|
|
|
// Manually create a BillingHistoryInfo object to avoid requiring AutoFixture to create HttpResponseHeaders
|
|
var billingInfo = new BillingHistoryInfo();
|
|
|
|
sutProvider.GetDependency<IPaymentService>().GetBillingHistoryAsync(organization).Returns(billingInfo);
|
|
|
|
// Act
|
|
var result = await sutProvider.Sut.GetHistoryAsync(organizationId);
|
|
|
|
// Assert
|
|
var okResult = Assert.IsType<Ok<BillingHistoryInfo>>(result);
|
|
Assert.Equal(billingInfo, okResult.Value);
|
|
}
|
|
}
|