public void ResolveUrl(BookPost bookPost)
 {
     if (!bookPost.PhotoFileName.StartsWith(_bookPostPhotosUrl))
     {
         bookPost.PhotoFileName = $"{_bookPostPhotosUrl}/{bookPost.PhotoFileName}";
     }
 }
Example #2
0
        public async Task <bool> MakePostAsync()
        {
            if (!ValidFields())
            {
                return(false);
            }

            var bookPost = new BookPost()
            {
                Author        = Author,
                Genre         = Genre,
                Location      = Location,
                OfferType     = OfferType,
                PostOwnerId   = PostOwnerId,
                PhotoFileName = PhotoFileName,
                Price         = (OfferType == OfferType.Sell) ? (Price ?? 0): 0,
                Title         = Title,
                Description   = Description,
                TimeOfPosting = DateTime.UtcNow
            };

            await _postsService.UploadPhotoAsync(PhotoStream, PhotoFileName);

            return(await _postsService.MakePostAsync(bookPost));
        }
Example #3
0
        public async Task <bool> CreateBook(BookPost book)
        {
            var content  = BuildContent(book);
            var response = await PostAsync("books/", content);

            return(response.IsSuccessStatusCode);
        }
Example #4
0
        public async Task <bool> UpdateBook(BookPost book)
        {
            var content  = BuildContent(book);
            var response = await PutAsync($"books/{book.Id}/", content);

            return(response.IsSuccessStatusCode);
        }
Example #5
0
        public async Task <bool> DeletePostAsync(BookPost bookPost)
        {
            await _postsService.DeletePostAsync(bookPost);

            BookPosts.Remove(bookPost);

            return(true);
        }
Example #6
0
        public async Task <bool> DeletePostAsync(BookPost bookPost)
        {
            using (var httpClient = new HttpClient())
            {
                var response = await httpClient.DeleteAsync($"{_apiURL}/{bookPost.Id}");

                var jsonResponse = await response.Content.ReadAsStringAsync();

                return(JsonConvert.DeserializeObject <bool>(jsonResponse));
            }
        }
Example #7
0
        public void ShouldNotStoreBookPostWhenContentIsInvalid()
        {
            var repository        = new Mock <Repository>();
            var submittedBookPost = new BookPost {
                Title = "test title", Content = "", Type = BookPost.BookPostType.Reviews
            };

            repository.Setup(repo => repo.Create(submittedBookPost)).Returns(submittedBookPost);

            var controller = new BookPostsController(repository.Object);

            ValidateViewModel(submittedBookPost, controller);
            Assert.IsFalse(controller.ModelState.IsValid);
        }
Example #8
0
        public async Task <bool> MakePostAsync(BookPost bookPost)
        {
            using (var httpClient = new HttpClient())
            {
                var response = await httpClient.PostAsync(_apiURL,
                                                          new StringContent(
                                                              JsonConvert.SerializeObject(bookPost),
                                                              Encoding.UTF8, "application/json"
                                                              ));

                var jsonResponse = await response.Content.ReadAsStringAsync();

                return(JsonConvert.DeserializeObject <bool>(jsonResponse));
            }
        }
Example #9
0
        private async void OnDeletePostClicked(BookPost bookPost)
        {
            var delete = await DisplayAlert("Delete post", "Are you sure you want to delete this post?", "Yes", "No");

            if (!_internetConnectionChecker.CheckConnection())
            {
                await DisplayAlert(Properties.Resources.NoNetworkMsgTitle, Properties.Resources.NoNetworkMsgContent, Properties.Resources.NoNetworkMsgConfirm);

                return;
            }

            if (delete)
            {
                await _settingsViewModel.DeletePostAsync(bookPost);
                await DisplayAlert("Success", "Post deleted succesfully!", "OK");
            }
        }
Example #10
0
        public void ShouldStoreBookPostWhenCreated()
        {
            var repository = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var bookPost = new BookPost {
                Title = "test title", Content = "some content"
            };
            var submittedBookPostInformation = new BookPostInformation(book.Id, bookPost);

            repository.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var controller = new BookPostsController(repository.Object);
            var result     = (RedirectToRouteResult)controller.Create(submittedBookPostInformation);

            repository.Verify(it => it.Edit(book), Times.Once());
            Assert.AreEqual(string.Format("Added {0} successfully", bookPost.Title), controller.TempData["flashSuccess"]);
            Assert.AreEqual(book.Id, result.RouteValues["id"]);
        }
Example #11
0
        public void ShouldSetCreatedAtAndUpdatedAtOnBookPostCreation()
        {
            var now        = DateTime.Now;
            var repository = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var bookPost = new BookPost {
                Title = "test title", Content = "some content"
            };
            var submittedBookPostInformation = new BookPostInformation(book.Id, bookPost);

            repository.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var controller = new BookPostsController(repository.Object);

            controller.Create(submittedBookPostInformation);
            Assert.IsTrue(bookPost.CreatedAt >= now);
            Assert.IsTrue(bookPost.UpdatedAt >= now);
        }
Example #12
0
        public void ShouldKnowHowToUpdateABookPost()
        {
            var repository = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var existingBookPost = new BookPost {
                Id = 1, Title = "Derping for dummies", Type = BookPost.BookPostType.Reviews
            };

            book.Posts.Add(existingBookPost);
            repository.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var bookPostsController = new BookPostsController(repository.Object);
            var result = (RedirectToRouteResult)bookPostsController.Edit(new BookPostInformation(book.Id, existingBookPost));

            Assert.AreEqual(existingBookPost.Id, result.RouteValues["id"]);
            Assert.AreEqual("Updated Derping for dummies successfully", bookPostsController.TempData["flashSuccess"]);
            repository.Verify(repo => repo.Edit(book), Times.Once());
        }
Example #13
0
        public void EditBookShouldNotSaveWhenBookIsInvalid()
        {
            var bookPost = new BookPost();
            var book     = new Book {
                Id = 1
            };

            book.Posts.Add(bookPost);
            var mockedRepo          = new Mock <Repository>();
            var bookPostsController = new BookPostsController(mockedRepo.Object);

            mockedRepo.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            bookPostsController.ModelState.AddModelError("test error", "test exception");

            var result = (ViewResult)bookPostsController.Edit(new BookPostInformation(book.Id, bookPost));

            mockedRepo.Verify(repo => repo.Edit(book), Times.Never(), "failing model validation should prevent updating book post");
            Assert.AreEqual("There were problems saving this book post", bookPostsController.TempData["flashError"]);
        }
Example #14
0
        public void ShouldSetCreatedAtFromExisitingBookPost()
        {
            var repository = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var existingBookPost = new BookPost {
                Id = 1, Title = "Derping for dummies", Type = BookPost.BookPostType.Reviews, CreatedAt = DateTime.Now.AddMinutes(-1)
            };

            book.Posts.Add(existingBookPost);
            repository.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var bookPostsController = new BookPostsController(repository.Object);
            var editedBookPost      = new BookPost {
                Id = 1, Title = "Derping for dummies II", Type = BookPost.BookPostType.Reviews, CreatedAt = DateTime.Now
            };

            bookPostsController.Edit(new BookPostInformation(book.Id, editedBookPost));
            Assert.AreEqual(existingBookPost.CreatedAt, editedBookPost.CreatedAt);
        }
Example #15
0
        public void ShouldKnowHowToRenderAnEditPage()
        {
            var repositoryMock = new Mock <Repository>();
            var bookPost       = new BookPost {
                Id = 1, Title = "The Page", Type = BookPost.BookPostType.Reviews
            };
            var book = new Book {
                Id = 1
            };

            book.Posts.Add(bookPost);
            repositoryMock.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var bookPostsController = new BookPostsController(repositoryMock.Object);

            var result      = bookPostsController.Edit(bookPost.Id, book.Id);
            var actualModel = (BookPostInformation)result.Model;

            Assert.AreEqual(bookPost.Title, actualModel.Model.Title);
            Assert.AreEqual("PUT", bookPostsController.ViewBag.Method);
            repositoryMock.Verify(repo => repo.Get <Book>(book.Id), Times.Once());
        }
Example #16
0
        public void ShouldKnowHowToDisplayABookPost()
        {
            var id         = 12;
            var repository = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var savedBookPost = new BookPost {
                Id = id, Title = "test title", Content = "some content", Type = BookPost.BookPostType.Reviews
            };

            book.Posts.Add(savedBookPost);
            repository.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var controller = new BookPostsController(repository.Object);
            var result     = controller.Details(id, book.Id);

            repository.Verify(it => it.Get <Book>(book.Id), Times.Once());
            Assert.AreEqual(book.Id, ((BookPostInformation)result.Model).BookId);
            Assert.AreEqual(id, ((BookPostInformation)result.Model).Model.Id);
            Assert.AreEqual(book, ((BookPostInformation)result.Model).Book);
        }
Example #17
0
        public void CreateBookPostShouldNotSaveWhenBookPostIsInvalid()
        {
            var repository = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var bookPost = new BookPost {
                Title = "The Book Post", Content = "some content", Type = BookPost.BookPostType.Reviews
            };
            var submittedBookPostInformation = new BookPostInformation(book.Id, bookPost);

            repository.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var bookPostsController = new BookPostsController(repository.Object);

            bookPostsController.ModelState.AddModelError("test error", "test exception");

            var result = (ViewResult)bookPostsController.Create(submittedBookPostInformation);

            repository.Verify(repo => repo.Edit(book), Times.Never(), "failing model validation should prevent creating book post");
            Assert.AreEqual("There were problems saving this book post", bookPostsController.TempData["flashError"]);
        }
Example #18
0
        public void ShouldDeleteBookPostAndShowListOfBooksPosts()
        {
            var mockedRepo = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var bookPost = new BookPost {
                Id = 2, Title = "something"
            };

            book.Posts.Add(bookPost);
            mockedRepo.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var bookPostsController = new BookPostsController(mockedRepo.Object);

            var viewResult = bookPostsController.Delete(bookPost.Id, book.Id);

            mockedRepo.Verify(repo => repo.Edit(book));
            Assert.AreEqual("Book Post successfully deleted", bookPostsController.TempData["flashSuccess"]);
            Assert.AreEqual("Details", viewResult.RouteValues["action"]);
            Assert.AreEqual(book.Id, viewResult.RouteValues["id"]);
        }
Example #19
0
        public void ShouldRedirectToDetailsPageWhenBookPostIsCreated()
        {
            var repository = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var bookPost = new BookPost {
                Title = "The Book Post", Content = "some content", Type = BookPost.BookPostType.Reviews
            };
            var submittedBookPostInformation = new BookPostInformation(book.Id, bookPost);

            repository.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var bookPostsController = new BookPostsController(repository.Object);
            var viewResult          = (RedirectToRouteResult)bookPostsController.Create(submittedBookPostInformation);

            repository.Verify(repo => repo.Edit(book));

            Assert.IsNotNull(viewResult);
            Assert.AreEqual("Added The Book Post successfully", bookPostsController.TempData["flashSuccess"]);
            Assert.AreEqual(1, viewResult.RouteValues["id"]);
            Assert.IsTrue(book.Posts.Contains(bookPost));
        }
Example #20
0
        private async void btnSave_Click(Object sender, EventArgs e)
        {
            var book = new BookPost
            {
                AuthorsIds  = _authorsIds.ToList(),
                Description = tbDesc.Text,
                Genre       = _genres[cbGenre.SelectedIndex].Id,
                Title       = tbTitle.Text,
            };

            // If book has not default cover picture
            if (_imageChanged)
            {
                book.CoverBytes = Helpers.ImageToBytes(pbCover.Image);
            }

            if (int.TryParse(tbYear.Text, out var year))
            {
                book.Year = year;
            }

            await _client.CreateBook(book);
        }
Example #21
0
        public void ShouldKnowToRenderTheBookPostContentAsMarkdown()
        {
            var id         = 12;
            var repository = new Mock <Repository>();
            var book       = new Book {
                Id = 1
            };
            var markdown      = new Markdown();
            var savedBookPost = new BookPost {
                Id = id, Title = "test title", Content = "Hello\n=====\nWorld", Type = BookPost.BookPostType.Reviews
            };

            book.Posts.Add(savedBookPost);
            repository.Setup(repo => repo.Get <Book>(book.Id)).Returns(book);
            var controller = new BookPostsController(repository.Object);
            var result     = controller.Details(id, book.Id);

            repository.Verify(it => it.Get <Book>(book.Id), Times.Once());
            var transformedContent = markdown.Transform(savedBookPost.Content);

            Assert.AreEqual(transformedContent, result.ViewBag.transformedContent);
            Assert.AreEqual(id, ((BookPostInformation)result.Model).Model.Id);
        }
Example #22
0
        public async Task <ActionResult <bool> > MakePost(BookPost bookPost)
        {
            var posted = await _postsService.MakePostAsync(bookPost);

            return(Ok(posted));
        }
Example #23
0
        public async Task <bool> MakePostAsync(BookPost bookPost)
        {
            await _bookPostRepository.InsertAsync(bookPost);

            return(true);
        }
Example #24
0
 public PostDetailsViewModel(IConversationService conversationService, IMessageService messageService)
 {
     _conversationService = conversationService;
     _messageService      = messageService;
     BookPost             = DataContainer.BookPost;
 }