Я пишу тестовый пример для приложения Posts в моем проекте Django. Я определил виды для добавления нового сообщения, перечисления сообщений, просмотра сведений о сообщении, редактирования сообщения и удаления сообщения. Добавление нового сообщения перенаправляет страницу в подробный вид этой страницы, а удаление сообщения перенаправляет страницу в представление списка. При написании тестов для того же самого я получаю код ответа https 302 для нового сообщения, как и ожидалось, но для сообщения об удалении я получаю только ответ https 200, хотя он должен быть 302.
Добавление необходимого коданиже. Пожалуйста, не стесняйтесь спрашивать больше кода, связанного с этим, если это необходимо.
Есть ли какая-то концепция, которую я упускаю? Любое руководство приветствуется.
Заранее спасибо.
Test.py
from django.test import TestCase
from .models import Post
from django.urls import reverse, reverse_lazy
class PostTest(TestCase):
def setUp(self):
'''This function inserts
dummy data into database
to check during testing'''
self.post = Post.objects.create(title='Test', content='abcd', author='testauthor@testing.test')
def test_post_content(self):
post_object = Post.objects.get(pk=1)
expected_object_title = f'{post_object.title}'
expected_object_content = f'{post_object.content}'
expected_object_author = f'{post_object.author}'
self.assertEqual(expected_object_title,'Test')
self.assertEqual(expected_object_content, 'abcd')
return self.assertEqual(expected_object_author, 'testauthor@testing.test')
def test_post_list_view(self):
response = self.client.get(reverse('lists'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'Test')
self.assertTemplateUsed(response, 'index.html')
def test_post_details(self):
response = self.client.get('/detail/1/')
no_response = self.client.get('/detail/100/')
self.assertEqual(response.status_code, 200)
self.assertEqual(no_response.status_code, 404)
self.assertContains(response, 'abcd')
self.assertTemplateUsed(response, 'detailed.html')
def test_newpost_view(self):
response = self.client.post(reverse('addpost'),{
'title' : 'New title',
'content' : 'New Content',
'author' : 'test@gmail.com',
})
self.assertEqual(response.status_code, 302)
#self.assertContains(response,'New Content')
def test_post_update_view(self):
response = self.client.post(reverse('update', args='1'),{
'title': 'Updated title',
'content' : 'Updated content',
})
self.assertContains(response, 'Updated title')
self.assertEqual(response.status_code, 200)
def test_postdelete_view(self):
response = self.client.get(reverse('delete',args='1'))
self.assertEqual(response.status_code,302)
views.py
from django.shortcuts import render
from django.views.generic import ListView, DetailView
from django.views.generic.edit import CreateView,UpdateView, DeleteView
from django.urls import reverse,reverse_lazy
from .models import Post
class ListingView(ListView):
model = Post
template_name = 'index.html'
context_object_name = 'list_of_posts'
class DetailedListView(DetailView):
model = Post
template_name = 'detailed.html'
class AddPostView(CreateView):
model = Post
template_name = 'addpost.html'
fields = ['title','author', 'content']
class PostUpdateView(UpdateView):
model = Post
template_name = 'update.html'
fields = ['title', 'author', 'content']
class DeletePostView(DeleteView):
model = Post
template_name = 'deleteview.html'
success_url = reverse_lazy('lists')
Models.py
from django.db import models
from django.urls import reverse
class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
author = models.EmailField()
def __str__(self):
return self.title[:30]
def get_absolute_url(self):
return reverse('detailed', args=[str(self.id)])