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_AssertNumberWasCalledOnGetLetterHeadQuery()
        {
            QueryHandler sut = CreateSut();

            Mock <IGetLetterHeadQuery> query = CreateQueryMock();
            await sut.QueryAsync(query.Object);

            query.Verify(m => m.Number, Times.Once);
        }
        public async Task QueryAsync_WhenCalled_ReturnsLetterHeadFromCommonRepository()
        {
            ILetterHead  letterHead = _fixture.BuildLetterHeadMock().Object;
            QueryHandler sut        = CreateSut(letterHead);

            IGetLetterHeadQuery query  = CreateQueryMock().Object;
            ILetterHead         result = await sut.QueryAsync(query);

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

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

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

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

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