Как проверить в юнит-тестах в Django, что в контексте ответа тот же заказ, который был создан перед тестом?
Напишите тест для OrderDetailView
.
Объявите класс тестов OrderDetailViewTestCase
.
В setUpClass
создайте пользователя и добавьте пользователю необходимые разрешения для просмотра заказа (“shopapp.view_order”).
Добавьте удаление пользователя в tearDownClass
.
При помощи метода setUp
сделайте вход пользователя и создание заказа для дальнейшего теста.
В методе tearDown
сделайте удаление заказа.
Объявите метод test_order_details
для проверки получения заказа:
- убедитесь, что в теле ответа есть адрес заказа;
- убедитесь, что в теле ответа есть промокод;
- убедитесь, что в контексте ответа тот же заказ, который был создан перед тестом (сравните по первичному ключу).
Это models.py
class Order(models.Model):
delivery_address = models.TextField(null=True, blank=True)
promocode = models.CharField(max_length=20, null=False, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.PROTECT)
products = models.ManyToManyField(Product, related_name="orders")
Это views.py:
class OrderDetailView(DetailView):
queryset = (
Order.objects
.select_related("user")
.prefetch_related("products")
)
Это tests.py:
from django.contrib.auth.models import User, Permission
from django.test import TestCase
from django.urls import reverse
from .models import Order
class OrderDetailViewTestCase(TestCase):
@classmethod
def setUpClass(cls):
cls.user = User.objects.create(username='test', password='qwerty')
permission_order = Permission.objects.get(codename='view_order')
cls.user.user_permissions.add(permission_order)
@classmethod
def tearDownClass(cls):
cls.user.delete()
def setUp(self) -> None:
self.client.force_login(self.user)
self.order = Order.objects.create(
delivery_address='ul Verona, d 13',
promocode='SALE_123',
user=self.user)
def tearDown(self) -> None:
self.order.delete()
def test_order_details(self):
response = self.client.get(reverse(
'shopapp:order_details',
kwargs={'pk': self.order.pk})
)
self.assertContains(response, self.order.delivery_address)
self.assertContains(response, self.order.promocode)
Не знаю, как проверить, что в контексте ответа тот же заказ, который был создан перед тестом. Прошу помощи