public override async void Save()
        {
            await ContactService.AddAsync(ContactModelMapper.Map(Contact));

            NavigationController.CurrentPage = (Page)MainPage;
            MainPage.ViewModel.LoadContacts();
        }
 protected async Task ValidSubmit()
 {
     if (Model.Id == 0)
     {
         var result = await _contactService.AddAsync(Model);
         await SaveAsync();
     }
     else
     {
         var result = await _contactService.UpdateAsync(Model);
         await SaveAsync();
     }
 }
        public async Task AddAsync_GivenValidContact_ShouldCallSaveChanges()
        {
            //---------------Set up test pack-------------------
            var contact        = ContactBuilder.BuildRandom();
            var dbContext      = Substitute.For <IApplicationDbContext>();
            var contactService = new ContactService(dbContext);

            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            _ = await contactService.AddAsync(contact);

            //---------------Test Result -----------------------
            await dbContext.Received(1).SaveChangesAsync();
        }
        public async Task AddAsync_GivenAContact_ShouldAddContactToRepo()
        {
            //---------------Set up test pack-------------------
            var contact        = CreateRandomContact(4);
            var contactService = new ContactService(_db.DbContext);
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var results = await contactService.AddAsync(contact);

            //---------------Test Result -----------------------
            var contactFromRepo = await contactService.GetByIdAsync(contact.ContactId);

            Assert.IsTrue(results);
            Assert.AreEqual(contactFromRepo.ContactId, contact.ContactId);
            Assert.AreEqual(contactFromRepo.FirstName, contact.FirstName);
            Assert.AreEqual(contactFromRepo.ContactDetails.Count, contact.ContactDetails.Count);
        }
        public async Task AddAsync_GivenAContactWithContactDetail_ShouldAddContactDetail()
        {
            //---------------Set up test pack-------------------
            var contact        = CreateRandomContact(5);
            var contactService = new ContactService(_db.DbContext);
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var results = await contactService.AddAsync(contact);

            //---------------Test Result -----------------------
            var contactFromRepo = await contactService.GetByIdAsync(contact.ContactId);

            Assert.IsTrue(results);
            Assert.AreEqual(contactFromRepo.ContactDetails[0].ContactId, contact.ContactDetails[0].ContactId);
            Assert.AreEqual(contactFromRepo.ContactDetails[0].ContactTypeId, contact.ContactDetails[0].ContactTypeId);
            Assert.AreEqual(contactFromRepo.ContactDetails[0].ContactDetailId, contact.ContactDetails[0].ContactDetailId);
            Assert.AreEqual(contactFromRepo.ContactDetails[0].Description, contact.ContactDetails[0].Description);
        }
        public async Task AddAsyncShouldAddContactToDb()
        {
            var db = DbInfrastructure.GetDatabase();

            var contactService = new ContactService(db);

            const string Title   = "Some title";
            const string Message = "Are there tigers in your zoo?";
            const string UserId  = "some_user_id";

            await contactService.AddAsync(Title, Message, ContactType.Message, UserId);

            var actual = db.Contacts.FirstOrDefault();

            actual.Title.Should().Be(Title);

            actual.Message.Should().Be(Message);

            actual.ContactType.Should().Be(ContactType.Message);

            actual.UserId.Should().Be(UserId);
        }