Как разместить данные в ModelForm при тестировании assertRedirects

Я пытаюсь протестировать правильное перенаправление после отправки данных с помощью ModelForm. В моем представлении, если form.is_valid() равна True, форма сохраняется и представление перенаправляется на домашнюю страницу.

Мой test_forms.py выглядит следующим образом:

class TestForms(TestCase):

    def setUp(self):

        # imitacja witryny
        self.client = Client()

        self.tag = Tag.objects.create(
            name='Bull flag'
        )

        self.data = {
            'ticker': 'FB',
            'exchange': 'NASDAQ',
            'buy_point': 121,
            'stop_loss': 120,
            'description': 'ciamciaramcia',
            'tags': [self.tag]
        }

        self.form = StockTradeForm(self.data)

    def test_stock_trade_form_valid_data(self):

        self.assertTrue(self.form.is_valid()) # OK

        self.form.save()
        self.assertEqual(StockTrade.objects.count(), 1) # OK after self.form.save()
        self.assertTrue(StockTrade.objects.filter(ticker='FB').exists()) # OK after self.form.save()

    def test_stock_trade_form_valid_redirect(self):

        response = self.client.post(reverse('create-trade'), self.data)
        print(response) # print result: .<HttpResponse status_code=200, "text/html; charset=utf-8">

        self.assertTemplateUsed(response, 'journal/create_trade.html') # OK
        self.assertEquals(response.status_code, 200) # OK

        self.assertRedirects(
            response, reverse('index'),
            status_code=200
        ) # Failure:
#         in assertRedirects
#     url = response.url
# AttributeError: 'HttpResponse' object has no attribute 'url'

Не следует

response = self.client.post(reverse('create-trade'), self.data)

имитировать действительную и сохраненную форму?

Имя моего представления: create_trade

Url выглядит следующим образом:

urlpatterns = [
    path('', views.index, name='index'),
    path('display-trade/<str:pk>', views.display_trade, name='display-trade'),
    path('create-trade', views.create_trade, name='create-trade'),
    path('update-trade/<str:pk>', views.update_trade, name='update-trade')
]

Меня беспокоят эти два теста

self.assertTemplateUsed(response, 'journal/create_trade.html') # OK
self.assertEquals(response.status_code, 200) # OK

Правильно ли, что после self.client.post assertTemplateUsed ответ равен 'journal/create_trade.html' и status_code равен 200? Я много чего пробовал с self.client.post, но у меня ничего не работает. Какой правильный способ тестирования assertRedirects с ModelForm?

Вернуться на верх