public async Task ReturnPagedDataOnGet()
        {
            // arrange
            var expectedResults = new List <Model.Models.Contact>
            {
                new Model.Models.Contact {
                    Uid = _expectedData[0].Uid, FirstName = _expectedData[0].FirstName, LastName = _expectedData[0].LastName
                },
                new Model.Models.Contact {
                    Uid = _expectedData[1].Uid, FirstName = _expectedData[1].FirstName, LastName = _expectedData[1].LastName
                },
                new Model.Models.Contact {
                    Uid = _expectedData[2].Uid, FirstName = _expectedData[2].FirstName, LastName = _expectedData[2].LastName
                },
            };

            const int expectedPageNumber = 1;
            const int expectedPageSize   = 10;
            var       expectedTotal      = _expectedData.Count(o => !o.IsDeleted);

            // act
            var result = await _target.Get(expectedPageNumber, expectedPageSize);

            // assert
            result.Should().NotBeNull();
            result.ResultStatus.Should().Be(ManagerResponseResult.Success);
            result.Result.Should().BeEquivalentTo(expectedResults);

            result.PageMeta.Should().NotBeNull();
            result.PageMeta.PageNumber.Should().Be(expectedPageNumber);
            result.PageMeta.PageSize.Should().Be(expectedPageSize);
            result.PageMeta.Total.Should().Be(expectedTotal);

            LogAssert.AssertInfo(_fakeLogger, Times.AtLeastOnce);
        }
        public async Task ReturnNoDeletedDataOnGetByUid()
        {
            // arrange

            // act
            var result = await _target.GetByUid(_expectedData[3].Uid);

            // assert
            result.Should().NotBeNull();
            result.ResultStatus.Should().Be(ManagerResponseResult.NotFound);

            LogAssert.AssertInfo(_fakeLogger, Times.AtLeastOnce);
            LogAssert.AssertWarn(_fakeLogger, Times.Once);
        }
        public async Task ReturnApiVersionAndOkDbStatusOnGet()
        {
            // arrange
            _fakeAdoHelper.Setup(o => o.ExecuteScalarAsync(_fakeDbCommand.Object)).ReturnsAsync(_fakeScalarResult);

            // act
            var result = await _target.Get();

            // assert
            result.ApiVersion.Should().NotBeNullOrWhiteSpace();
            result.DbStatus.Should().Be("OK");

            _fakeAdoHelper.Verify(o => o.ExecuteScalarAsync(_fakeDbCommand.Object), Times.Once);
            LogAssert.AssertInfo(_fakeLogger, Times.AtLeastOnce);
        }
        public async Task ReturnNoDataOnGetByUidForMissingRecord()
        {
            // arrange


            // act
            var result = await _target.GetByUid(Guid.NewGuid());

            // assert
            result.Should().NotBeNull();
            result.ResultStatus.Should().Be(ManagerResponseResult.NotFound);

            LogAssert.AssertInfo(_fakeLogger, Times.AtLeastOnce);
            LogAssert.AssertWarn(_fakeLogger, Times.Once);
        }
        public async Task ReturnNotOkDbStatusAndLogErrorOnGetWhenExceptionThrownOnExecuteScalar()
        {
            // arrange
            var expectedException = new Exception("test");

            _fakeAdoHelper.Setup(o => o.ExecuteScalarAsync(_fakeDbCommand.Object)).ThrowsAsync(expectedException);

            // act
            var result = await _target.Get();

            // assert
            result.DbStatus.Should().NotBe("OK");

            LogAssert.AssertInfo(_fakeLogger, Times.AtLeastOnce);
            LogAssert.AssertError(_fakeLogger, expectedException, Times.Once);
        }
        public async Task ReturnDataOnGetByUid()
        {
            // arrange
            var expectedResults = new List <Model.Models.Contact>
            {
                new Model.Models.Contact {
                    Uid = _expectedData[2].Uid, FirstName = _expectedData[2].FirstName, LastName = _expectedData[2].LastName
                },
            };

            // act
            var result = await _target.GetByUid(_expectedData[2].Uid);

            // assert
            result.Should().NotBeNull();
            result.ResultStatus.Should().Be(ManagerResponseResult.Success);
            result.Result.Should().BeEquivalentTo(expectedResults);

            result.PageMeta.Should().BeNull();

            LogAssert.AssertInfo(_fakeLogger, Times.AtLeastOnce);
        }
        public async Task ReturnNoDataFromSecondLargePageOnGet()
        {
            // arrange
            var expectedResults = new List <Model.Models.Contact>();

            const int expectedPageNumber = 2;
            const int expectedPageSize   = 10;
            var       expectedTotal      = _expectedData.Count(o => !o.IsDeleted);

            // act
            var result = await _target.Get(expectedPageNumber, expectedPageSize);

            // assert
            result.Should().NotBeNull();
            result.ResultStatus.Should().Be(ManagerResponseResult.Success);
            result.Result.Should().BeEquivalentTo(expectedResults);

            result.PageMeta.Should().NotBeNull();
            result.PageMeta.PageNumber.Should().Be(expectedPageNumber);
            result.PageMeta.PageSize.Should().Be(expectedPageSize);
            result.PageMeta.Total.Should().Be(expectedTotal);

            LogAssert.AssertInfo(_fakeLogger, Times.AtLeastOnce);
        }