У меня есть рабочий, действительный тест для проекта django, dummy_book
и test_profile
оба прибора. Обратите внимание, что у него есть два утверждения:
def test_correct_items_in_feed(client, dummy_book, test_profile):
some_author = dummy_book.author_set.first()
# profile subscribes to author
Subscription.attempt_addition_by_id(test_profile, some_author.vendor_id)
client.login(username=test_profile.user.username, password="somepassword")
test_profile.save()
# wants fiction books, feed requested
requested_url = reverse("personal_feed", args=[test_profile.auth_token])
resp = client.get(requested_url, follow=True)
assert dummy_book.title in str(resp.content)
# user no longer wants fiction books, feed requested
test_profile.notify_fiction = False
test_profile.save()
resp = client.get(f"/users/feeds/{test_profile.auth_token}", follow=True)
assert dummy_book.title not in str(resp.content)
Теперь я хочу реализовать способ проверки двух разных test_profile
s:
one test_premium_profile
разрешено фильтровать Book
с по типу (обратите внимание на атрибут модели test_profile.notify_fiction
)
Другой test_free_profile
, которому НЕ разрешено фильтровать Book
с по типу
У меня уже есть логи c для вышеперечисленного, которая просто игнорирует предпочтения test_free_profile
в отношении этого атрибута.
Проблема здесь заключается в том, что для этих двух разных профилей нам нужно утверждать разные утверждения. В частности, для test_free_profile
dummy_book.title
должно быть в resp.content
в обоих сценариях ios, а для test_premium_profile
оно должно быть только в первом сценарии.
Как я могу расположить эти разные утверждения для обоих типов Profile
s, без дублирования этого теста и кода в нем?
Я знаю, что одно более простое решение - разделить этот тест на два, но меня это не интересует и ради образования, о котором не может быть и речи.