Newer
Older
Warehouse / tests / Application.IntegrationTests / Partners / CreatePartnerTests.cs
@Derek Comartin Derek Comartin on 22 Aug 2023 1 KB Init
using FluentAssertions;
using MyWarehouse.Application.Common.Exceptions;
using MyWarehouse.Application.Partners.CreatePartner;
using MyWarehouse.Domain.Partners;
using NUnit.Framework;
using System;
using System.Threading.Tasks;
using static MyWarehouse.Application.Partners.CreatePartner.CreatePartnerCommand;

namespace MyWarehouse.Application.IntegrationTests.Partners
{
    public class CreatePartnerTests : TestBase
    {
        [Test]
        public void WhenDtoIsBlank_ShouldThrow_InputValidationException()
        {
            var command = new CreatePartnerCommand();

            FluentActions.Invoking(() => TestFramework.SendAsync(command))
                .Should().ThrowAsync<InputValidationException>();
        }

        [Test]
        public async Task WhenDtoIsValid_ShouldCreatePartner()
        {
            var command = new CreatePartnerCommand()
            {
                Address = new AddressDto()
                {
                    City = "Toronto",
                    Country = "Canada",
                    Street = "Street 123",
                    ZipCode = "1234XX"
                },
                Name = "Test Name"
            };

            // Act.
            var partnerId = await TestFramework.SendAsync(command);

            var partner = await TestFramework.Data.FindAsync<Partner>(partnerId, x => x.Transactions);
            partner.Should().NotBeNull();
            partner.Id.Should().Be(partnerId);
            partner.CreatedAt.Should().BeCloseTo(DateTime.Now, TimeSpan.FromSeconds(1));
            partner.CreatedBy.Should().NotBeNullOrWhiteSpace();
            partner.LastModifiedAt.Should().BeNull();
            partner.DeletedAt.Should().BeNull();
            partner.Transactions.Should().BeEmpty();
            partner.Name.Should().Be(command.Name);
            partner.Address.Should().NotBeNull();
            partner.Address.Should().BeEquivalentTo(command.Address, 
                o => o.ComparingByMembers<AddressDto>());
        }
    }
}