You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
5.6 KiB
144 lines
5.6 KiB
using AutoFixture; |
|
using Bit.Api.Tools.Controllers; |
|
using Bit.Core.Context; |
|
using Bit.Core.Exceptions; |
|
using Bit.Core.Tools.ReportFeatures.Interfaces; |
|
using Bit.Core.Tools.ReportFeatures.Requests; |
|
using Bit.Test.Common.AutoFixture; |
|
using Bit.Test.Common.AutoFixture.Attributes; |
|
using NSubstitute; |
|
using Xunit; |
|
|
|
namespace Bit.Api.Test.Tools.Controllers; |
|
|
|
|
|
[ControllerCustomize(typeof(ReportsController))] |
|
[SutProviderCustomize] |
|
public class ReportsControllerTests |
|
{ |
|
[Theory, BitAutoData] |
|
public async Task GetPasswordHealthReportApplicationAsync_Success(SutProvider<ReportsController> sutProvider) |
|
{ |
|
// Arrange |
|
sutProvider.GetDependency<ICurrentContext>().AccessReports(Arg.Any<Guid>()).Returns(true); |
|
|
|
// Act |
|
var orgId = Guid.NewGuid(); |
|
var result = await sutProvider.Sut.GetPasswordHealthReportApplications(orgId); |
|
|
|
// Assert |
|
_ = sutProvider.GetDependency<IGetPasswordHealthReportApplicationQuery>() |
|
.Received(1) |
|
.GetPasswordHealthReportApplicationAsync(Arg.Is<Guid>(_ => _ == orgId)); |
|
} |
|
|
|
[Theory, BitAutoData] |
|
public async Task GetPasswordHealthReportApplicationAsync_withoutAccess(SutProvider<ReportsController> sutProvider) |
|
{ |
|
// Arrange |
|
sutProvider.GetDependency<ICurrentContext>().AccessReports(Arg.Any<Guid>()).Returns(false); |
|
|
|
// Act & Assert |
|
var orgId = Guid.NewGuid(); |
|
await Assert.ThrowsAsync<NotFoundException>(async () => await sutProvider.Sut.GetPasswordHealthReportApplications(orgId)); |
|
|
|
// Assert |
|
_ = sutProvider.GetDependency<IGetPasswordHealthReportApplicationQuery>() |
|
.Received(0); |
|
} |
|
|
|
[Theory, BitAutoData] |
|
public async Task AddPasswordHealthReportApplicationAsync_withAccess_success(SutProvider<ReportsController> sutProvider) |
|
{ |
|
// Arrange |
|
sutProvider.GetDependency<ICurrentContext>().AccessReports(Arg.Any<Guid>()).Returns(true); |
|
|
|
// Act |
|
var request = new Api.Tools.Models.PasswordHealthReportApplicationModel |
|
{ |
|
OrganizationId = Guid.NewGuid(), |
|
Url = "https://example.com", |
|
}; |
|
await sutProvider.Sut.AddPasswordHealthReportApplication(request); |
|
|
|
// Assert |
|
_ = sutProvider.GetDependency<IAddPasswordHealthReportApplicationCommand>() |
|
.Received(1) |
|
.AddPasswordHealthReportApplicationAsync(Arg.Is<AddPasswordHealthReportApplicationRequest>(_ => |
|
_.OrganizationId == request.OrganizationId && _.Url == request.Url)); |
|
} |
|
|
|
[Theory, BitAutoData] |
|
public async Task AddPasswordHealthReportApplicationAsync_multiple_withAccess_success( |
|
SutProvider<ReportsController> sutProvider) |
|
{ |
|
// Arrange |
|
sutProvider.GetDependency<ICurrentContext>().AccessReports(Arg.Any<Guid>()).Returns(true); |
|
|
|
// Act |
|
var fixture = new Fixture(); |
|
var request = fixture.CreateMany<Api.Tools.Models.PasswordHealthReportApplicationModel>(2); |
|
await sutProvider.Sut.AddPasswordHealthReportApplications(request); |
|
|
|
// Assert |
|
_ = sutProvider.GetDependency<IAddPasswordHealthReportApplicationCommand>() |
|
.Received(1) |
|
.AddPasswordHealthReportApplicationAsync(Arg.Any<IEnumerable<AddPasswordHealthReportApplicationRequest>>()); |
|
} |
|
|
|
[Theory, BitAutoData] |
|
public async Task AddPasswordHealthReportApplicationAsync_withoutAccess(SutProvider<ReportsController> sutProvider) |
|
{ |
|
// Arrange |
|
sutProvider.GetDependency<ICurrentContext>().AccessReports(Arg.Any<Guid>()).Returns(false); |
|
|
|
// Act |
|
var request = new Api.Tools.Models.PasswordHealthReportApplicationModel |
|
{ |
|
OrganizationId = Guid.NewGuid(), |
|
Url = "https://example.com", |
|
}; |
|
await Assert.ThrowsAsync<NotFoundException>(async () => |
|
await sutProvider.Sut.AddPasswordHealthReportApplication(request)); |
|
|
|
// Assert |
|
_ = sutProvider.GetDependency<IAddPasswordHealthReportApplicationCommand>() |
|
.Received(0); |
|
} |
|
|
|
[Theory, BitAutoData] |
|
public async Task DropPasswordHealthReportApplicationAsync_withoutAccess(SutProvider<ReportsController> sutProvider) |
|
{ |
|
// Arrange |
|
sutProvider.GetDependency<ICurrentContext>().AccessReports(Arg.Any<Guid>()).Returns(false); |
|
|
|
// Act |
|
var fixture = new Fixture(); |
|
var request = fixture.Create<Api.Tools.Models.PasswordHealthReportApplicationModel>(); |
|
await Assert.ThrowsAsync<NotFoundException>(async () => |
|
await sutProvider.Sut.AddPasswordHealthReportApplication(request)); |
|
|
|
// Assert |
|
_ = sutProvider.GetDependency<IDropPasswordHealthReportApplicationCommand>() |
|
.Received(0); |
|
} |
|
|
|
[Theory, BitAutoData] |
|
public async Task DropPasswordHealthReportApplicationAsync_withAccess_success(SutProvider<ReportsController> sutProvider) |
|
{ |
|
// Arrange |
|
sutProvider.GetDependency<ICurrentContext>().AccessReports(Arg.Any<Guid>()).Returns(true); |
|
|
|
// Act |
|
var fixture = new Fixture(); |
|
var request = fixture.Create<DropPasswordHealthReportApplicationRequest>(); |
|
await sutProvider.Sut.DropPasswordHealthReportApplication(request); |
|
|
|
// Assert |
|
_ = sutProvider.GetDependency<IDropPasswordHealthReportApplicationCommand>() |
|
.Received(1) |
|
.DropPasswordHealthReportApplicationAsync(Arg.Is<DropPasswordHealthReportApplicationRequest>(_ => |
|
_.OrganizationId == request.OrganizationId && |
|
_.PasswordHealthReportApplicationIds == request.PasswordHealthReportApplicationIds)); |
|
} |
|
}
|
|
|