def finish_reading(request): ''' a user completed a book, yay ''' book = books_manager.get_edition(request.POST['book']) shelf = models.Shelf.objects.filter(identifier='read', user=request.user).first() # update or create a readthrough readthrough = update_readthrough(request, book=book) if readthrough.start_date or readthrough.finish_date: readthrough.save() # shelve the book if request.POST.get('reshelve', True): try: current_shelf = models.Shelf.objects.get(user=request.user, edition=book) outgoing.handle_unshelve(request.user, book, current_shelf) except models.Shelf.DoesNotExist: # this just means it isn't currently on the user's shelves pass outgoing.handle_shelve(request.user, book, shelf) # post about it (if you want) if request.POST.get('post-status'): privacy = request.POST.get('privacy') outgoing.handle_reading_status(request.user, shelf, book, privacy) return redirect(request.headers.get('Referer', '/'))
def test_handle_shelve_read(self): shelf = models.Shelf.objects.get(identifier='read') with patch('bookwyrm.broadcast.broadcast_task.delay') as _: outgoing.handle_shelve(self.user, self.book, shelf) # make sure the book is on the shelf self.assertEqual(shelf.books.get(), self.book)
def shelve(request): ''' put a on a user's shelf ''' book = books_manager.get_edition(request.POST['book']) desired_shelf = models.Shelf.objects.filter( identifier=request.POST['shelf'], user=request.user).first() if request.POST.get('reshelve', True): try: current_shelf = models.Shelf.objects.get(user=request.user, edition=book) outgoing.handle_unshelve(request.user, book, current_shelf) except models.Shelf.DoesNotExist: # this just means it isn't currently on the user's shelves pass outgoing.handle_shelve(request.user, book, desired_shelf) # post about "want to read" shelves if desired_shelf.identifier == 'to-read': outgoing.handle_reading_status(request.user, desired_shelf, book, privacy='public') return redirect('/')
def test_handle_shelve_to_read(self): shelf = models.Shelf.objects.get(identifier='to-read') outgoing.handle_shelve(self.user, self.book, shelf) # make sure the book is on the shelf self.assertEqual(shelf.books.get(), self.book) # it should have posted a status about this status = models.GeneratedNote.objects.get() self.assertEqual(status.content, 'wants to read') self.assertEqual(status.user, self.user) self.assertEqual(status.mention_books.count(), 1) self.assertEqual(status.mention_books.first(), self.book) # and it should not create a read-through self.assertEqual(models.ReadThrough.objects.count(), 0)
def test_handle_shelve_read(self): shelf = models.Shelf.objects.get(identifier='read') outgoing.handle_shelve(self.user, self.book, shelf) # make sure the book is on the shelf self.assertEqual(shelf.books.get(), self.book) # it should have posted a status about this status = models.GeneratedNote.objects.order_by( '-published_date').first() self.assertEqual(status.content, 'finished reading') self.assertEqual(status.user, self.user) self.assertEqual(status.mention_books.count(), 1) self.assertEqual(status.mention_books.first(), self.book) # and it should update the existing read-through readthrough = models.ReadThrough.objects.get() self.assertEqual(readthrough.user, self.user) self.assertEqual(readthrough.book.id, self.book.id) self.assertIsNotNone(readthrough.start_date) self.assertIsNotNone(readthrough.finish_date)
def test_handle_shelve(self): outgoing.handle_shelve(self.user, self.book, self.shelf) # make sure the book is on the shelf self.assertEqual(self.shelf.books.get(), self.book)
def test_handle_shelve(self): with patch('bookwyrm.broadcast.broadcast_task.delay') as _: outgoing.handle_shelve(self.user, self.book, self.shelf) # make sure the book is on the shelf self.assertEqual(self.shelf.books.get(), self.book)
def test_handle_shelve_read(self): shelf = models.Shelf.objects.get(identifier='read') outgoing.handle_shelve(self.user, self.book, shelf) # make sure the book is on the shelf self.assertEqual(shelf.books.get(), self.book)