public void GetPhoneBookList_SpecifiedOptions_ListOfContactsForGivenUserId(
            [Values(1, 2, 3)] int userId,
            [Values(1,5,10)] int numberOfEntries,
            [Values("adam", "")] string firstNameFilter,
            [Values("ast", "")] string lastNameFilter,
            [ValueSource("enumValues")] Order orderBy)
        {
            FakePhoneBookRepository repository = new FakePhoneBookRepository();
            PhoneBookService service = new PhoneBookService(repository) { GetUserId = () => userId };
            int count = 10;
            GeneratePhoneBook(count, repository);

            GetListResponse response = service.GetPhoneBookList(new GetListRequest
            {
                NumberOfEntries = numberOfEntries,
                FilterByFirstName = firstNameFilter,
                FilterByLastName = lastNameFilter,
                OrderBy = orderBy,
            });
            IEnumerable<PhoneBook> list = repository.phoneBook.Where(x => x.UserId == userId && x.FirstName.Contains(firstNameFilter, StringComparison.OrdinalIgnoreCase) && x.LastName.Contains(lastNameFilter, StringComparison.OrdinalIgnoreCase)).ToList();

            switch (orderBy)
            {
                case Order.OrderByFirstNameAscending:
                    list = list.OrderBy(y => y.FirstName);
                    break;
                case Order.OrderByFirstNameDescending:
                    list = list.OrderByDescending(y => y.FirstName);
                    break;
                case Order.OrderByLastNameAscending:
                    list = list.OrderBy(y => y.LastName);
                    break;
                case Order.OrderByLastNameDescending:
                    list = list.OrderByDescending(y => y.LastName);
                    break;
            }

            list = list.Take(numberOfEntries);

            Assert.AreEqual(list.Count(), response.Entries.Count());
            int listCount = list.Count();
            for(int i = 0; i < listCount; i++)
            {
                Assert.AreEqual(list.ElementAt(i).Id, response.Entries.ElementAt(i).Id);
            }
        }