Как разместить данные в 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?