public async Task UpdateAccounting_WhenAccountingViewModelIsInvalid_ReturnsRedirectToActionResultWhereRouteValuesIsNotNull()
        {
            Controller sut = CreateSut(false);

            RedirectToActionResult result = (RedirectToActionResult)await sut.UpdateAccounting(CreateAccountingViewModel());

            Assert.That(result.RouteValues, Is.Not.Null);
        }
        public async Task UpdateAccounting_WhenAccountingViewModelIsInvalid_ReturnsRedirectToActionResult()
        {
            Controller sut = CreateSut(false);

            IActionResult result = await sut.UpdateAccounting(CreateAccountingViewModel());

            Assert.That(result, Is.TypeOf <RedirectToActionResult>());
        }
        public async Task UpdateAccounting_WhenAccountingViewModelIsInvalid_ReturnsRedirectToActionResultWhereActionNameIsEqualToAccountings()
        {
            Controller sut = CreateSut(false);

            RedirectToActionResult result = (RedirectToActionResult)await sut.UpdateAccounting(CreateAccountingViewModel());

            Assert.That(result.ActionName, Is.EqualTo("Accountings"));
        }
        public async Task UpdateAccounting_WhenAccountingViewModelIsInvalid_AssertPublishAsyncWasNotCalledOnCommandBus()
        {
            Controller sut = CreateSut(false);

            await sut.UpdateAccounting(CreateAccountingViewModel());

            _commandBusMock.Verify(m => m.PublishAsync(It.IsAny <IUpdateAccountingCommand>()), Times.Never);
        }
        public async Task UpdateAccounting_WhenAccountingViewModelIsValid_ReturnsRedirectToActionResultWhereRouteValuesContainsAccountingNumber()
        {
            Controller sut = CreateSut();

            RedirectToActionResult result = (RedirectToActionResult)await sut.UpdateAccounting(CreateAccountingViewModel());

            Assert.That(result.RouteValues.ContainsKey("AccountingNumber"), Is.True);
        }
        public async Task UpdateAccounting_WhenAccountingViewModelIsValid_ReturnsRedirectToActionResultWhereRouteValuesContainsAccountingNumberWithValueFromAccountingViewModel()
        {
            Controller sut = CreateSut();

            int accountingNumber = _fixture.Create <int>();
            AccountingViewModel    accountingViewModel = CreateAccountingViewModel(accountingNumber);
            RedirectToActionResult result = (RedirectToActionResult)await sut.UpdateAccounting(accountingViewModel);

            Assert.That(result.RouteValues["AccountingNumber"], Is.EqualTo(accountingNumber));
        }
        public async Task UpdateAccounting_WhenAccountingViewModelIsValid_AssertPublishAsyncWasCalledOnCommandBus()
        {
            Controller sut = CreateSut();

            int accountingNumber = _fixture.Create <int>();
            AccountingViewModel accountingViewModel = CreateAccountingViewModel(accountingNumber);
            await sut.UpdateAccounting(accountingViewModel);

            _commandBusMock.Verify(m => m.PublishAsync(It.Is <IUpdateAccountingCommand>(command => command != null && command.AccountingNumber == accountingNumber)), Times.Once);
        }
        public void UpdateAccounting_WhenAccountingViewModelIsNull_ThrowsArgumentNullException()
        {
            Controller sut = CreateSut();

            ArgumentNullException result = Assert.ThrowsAsync <ArgumentNullException>(async() => await sut.UpdateAccounting(null));

            Assert.That(result.ParamName, Is.EqualTo("accountingViewModel"));
        }