public void QueryAsync_WhenQueryIsNull_ThrowsArgumentNullException()
        {
            QueryHandler sut = CreateSut();

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

            Assert.That(result.ParamName, Is.EqualTo("query"));
        }
        public async Task QueryAsync_WhenCalled_AssertNumberWasCalledOnGetPaymentTermQuery()
        {
            QueryHandler sut = CreateSut();

            Mock <IGetPaymentTermQuery> queryMock = CreateQueryMock();
            await sut.QueryAsync(queryMock.Object);

            queryMock.Verify(m => m.Number, Times.Once);
        }
        public async Task QueryAsync_WhenCalled_ReturnsPaymentTermFromAccountingRepository()
        {
            IPaymentTerm paymentTerm = _fixture.BuildPaymentTermMock().Object;
            QueryHandler sut         = CreateSut(paymentTerm);

            IGetPaymentTermQuery query  = CreateQueryMock().Object;
            IPaymentTerm         result = await sut.QueryAsync(query);

            Assert.That(result, Is.EqualTo(paymentTerm));
        }
        public async Task QueryAsync_WhenCalled_AssertGetPaymentTermAsyncWasCalledOnAccountingRepository()
        {
            QueryHandler sut = CreateSut();

            int number = _fixture.Create <int>();
            IGetPaymentTermQuery query = CreateQueryMock(number).Object;
            await sut.QueryAsync(query);

            _accountingRepositoryMock.Verify(m => m.GetPaymentTermAsync(It.Is <int>(value => value == number)), Times.Once);
        }
        public async Task QueryAsync_WhenCalled_AssertValidateWasCalledOnGetPaymentTermQuery()
        {
            QueryHandler sut = CreateSut();

            Mock <IGetPaymentTermQuery> queryMock = CreateQueryMock();
            await sut.QueryAsync(queryMock.Object);

            queryMock.Verify(m => m.Validate(
                                 It.Is <IValidator>(value => value == _validatorMock.Object),
                                 It.Is <IAccountingRepository>(value => value == _accountingRepositoryMock.Object)),
                             Times.Once);
        }