public void Delete_NonExistingEntryInPhoneBook_ResponseStatusSetTo2()
        {
            FakePhoneBookRepository repository = new FakePhoneBookRepository();
            PhoneBookService service = new PhoneBookService(repository) { GetUserId = () => 1 };

            BaseResponse response = service.Delete(new DeletePhoneBookRequest { Id = 1 });

            Assert.AreEqual(2, response.Status);
        }
        public void Edit_ExistingEntryInPhoneBookBelongingToDifferentUser_ResponseStatusSetTo1()
        {
            FakePhoneBookRepository repository = new FakePhoneBookRepository();
            PhoneBookService service = new PhoneBookService(repository) { GetUserId = () => 1 };
            repository.phoneBook.Add(new PhoneBook { UserId = service.GetUserId() + 1, Id = 1 });

            BaseResponse response = service.Edit(new EditPhoneBookRequest { Id = 1 });

            Assert.AreEqual(1, response.Status);
        }
        public void Delete_ExistingEntry_RemovedFromPhoneBook()
        {
            FakePhoneBookRepository repository = new FakePhoneBookRepository();
            PhoneBookService service = new PhoneBookService(repository) { GetUserId = () => 1 };

            repository.phoneBook.Add(new PhoneBook { Id = 1, UserId = service.GetUserId() });
            BaseResponse response = service.Delete(new DeletePhoneBookRequest { Id = 1 });

            Assert.AreEqual(0, repository.phoneBook.Count());
        }
        public void Create_SimpleValues_AddedToPhoneBook()
        {
            FakePhoneBookRepository repository = new FakePhoneBookRepository();
            PhoneBookService service = new PhoneBookService(repository) { GetUserId = () => 1 };

            service.Create(new CreatePhoneBookRequest { FirstName = "Adam", LastName = "Kowalski", Number = "123456", PhoneTypeId = 1});

            Assert.AreEqual(1, repository.phoneBook.Count());
            Assert.AreEqual("Adam", repository.phoneBook.First().FirstName);
            Assert.AreEqual("Kowalski", repository.phoneBook.First().LastName);
            Assert.AreEqual("123456", repository.phoneBook.First().Number);
            Assert.AreEqual(1, repository.phoneBook.First().PhoneTypeId);
            Assert.AreEqual(service.GetUserId(), repository.phoneBook.First().UserId);
        }
        public void Edit_ExistingEntry_UpdatedInPhoneBook()
        {
            FakePhoneBookRepository repository = new FakePhoneBookRepository();
            PhoneBookService service = new PhoneBookService(repository) { GetUserId = () => 1 };

            repository.phoneBook.Add(new PhoneBook { Id = 1, UserId = service.GetUserId() });
            BaseResponse response = service.Edit(new EditPhoneBookRequest { Id = 1, FirstName = "First", LastName="Last", Number="123456", PhoneTypeId=2 });

            Assert.AreEqual(1, repository.phoneBook.First().Id);
            Assert.AreEqual("First", repository.phoneBook.First().FirstName);
            Assert.AreEqual("123456", repository.phoneBook.First().Number);
            Assert.AreEqual(2, repository.phoneBook.First().PhoneTypeId);
        }
        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);
            }
        }