Example #1
0
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', '/'))
Example #2
0
    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)
Example #3
0
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('/')
Example #4
0
    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)
Example #5
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)
Example #6
0
 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)
Example #7
0
 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)
Example #8
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)