Hello, everyone.
I desperately need a help with my attempts to mock celery object.
So, here is more context.
- in my project I have a Celery functionality, final point of which is this piece of a code on a view level
def create(self, request, *args, **kwargs):
response = super().create(request, *args, **kwargs)
overdue_borrowing_notifications.delay()
return response
- and I am trying to mock Celery object within my test function:
@patch("celery.app.task.Task.delay", return_value=1)
@patch("celery.app.task.Task.apply_async", return_value=1)
def test_borrowing_create_not_allowed_if_zero_inventory(self, *args, **kwargs):
book = self.book_1
self.borrowing_1 = Borrowing.objects.create(
expected_return_date=datetime.now().date() + timedelta(days=25),
book=book,
user=self.user
)
book.inventory -= 1
book.save()
book.refresh_from_db()
self.borrowing_2 = Borrowing.objects.create(
expected_return_date=datetime.now().date() + timedelta(days=30),
book=book,
user=self.user2
)
book.inventory -= 1
book.save()
book.refresh_from_db()
payload = {
"expected_return_date": datetime.now().date() + timedelta(days=10),
"book": book.id,
"user": self.user3.id
}
response = self.client.post(BORROWING_URL, payload)
self.assertEquals(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEquals(
response.data["non_field_errors"][0],
"There are no books in inventory to borrow."
)