Тестирование Django
Подскажите пожалуйста правильно ли написан тест. Заранее спасибо
from django.test import Client
from unittest import TestCase
import datetime as dt
# Create your tests here.
# Задание
# Напишите тесты для проверки страницы сайта с тарифными планами.
# Проверьте, что:
# - главная страница доступна неавторизованному пользователю, а раздел администратора — нет
# - переменная plans есть в контексте шаблона
# - имя шаблона, который вызывается при рендеринге главной страницы — index.html
# - тип переменной plans — это список, состоящий из 3-х элементов, а их тип — словарь
# - на результирующей странице показываются названия тарифных планов и подставляется правильная тема (subject) в ссылку на кнопке "Связаться"
# - в контекстных переменных шаблона присутствует текущий год и он же правильно появляется на странице
class PlansPageTest(TestCase):
def setUp(self):
""" Функция где создаём тестового пользователя"""
self.client = Client()
self.user = User.objects.create_user(
username="sarah",
email="[email protected]",
password="12345"
)
plans = [
{
"name": "Бесплатно",
"price": "0",
"options": {"users": 10, "space": 10, "support": "Почтовая рассылка"},
},
{
"name": "Профессиональный",
"price": "49",
"options": {"users": 50, "space": 100, "support": "Телефон и email"},
},
{
"name": "Корпоративный",
"price": "99",
"options": {"users": 100, "space": 500, "support": "Персональный менеджер"},
},
]
def testPageCodes(self):
"""
тест для проверки доступа неавторизованного
пользователя к главной странице и админке
"""
response_index = self.client.get("index/")
response_admin = self.client.get("/admin/")
self.assertEqual(response_index.status_code, 200)
self.assertEqual(response_admin.status_code, 403)
def testIndexContext(self):
"""
тест для проверки на наличие
переменной plans в контексте шаблона
"""
response = self.client.get("index/")
self.assertEqual(response, plans)
def testIndexTemplate(self):
"""
имя шаблона, который вызывается при
рендеринге главной страницы — index.html
"""
response = self.client.get("index")
self.assertEqual(response, "index")
def testIndexPlans(self):
"""
тип переменной plans — это список,
состоящий из 3-х элементов, а их тип — словарь
"""
response = self.client.get("index")
self.assertEqual(len(response.context["plans"]), 3)
self.assertIsInstance(response.context["plans"], dict)
def testIndexContent(self):
"""
на результирующей странице показываются названия
тарифных планов и подставляется правильная тема (subject)
в ссылку на кнопке "Связаться"
"""
response = self.client.get('index')
self.assertIsInstance(response.content['plans'], plans)
self.assertIn(response.content, f"mailto:[email protected]?subject={plan['name']})
# Проверяйте вхождение строки f"mailto:[email protected]?subject={plan['name']}"
def testContextProcessor(self):
"""
в контекстных переменных шаблона присутствует
текущий год и он же правильно появляется на странице
"""
today = dt.datetime.today().year
response = self.client.get('index')
self.assertEqual(response.context['year'], today)
И как передать plans в тест если он находится во вьюхе?
def index(request):
# Доступные тарифные планы
plans = [
{
"name": "Бесплатно",
"price": "0",
"options": {"users": 10, "space": 10, "support": "Почтовая рассылка"},
},
{
"name": "Профессиональный",
"price": "49",
"options": {"users": 50, "space": 100, "support": "Телефон и email"},
},
{
"name": "Корпоративный",
"price": "99",
"options": {"users": 100, "space": 500, "support": "Персональный менеджер"},
},
]
return render(request, "index.html", {"plans": plans})