Django Тестирование view
Тестирую view. Есть задача от ревьювера как должно быть выполнено тестирование, нет понимания как это должно выглядеть в коде. Прошу подсказать, как это можно реализовать?
- Нужно в контекстах проверять то что у нас передается в контекст во вьюхах. Весь код повторяется в 4 тестах: индекс, группа, профайл, пост_детаил. Нужно создать функцию, которая не будет начинаться со слова тест. Функция принимает 2 значения по мимо self: запрос, и булеву переменную, по умолчанию она равна False. Если это переменная True то из контекста достаем post, иначе достаем page_obj и пошли сравнивать всё: автора, группу, текст и дату. В тесте пост_детаил в вызов функции передаём булево значение True, в остальных 3 ничего не передаём. По мимо этого в профайле и группе отдельно тестим автора и группу соответственно.
- Нужен тест что пост не попал не в ту группу:
- создать пост с группой из сетапа, создать группу, сделать респонс на новую группу,
- проверить что пагинатор у неё пустой, проверить что у поста есть группа,
- сделать запрос на старую группу и убедиться что пост там есть.
- Нужен тест контекста креате и эдит - создать кортеж с именами и аргументами, пройтись циклом-сабтестом, проверить что форма есть - ассертиин, что форма это ПостФорма - ассертИсИнстансе, дальше пройтись по формам и проверить поля в цикле сабтесте. Код VIEW
def index(request):
post = Post.objects.select_related('group', 'author')
page_obj = get_page_context(post, request)
context = {'page_obj': page_obj, }
return render(request, 'posts/index.html', context)
def group_posts(request, slug):
group = get_object_or_404(Group, slug=slug)
posts = group.posts.select_related('author')
page_obj = get_page_context(posts, request)
context = {
'group': group,
'page_obj': page_obj,
}
return render(request, 'posts/group_list.html', context)
def profile(request, username):
post_author = get_object_or_404(User, username=username)
posts = post_author.posts.select_related('group')
page_obj = get_page_context(posts, request)
context = {
'page_obj': page_obj,
'post_author': post_author, }
return render(request, 'posts/profile.html', context)
def post_detail(request, post_id):
post = get_object_or_404(Post, id=post_id)
context = {
'post': post,
}
return render(request, 'posts/post_detail.html', context)
def post_create(request):
form = PostForm(request.POST or None)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('posts:profile', username=request.user)
return render(request, 'posts/create_post.html', {'form': form})
def post_edit(request, post_id):
post = get_object_or_404(Post, id=post_id)
if request.user != post.author:
return redirect('posts:post_detail')
form = PostForm(request.POST or None, instance=post)
if form.is_valid():
form.save()
return redirect('posts:post_detail', post_id=post_id)
context = {'form': form, }
return render(request, 'posts/create_post.html', context)