django-components/dev/examples/ab_testing/test_example_ab_testing.py

58 lines
2 KiB
Python

import pytest
from django.template import Context, Template
from django_components import registry, types
from django_components.testing import djc_test
def _import_components():
from docs.examples.ab_testing.component import OfferCard, OfferCardNew, OfferCardOld # noqa: PLC0415
registry.register("offer_card", OfferCard)
registry.register("offer_card_old", OfferCardOld)
registry.register("offer_card_new", OfferCardNew)
@pytest.mark.django_db
@djc_test
class TestABTesting:
def test_renders_old_version(self):
_import_components()
template_str: types.django_html = """
{% load component_tags %}
{% component "offer_card" use_new_version=False savings_percent=10 / %}
"""
template = Template(template_str)
rendered = template.render(Context({}))
assert "Special Offer!" in rendered
assert "10% off" in rendered
assert "FLASH SALE!" not in rendered
def test_renders_new_version(self):
_import_components()
template_str: types.django_html = """
{% load component_tags %}
{% component "offer_card" use_new_version=True savings_percent=25 / %}
"""
template = Template(template_str)
rendered = template.render(Context({}))
assert "FLASH SALE!" in rendered
assert "25% off" in rendered
assert "Special Offer!" not in rendered
def test_renders_random_version(self):
_import_components()
template_str: types.django_html = """
{% load component_tags %}
{% component "offer_card" savings_percent=15 / %}
"""
template = Template(template_str)
rendered = template.render(Context({}))
is_new = "FLASH SALE!" in rendered and "15% off" in rendered
is_old = "Special Offer!" in rendered and "15% off" in rendered
# Check that one and only one of the versions is rendered
assert (is_new and not is_old) or (is_old and not is_new)