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", )
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)
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)
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)
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."}] )
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')