Files
nashel-backend/src/Modules/Reputation/Tests/Application/CreateReviewTests.cs
T

45 lines
1.5 KiB
C#

using FluentAssertions;
using MediatR;
using Moq;
using Nashel.Modules.Reputation.Application.Commands;
using Nashel.Modules.Reputation.Domain.Entities;
using Nashel.Modules.Reputation.Domain.Repositories;
using Xunit;
namespace Nashel.Modules.Reputation.Tests.Application;
public class ReviewApplicationTests
{
private readonly Mock<IReviewRepository> _repositoryMock;
private readonly Mock<IMediator> _mediatorMock;
private readonly CreateReviewHandler _handler;
public ReviewApplicationTests()
{
_repositoryMock = new Mock<IReviewRepository>();
_mediatorMock = new Mock<IMediator>();
_handler = new CreateReviewHandler(_repositoryMock.Object, _mediatorMock.Object);
}
[Fact]
public async Task СозданиеОтзыва_Должно_Сохранить_Отзыв_И_Опубликовать_События()
{
// 1. Arrange
var command = new CreateReviewCommand(
OrderId: Guid.NewGuid(),
AuthorId: Guid.NewGuid(),
TargetId: Guid.NewGuid(),
Rating: 5,
Text: "Отличный опыт!"
);
// 2. Act
var result = await _handler.Handle(command, CancellationToken.None);
// 3. Assert
result.Should().NotBeEmpty();
_repositoryMock.Verify(r => r.AddAsync(It.IsAny<Review>(), It.IsAny<CancellationToken>()), Times.Once);
_mediatorMock.Verify(m => m.Publish(It.IsAny<INotification>(), It.IsAny<CancellationToken>()), Times.AtLeastOnce);
}
}