Три функции python заменить одним методом
Есть три функции:
def test_post_index_page_show_correct_context(self):
"""Проверяем Context страницы index"""
response = self.authorized_client.get(reverse('posts:index'))
first_object = response.context['page_obj'][0]
context_objects = {
self.author.id: first_object.author.id,
self.post.text: first_object.text,
self.group.slug: first_object.group.slug,
self.post.id: first_object.id,
}
for reverse_name, response_name in context_objects.items():
with self.subTest(reverse_name=reverse_name):
self.assertEqual(response_name, reverse_name)
def test_post_posts_groups_page_show_correct_context(self):
"""Проверяем Context страницы posts_groups"""
response = self.authorized_client.get(
reverse('posts:group_list', kwargs={'slug': self.group.slug}))
first_object = response.context['page_obj'][0]
context_objects = {
self.author.id: first_object.author.id,
self.post.text: first_object.text,
self.group.slug: first_object.group.slug,
self.post.id: first_object.id,
}
for reverse_name, response_name in context_objects.items():
with self.subTest(reverse_name=reverse_name):
self.assertEqual(response_name, reverse_name)
def test_post_profile_page_show_correct_context(self):
"""Проверяем Context страницы profile"""
response = self.authorized_client.get(
reverse('posts:profile', kwargs={
'username': self.author.username}))
first_object = response.context['page_obj'][0]
context_objects = {
self.author.id: first_object.author.id,
self.post.text: first_object.text,
self.group.slug: first_object.group.slug,
self.post.id: first_object.id,
}
for reverse_name, response_name in context_objects.items():
with self.subTest(reverse_name=reverse_name):
self.assertEqual(response_name, reverse_name)
Нужно заменить их одним методом по принципу DRY. Ревьюер в проекте мне указал: Ревьюер пишет: "Код проверок контекста дублируется - проверку контекста можно вынести в отдельный метод и вызвать в самих тестах". Помогите, как это сделать?
Ответы (2 шт):
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
Так:
def test_post_posts_groups_page_show_correct_context(self):
"""Проверяем Context страницы posts_groups"""
response = self.authorized_client.get(
reverse('posts:group_list', kwargs={'slug': self.group.slug}))
self.check_context_is_correct(response)
def check_context_is_correct(self, response):
first_object = response.context['page_obj'][0]
context_objects = {
self.author.id: first_object.author.id,
self.post.text: first_object.text,
self.group.slug: first_object.group.slug,
self.post.id: first_object.id,
}
for reverse_name, response_name in context_objects.items():
with self.subTest(reverse_name=reverse_name):
self.assertEqual(response_name, reverse_name)
Автор решения: Давид Князев
→ Ссылка
Я попробовал так, посмотрим, что ревьюер ответит:
def exttest_post_index_group_profile_page_show_correct_cont(self):
"""Проверяем Context страницы index, group, profile"""
context = [
self.authorized_client.get(reverse('posts:index')),
self.authorized_client.get(reverse(
'posts:group_list', kwargs={'slug': self.group.slug})),
self.authorized_client.get(reverse(
'posts:profile', kwargs={'username': self.author.username})),
]
for response in context:
first_object = response.context['page_obj'][0]
context_objects = {
self.author.id: first_object.author.id,
self.post.text: first_object.text,
self.group.slug: first_object.group.slug,
self.post.id: first_object.id,
}
for reverse_name, response_name in context_objects.items():
with self.subTest(reverse_name=reverse_name):
self.assertEqual(response_name, reverse_name)