mirror of
https://github.com/bitwarden/server.git
synced 2025-07-01 16:12:49 -05:00
[PM-20576] OrganizationReport - Queries and Command (#5983)
This commit is contained in:
@ -0,0 +1,133 @@
|
||||
|
||||
using AutoFixture;
|
||||
using Bit.Core.AdminConsole.Entities;
|
||||
using Bit.Core.Dirt.Entities;
|
||||
using Bit.Core.Dirt.Reports.ReportFeatures;
|
||||
using Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
using Bit.Core.Dirt.Repositories;
|
||||
using Bit.Core.Exceptions;
|
||||
using Bit.Core.Repositories;
|
||||
using Bit.Test.Common.AutoFixture;
|
||||
using Bit.Test.Common.AutoFixture.Attributes;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Bit.Core.Test.Dirt.ReportFeatures;
|
||||
|
||||
[SutProviderCustomize]
|
||||
public class AddOrganizationReportCommandTests
|
||||
{
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task AddOrganizationReportAsync_ShouldReturnOrganizationReport(
|
||||
SutProvider<AddOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Create<AddOrganizationReportRequest>();
|
||||
sutProvider.GetDependency<IOrganizationRepository>()
|
||||
.GetByIdAsync(Arg.Any<Guid>())
|
||||
.Returns(fixture.Create<Organization>());
|
||||
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.CreateAsync(Arg.Any<OrganizationReport>())
|
||||
.Returns(c => c.Arg<OrganizationReport>());
|
||||
|
||||
// Act
|
||||
var result = await sutProvider.Sut.AddOrganizationReportAsync(request);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task AddOrganizationReportAsync_WithInvalidOrganizationId_ShouldThrowError(
|
||||
SutProvider<AddOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Create<AddOrganizationReportRequest>();
|
||||
sutProvider.GetDependency<IOrganizationRepository>()
|
||||
.GetByIdAsync(Arg.Any<Guid>())
|
||||
.Returns(null as Organization);
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.AddOrganizationReportAsync(request));
|
||||
Assert.Equal("Invalid Organization", exception.Message);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task AddOrganizationReportAsync_WithInvalidUrl_ShouldThrowError(
|
||||
SutProvider<AddOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Build<AddOrganizationReportRequest>()
|
||||
.Without(_ => _.ReportData)
|
||||
.Create();
|
||||
|
||||
sutProvider.GetDependency<IOrganizationRepository>()
|
||||
.GetByIdAsync(Arg.Any<Guid>())
|
||||
.Returns(fixture.Create<Organization>());
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.AddOrganizationReportAsync(request));
|
||||
Assert.Equal("Report Data is required", exception.Message);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task AddOrganizationReportAsync_Multiples_WithInvalidOrganizationId_ShouldThrowError(
|
||||
SutProvider<AddOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Create<AddOrganizationReportRequest>();
|
||||
sutProvider.GetDependency<IOrganizationRepository>()
|
||||
.GetByIdAsync(Arg.Any<Guid>())
|
||||
.Returns(null as Organization);
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.AddOrganizationReportAsync(request));
|
||||
Assert.Equal("Invalid Organization", exception.Message);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task AddOrganizationReportAsync_Multiples_WithInvalidUrl_ShouldThrowError(
|
||||
SutProvider<AddOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Build<AddOrganizationReportRequest>()
|
||||
.Without(_ => _.ReportData)
|
||||
.Create();
|
||||
|
||||
sutProvider.GetDependency<IOrganizationRepository>()
|
||||
.GetByIdAsync(Arg.Any<Guid>())
|
||||
.Returns(fixture.Create<Organization>());
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.AddOrganizationReportAsync(request));
|
||||
Assert.Equal("Report Data is required", exception.Message);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task AddOrganizationReportAsync_WithNullOrganizationId_ShouldThrowError(
|
||||
SutProvider<AddOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Build<AddOrganizationReportRequest>()
|
||||
.With(x => x.OrganizationId, default(Guid))
|
||||
.Create();
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.AddOrganizationReportAsync(request));
|
||||
Assert.Equal("Invalid Organization", exception.Message);
|
||||
}
|
||||
}
|
@ -0,0 +1,194 @@
|
||||
using AutoFixture;
|
||||
using Bit.Core.Dirt.Entities;
|
||||
using Bit.Core.Dirt.Reports.ReportFeatures;
|
||||
using Bit.Core.Dirt.Reports.ReportFeatures.Requests;
|
||||
using Bit.Core.Dirt.Repositories;
|
||||
using Bit.Core.Exceptions;
|
||||
using Bit.Test.Common.AutoFixture;
|
||||
using Bit.Test.Common.AutoFixture.Attributes;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Bit.Core.Test.Dirt.ReportFeatures;
|
||||
|
||||
[SutProviderCustomize]
|
||||
public class DeleteOrganizationReportCommandTests
|
||||
{
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withValidRequest_Success(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var OrganizationReports = fixture.CreateMany<OrganizationReport>(2).ToList();
|
||||
// only take one id from the list - we only want to drop one record
|
||||
var request = fixture.Build<DropOrganizationReportRequest>()
|
||||
.With(x => x.OrganizationReportIds,
|
||||
OrganizationReports.Select(x => x.Id).Take(1).ToList())
|
||||
.Create();
|
||||
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(OrganizationReports);
|
||||
|
||||
// Act
|
||||
await sutProvider.Sut.DropOrganizationReportAsync(request);
|
||||
|
||||
// Assert
|
||||
await sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.Received(1)
|
||||
.GetByOrganizationIdAsync(request.OrganizationId);
|
||||
|
||||
await sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.Received(1)
|
||||
.DeleteAsync(Arg.Is<OrganizationReport>(_ =>
|
||||
request.OrganizationReportIds.Contains(_.Id)));
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withValidRequest_nothingToDrop(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var OrganizationReports = fixture.CreateMany<OrganizationReport>(2).ToList();
|
||||
// we are passing invalid data
|
||||
var request = fixture.Build<DropOrganizationReportRequest>()
|
||||
.With(x => x.OrganizationReportIds, new List<Guid> { Guid.NewGuid() })
|
||||
.Create();
|
||||
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(OrganizationReports);
|
||||
|
||||
// Act
|
||||
await sutProvider.Sut.DropOrganizationReportAsync(request);
|
||||
|
||||
// Assert
|
||||
await sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.Received(1)
|
||||
.GetByOrganizationIdAsync(request.OrganizationId);
|
||||
|
||||
await sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.Received(0)
|
||||
.DeleteAsync(Arg.Any<OrganizationReport>());
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withNodata_fails(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
// we are passing invalid data
|
||||
var request = fixture.Build<DropOrganizationReportRequest>()
|
||||
.Create();
|
||||
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(null as List<OrganizationReport>);
|
||||
|
||||
// Act
|
||||
await Assert.ThrowsAsync<BadRequestException>(() =>
|
||||
sutProvider.Sut.DropOrganizationReportAsync(request));
|
||||
|
||||
// Assert
|
||||
await sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.Received(1)
|
||||
.GetByOrganizationIdAsync(request.OrganizationId);
|
||||
|
||||
await sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.Received(0)
|
||||
.DeleteAsync(Arg.Any<OrganizationReport>());
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withInvalidOrganizationId_ShouldThrowError(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Create<DropOrganizationReportRequest>();
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(null as List<OrganizationReport>);
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.DropOrganizationReportAsync(request));
|
||||
Assert.Equal("No data found.", exception.Message);
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withInvalidOrganizationReportId_ShouldThrowError(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Create<DropOrganizationReportRequest>();
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(new List<OrganizationReport>());
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.DropOrganizationReportAsync(request));
|
||||
Assert.Equal("No data found.", exception.Message);
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withNullOrganizationId_ShouldThrowError(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Build<DropOrganizationReportRequest>()
|
||||
.With(x => x.OrganizationId, default(Guid))
|
||||
.Create();
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.DropOrganizationReportAsync(request));
|
||||
Assert.Equal("No data found.", exception.Message);
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withNullOrganizationReportIds_ShouldThrowError(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Build<DropOrganizationReportRequest>()
|
||||
.With(x => x.OrganizationReportIds, default(List<Guid>))
|
||||
.Create();
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.DropOrganizationReportAsync(request));
|
||||
Assert.Equal("No data found.", exception.Message);
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withEmptyOrganizationReportIds_ShouldThrowError(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var request = fixture.Build<DropOrganizationReportRequest>()
|
||||
.With(x => x.OrganizationReportIds, new List<Guid>())
|
||||
.Create();
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.DropOrganizationReportAsync(request));
|
||||
Assert.Equal("No data found.", exception.Message);
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public async Task DropOrganizationReportAsync_withEmptyRequest_ShouldThrowError(
|
||||
SutProvider<DropOrganizationReportCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var request = new DropOrganizationReportRequest();
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.DropOrganizationReportAsync(request));
|
||||
Assert.Equal("No data found.", exception.Message);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,188 @@
|
||||
using AutoFixture;
|
||||
using Bit.Core.Dirt.Entities;
|
||||
using Bit.Core.Dirt.Reports.ReportFeatures;
|
||||
using Bit.Core.Dirt.Repositories;
|
||||
using Bit.Core.Exceptions;
|
||||
using Bit.Test.Common.AutoFixture;
|
||||
using Bit.Test.Common.AutoFixture.Attributes;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Bit.Core.Test.Dirt.ReportFeatures;
|
||||
|
||||
[SutProviderCustomize]
|
||||
public class GetOrganizationReportQueryTests
|
||||
{
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetOrganizationReportAsync_WithValidOrganizationId_ShouldReturnOrganizationReport(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var organizationId = fixture.Create<Guid>();
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(fixture.CreateMany<OrganizationReport>(2).ToList());
|
||||
|
||||
// Act
|
||||
var result = await sutProvider.Sut.GetOrganizationReportAsync(organizationId);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.True(result.Count() == 2);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetOrganizationReportAsync_WithInvalidOrganizationId_ShouldFail(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetByOrganizationIdAsync(Arg.Is<Guid>(x => x == Guid.Empty))
|
||||
.Returns(new List<OrganizationReport>());
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.GetOrganizationReportAsync(Guid.Empty));
|
||||
|
||||
// Assert
|
||||
Assert.Equal("OrganizationId is required.", exception.Message);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetLatestOrganizationReportAsync_WithValidOrganizationId_ShouldReturnOrganizationReport(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var organizationId = fixture.Create<Guid>();
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetLatestByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(fixture.Create<OrganizationReport>());
|
||||
|
||||
// Act
|
||||
var result = await sutProvider.Sut.GetLatestOrganizationReportAsync(organizationId);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetLatestOrganizationReportAsync_WithInvalidOrganizationId_ShouldFail(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetLatestByOrganizationIdAsync(Arg.Is<Guid>(x => x == Guid.Empty))
|
||||
.Returns(default(OrganizationReport));
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.GetOrganizationReportAsync(Guid.Empty));
|
||||
|
||||
// Assert
|
||||
Assert.Equal("OrganizationId is required.", exception.Message);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetOrganizationReportAsync_WithNoReports_ShouldReturnEmptyList(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var organizationId = fixture.Create<Guid>();
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(new List<OrganizationReport>());
|
||||
|
||||
// Act
|
||||
var result = await sutProvider.Sut.GetOrganizationReportAsync(organizationId);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(result);
|
||||
Assert.Empty(result);
|
||||
}
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetLatestOrganizationReportAsync_WithNoReports_ShouldReturnNull(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var organizationId = fixture.Create<Guid>();
|
||||
sutProvider.GetDependency<IOrganizationReportRepository>()
|
||||
.GetLatestByOrganizationIdAsync(Arg.Any<Guid>())
|
||||
.Returns(default(OrganizationReport));
|
||||
|
||||
// Act
|
||||
var result = await sutProvider.Sut.GetLatestOrganizationReportAsync(organizationId);
|
||||
|
||||
// Assert
|
||||
Assert.Null(result);
|
||||
}
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetOrganizationReportAsync_WithNullOrganizationId_ShouldThrowException(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var organizationId = default(Guid);
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.GetOrganizationReportAsync(organizationId));
|
||||
|
||||
// Assert
|
||||
Assert.Equal("OrganizationId is required.", exception.Message);
|
||||
}
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetLatestOrganizationReportAsync_WithNullOrganizationId_ShouldThrowException(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var organizationId = default(Guid);
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.GetLatestOrganizationReportAsync(organizationId));
|
||||
|
||||
// Assert
|
||||
Assert.Equal("OrganizationId is required.", exception.Message);
|
||||
}
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetOrganizationReportAsync_WithInvalidOrganizationId_ShouldThrowException(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var organizationId = Guid.Empty;
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.GetOrganizationReportAsync(organizationId));
|
||||
|
||||
// Assert
|
||||
Assert.Equal("OrganizationId is required.", exception.Message);
|
||||
}
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task GetLatestOrganizationReportAsync_WithInvalidOrganizationId_ShouldThrowException(
|
||||
SutProvider<GetOrganizationReportQuery> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
var fixture = new Fixture();
|
||||
var organizationId = Guid.Empty;
|
||||
|
||||
// Act & Assert
|
||||
var exception = await Assert.ThrowsAsync<BadRequestException>(async () => await sutProvider.Sut.GetLatestOrganizationReportAsync(organizationId));
|
||||
|
||||
// Assert
|
||||
Assert.Equal("OrganizationId is required.", exception.Message);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user