Ejemplo n.º 1
0
    def test_book_retire(self):
        properly_retired_book = erp_factories.RetiredBookFactory()
        self.assertEqual(properly_retired_book.status, 'RETIRED')
        self.assertTrue(bool(properly_retired_book.left_library_on))
        self.assertTrue(bool(properly_retired_book.left_library_cause))

        badly_retired_book = erp_factories.AvailableBookFactory()
        with self.assertRaises(ValidationError) as cm:
            badly_retired_book.status = 'RETIRED'
            badly_retired_book.save(
            )  # no saving, but badly_retired_book.status is still 'RETIRED' locally
        # important to test that we raised the correct ValidationError exception, and not another one
        self.assertEqual(
            cm.exception.message,
            "A book can't be retired without both left_library_on and left_library_cause filled",
        )

        badly_retired_book = erp_factories.AvailableBookFactory()
        with self.assertRaises(ValidationError) as cm:
            badly_retired_book.left_library_on = today
            badly_retired_book.save()
        self.assertEqual(
            cm.exception.message,
            "A book can't left the library without a cause",
        )

        badly_retired_book = erp_factories.AvailableBookFactory()
        with self.assertRaises(ValidationError) as cm:
            badly_retired_book.status = 'RETIRED'
            badly_retired_book.left_library_on = today
            badly_retired_book.save()
        self.assertEqual(
            cm.exception.message,
            "A book can't left the library without a cause",
        )
Ejemplo n.º 2
0
    def test_joined_date(self):
        new_book = erp_factories.AvailableBookFactory()
        self.assertEqual(new_book.joined_library_on, date.today())

        with freeze_time(one_year_ago):
            one_year_old_book = erp_factories.AvailableBookFactory.create()
        self.assertEqual(one_year_old_book.joined_library_on, one_year_ago)
Ejemplo n.º 3
0
    def test_book_rental_property(self):
        available_book = erp_factories.AvailableBookFactory()
        self.assertIsNone(available_book.current_rental)

        # opti: would be better to use one rental factory for that
        sub = erp_factories.SubscriberFactory()
        rent_book = erp_factories.RentBookFactory()
        rental = erp_models.Rental.objects.create(
            user=sub.user,
            book=rent_book,
        )
        self.assertEqual(rent_book.current_rental, rental)
Ejemplo n.º 4
0
    def test_subscriber_detail_get_response(self):
        sub = erp_factories.SubscriberFactory()
        erp_factories.AvailableBookFactory()

        res = self.client.get(
            path='/api/subscribers/%s/' % sub.id,
            format='json',
            HTTP_AUTHORIZATION='Token %s' % self.lib_token,
        )

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertTrue('current_rentals' in res.data)
        self.assertTrue('current_bookings' in res.data)
Ejemplo n.º 5
0
    def test_check_sub_can_rent__has_issue(self):
        # sub doesn't have any active rental
        sub = self.sub
        sub.has_issue = True
        sub.save()

        res = self.client.get(
            path='/api/rent/%s/' % self.sub.pk,
            format='json',
            HTTP_AUTHORIZATION='Token %s' % self.lib_token,
        )

        self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(res.data['can_rent'], False)
        self.assertEqual(res.data.get('nb_books_allowed'), 0)
        self.assertEqual(res.data['current_rentals'], None)
        self.assertEqual(
            res.data['issues'],
            [{"type": "The subscriber has rent issues."}]
        )

        # sub has one active rental
        book = erp_factories.AvailableBookFactory()
        erp_models.Rental.objects.create(user=sub.user, book=book)

        res = self.client.get(
            path='/api/rent/%s/' % self.sub.pk,
            format='json',
            HTTP_AUTHORIZATION='Token %s' % self.lib_token,
        )

        self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(res.data['can_rent'], False)
        self.assertEqual(res.data.get('nb_books_allowed'), 0)
        self.assertEqual(
            res.data['current_rentals'],
            [{"title": book.generic_book.title,
              "date_of_return": rental_due_for,}]
        )
        self.assertEqual(
            res.data['issues'],
            [{"type": "The subscriber has rent issues."}]
        )
Ejemplo n.º 6
0
    def test_book_available_copy_genericbook(self):
        gbook = self.gbook
        book = erp_factories.AvailableBookFactory()

        res = self.client.post(
            path='/api/reserve/%s/' % self.sub.id,
            data={'genericbook_id': gbook.id},
            format='json',
            HTTP_AUTHORIZATION='Token %s' % self.lib_token,
        )

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertContains(
            response=res,
            text="The book {gbook} ref {book_id} is booked for you, until {date_end_booking}".format(
                gbook=gbook,
                book_id=book.id,
                date_end_booking=date.today() + timedelta(days=settings.MAX_BOOKING_DAYS)
            )
        )
    def test_serialize_valid_book(self):
        book = erp_factories.AvailableBookFactory()

        book_ser = erp_serializers.BookSerializer(book)
        self.assertTrue('joined_library_on' in book_ser.data.keys())
        self.assertEqual(book_ser.data['status'], 'AVAILABLE')