public async Task GetAsyncItemsViaStoredProcedureWithNoParameterButNoAccountsExistNotParameterisedTestAsync()
        {
            //Given
            //When
            var repository = new EfCoreAsyncAccountRepository(_databaseFactory);
            var items      = await repository.ExecuteQueryAsync <Account>("exec GetAccounts").ConfigureAwait(true);

            //Then
            Assert.AreEqual(0, items.ToList().Count, "Some items were returned where None should have been");
        }
        public async Task ExecuteStoredProcedureWithIncorrectQueryTestAsync()
        {
            //Given
            var repository = new EfCoreAsyncAccountRepository(_databaseFactory);

            //When
            AsyncTestDelegate testDelegate = async() => await repository.ExecuteQueryAsync("exec GetAccountsFake").ConfigureAwait(true);

            //Then
            Assert.ThrowsAsync <SqlException>(testDelegate, "The expected exception was not thrown.");
        }
        public async Task GetAsyncItemsViaStoredProcedureWithNoParameterNotParameterisedTestAsync()
        {
            //Given
            using (var efCoreAsyncUnitOfWork = new EfCoreAsyncUnitOfWork <SharedLibraryContext>(_databaseFactory))
            {
                var repository  = new EfCoreAsyncAccountRepository(_databaseFactory);
                var listOfItems = AccountEntityHelper.CreateEfCoreTestAccounts(3);
                await repository.AddRangeAsync(listOfItems).ConfigureAwait(true);

                await efCoreAsyncUnitOfWork.CommitAsync().ConfigureAwait(true);

                //When
                var items = await repository.ExecuteQueryAsync <Account>("exec GetAccounts").ConfigureAwait(true);

                //Then
                EqualityHelper.AssertListsAreEqual(items.OrderBy(x => x.CompanyName).ToList(), listOfItems.OrderBy(x => x.CompanyName).ToList(), new[] { "AccountID", "LastModified", "LastModifiedBy", "Contacts" });
            }
        }
        public async Task GetAsyncItemsViaStoredProcedureWithParameterNotParameterisedTestAsync()
        {
            //Given
            using (var efCoreAsyncUnitOfWork = new EfCoreAsyncUnitOfWork <SharedLibraryContext>(_databaseFactory))
            {
                var repository  = new EfCoreAsyncAccountRepository(_databaseFactory);
                var reference   = "TestReference";
                var listOfItems = GetAsyncItemsWithTwoItemsContainingTestReference(reference);
                await repository.AddRangeAsync(listOfItems).ConfigureAwait(true);

                await efCoreAsyncUnitOfWork.CommitAsync().ConfigureAwait(true);

                //When
                var filter = new SqlParameter("@CompanyName", SqlDbType.VarChar)
                {
                    Value = $"%{reference}%"
                };
                var items = await repository.ExecuteQueryAsync <Account>("exec GetAccounts @CompanyName", filter).ConfigureAwait(true);

                //Then
                EqualityHelper.AssertListsAreEqual(items.OrderBy(x => x.CompanyName).ToList(), listOfItems.OrderBy(x => x.CompanyName).Take(2).ToList(), new[] { "AccountID", "LastModified", "LastModifiedBy", "Contacts" });
            }
        }