Ejemplo n.º 1
0
def test_product_form_change_attributes(db, product, color_attribute):
    product_type = product.product_type
    text_attribute = Attribute.objects.create(slug="author", name="Author")
    product_type.product_attributes.add(text_attribute)
    color_value = color_attribute.values.first()
    new_author = "Main Tester"
    data = {
        "name": product.name,
        "price": product.price.amount,
        "category": product.category.pk,
        "description": "description",
        "attribute-{}-{}".format(text_attribute.slug, text_attribute.pk): new_author,
        "attribute-{}-{}".format(
            color_attribute.slug, color_attribute.pk
        ): color_value.pk,
    }

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    product = form.save()
    assert product.attributes[str(color_attribute.pk)] == str(color_value.pk)

    # Check that new attribute was created for author
    author_value = AttributeValue.objects.get(name=new_author)
    assert product.attributes[str(text_attribute.pk)] == str(author_value.pk)
Ejemplo n.º 2
0
def test_product_form_sanitize_product_description(product_type, category):
    product = Product.objects.create(name='Test Product',
                                     price=Money(10,
                                                 settings.DEFAULT_CURRENCY),
                                     description='',
                                     pk=10,
                                     product_type=product_type,
                                     category=category)
    data = model_to_dict(product)
    data['description'] = (
        '<b>bold</b><p><i>italic</i></p><h2>Header</h2><h3>subheader</h3>'
        '<blockquote>quote</blockquote>'
        '<p><a href="www.mirumee.com">link</a></p>'
        '<p>an <script>evil()</script>example</p>')
    data['price'] = 20

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    form.save()
    assert product.description == (
        '<b>bold</b><p><i>italic</i></p><h2>Header</h2><h3>subheader</h3>'
        '<blockquote>quote</blockquote>'
        '<p><a href="www.mirumee.com">link</a></p>'
        '<p>an &lt;script&gt;evil()&lt;/script&gt;example</p>')
    assert product.seo_description == (
        'bolditalicHeadersubheaderquotelinkan evil()example')
Ejemplo n.º 3
0
def test_product_form_change_attributes(db, product, color_attribute):
    product_type = product.product_type
    text_attribute = Attribute.objects.create(slug="author", name="Author")
    product_type.product_attributes.add(text_attribute)
    color_value = color_attribute.values.first()
    new_author = "Main Tester"
    data = {
        "name":
        product.name,
        "price_0":
        product.price.amount,
        "price_1":
        product.price.currency,
        "category":
        product.category.pk,
        "description":
        "description",
        "attribute-{}-{}".format(text_attribute.slug, text_attribute.pk):
        new_author,
        "attribute-{}-{}".format(color_attribute.slug, color_attribute.pk):
        color_value.pk,
    }

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    product = form.save()
    assert product.attributes[str(color_attribute.pk)] == [str(color_value.pk)]

    # Check that new attribute was created for author
    author_value = AttributeValue.objects.get(name=new_author)
    assert product.attributes[str(text_attribute.pk)] == [str(author_value.pk)]
Ejemplo n.º 4
0
def test_product_form_seo_description_too_long(unavailable_product):
    description = (
        "Saying it fourth made saw light bring beginning kind over herb "
        "won't creepeth multiply dry rule divided fish herb cattle greater "
        "fly divided midst, gathering can't moveth seed greater subdue. "
        "Lesser meat living fowl called. Dry don't wherein. Doesn't above "
        "form sixth. Image moving earth without forth light whales. Seas "
        "were first form fruit that form they're, shall air. And. Good of"
        "signs darkness be place. Was. Is form it. Whose. Herb signs stars "
        "fill own fruit wherein. "
        "Don't set man face living fifth Thing the whales were. "
        "You fish kind. "
        "Them, his under wherein place first you night gathering."
    )

    data = model_to_dict(unavailable_product)
    data["price"] = 20
    data["description"] = description

    form = ProductForm(data, instance=unavailable_product)
    assert form.is_valid()

    form.save()
    new_seo_description = unavailable_product.seo_description
    assert len(new_seo_description) <= 300
    assert new_seo_description.startswith(
        "Saying it fourth made saw light bring beginning kind over herb "
        "won't creepeth multiply dry rule divided fish herb cattle greater "
        "fly divided midst, gathering can't moveth seed greater subdue. "
        "Lesser meat living fowl called. Dry don't wherein. Doesn't above "
        "form sixth. Image moving earth without"
    )
    assert new_seo_description.endswith("...") or new_seo_description[-1] == "…"
Ejemplo n.º 5
0
def test_product_form_change_attributes(db, product, color_attribute):
    product_type = product.product_type
    text_attribute = Attribute.objects.create(
        slug='author', name='Author')
    product_type.product_attributes.add(text_attribute)
    color_value = color_attribute.values.first()
    new_author = 'Main Tester'
    data = {
        'name': product.name,
        'price': product.price.amount,
        'category': product.category.pk,
        'description': 'description',
        'attribute-{}-{}'.format(
            text_attribute.slug, text_attribute.pk): new_author,
        'attribute-{}-{}'.format(
            color_attribute.slug, color_attribute.pk): color_value.pk}

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    product = form.save()
    assert product.attributes[str(color_attribute.pk)] == str(color_value.pk)

    # Check that new attribute was created for author
    author_value = AttributeValue.objects.get(name=new_author)
    assert product.attributes[str(text_attribute.pk)] == str(author_value.pk)
Ejemplo n.º 6
0
def test_product_form_change_attributes(db, product, color_attribute):
    product_type = product.product_type
    text_attribute = Attribute.objects.create(slug="author", name="Author")
    product_type.product_attributes.add(text_attribute)
    color_value = color_attribute.values.first()
    new_author = "Main Tester"
    data = {
        "name": product.name,
        "price_0": product.price.amount,
        "price_1": product.price.currency,
        "category": product.category.pk,
        "description": "description",
        "attribute-{}-{}".format(text_attribute.slug, text_attribute.pk): new_author,
        "attribute-{}-{}".format(
            color_attribute.slug, color_attribute.pk
        ): color_value.pk,
    }

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    product = form.save()
    db_attributes_map = generate_attribute_map(product)

    author_value = AttributeValue.objects.filter(name=new_author).first()
    assert author_value is not None, "The author value was not created"

    expected_attribute_map = {
        color_attribute.pk: {color_value.pk},
        text_attribute.pk: {author_value.pk},
    }
    assert db_attributes_map == expected_attribute_map
Ejemplo n.º 7
0
def test_product_form_sanitize_product_description(product_type, category, settings):
    product = Product.objects.create(
        name="Test Product",
        price=Money(10, settings.DEFAULT_CURRENCY),
        description="",
        pk=10,
        product_type=product_type,
        category=category,
    )
    data = model_to_dict(product)
    data["description"] = (
        "<b>bold</b><p><i>italic</i></p><h2>Header</h2><h3>subheader</h3>"
        "<blockquote>quote</blockquote>"
        '<p><a href="www.mirumee.com">link</a></p>'
        "<p>an <script>evil()</script>example</p>"
    )
    data["price"] = 20

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    form.save()
    assert product.description == (
        "<b>bold</b><p><i>italic</i></p><h2>Header</h2><h3>subheader</h3>"
        "<blockquote>quote</blockquote>"
        '<p><a href="www.mirumee.com">link</a></p>'
        "<p>an &lt;script&gt;evil()&lt;/script&gt;example</p>"
    )
    assert product.seo_description == (
        "bolditalicHeadersubheaderquotelinkan evil()example"
    )
Ejemplo n.º 8
0
def test_product_form_sanitize_product_description(product_type, category, settings):
    product = Product.objects.create(
        name="Test Product",
        price=Money(10, settings.DEFAULT_CURRENCY),
        description="",
        pk=10,
        product_type=product_type,
        category=category,
    )
    data = model_to_dict(product)
    data["description"] = (
        "<b>bold</b><p><i>italic</i></p><h2>Header</h2><h3>subheader</h3>"
        "<blockquote>quote</blockquote>"
        '<p><a href="www.mirumee.com">link</a></p>'
        "<p>an <script>evil()</script>example</p>"
    )
    data["price_0"] = 20
    data["price_1"] = "USD"

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    form.save()
    assert product.description == (
        "<b>bold</b><p><i>italic</i></p><h2>Header</h2><h3>subheader</h3>"
        "<blockquote>quote</blockquote>"
        '<p><a href="www.mirumee.com">link</a></p>'
        "<p>an &lt;script&gt;evil()&lt;/script&gt;example</p>"
    )
    assert product.seo_description == (
        "bolditalicHeadersubheaderquotelinkan evil()example"
    )
Ejemplo n.º 9
0
def test_set_product_description_too_long_for_seo(unavailable_product):
    description = (
        'Saying it fourth made saw light bring beginning kind over herb '
        'won\'t creepeth multiply dry rule divided fish herb cattle greater '
        'fly divided midst, gathering can\'t moveth seed greater subdue. '
        'Lesser meat living fowl called. Dry don\'t wherein. Doesn\'t above '
        'form sixth. Image moving earth without forth light whales. Seas '
        'were first form fruit that form they\'re, shall air. And. Good of'
        'signs darkness be place. Was. Is form it. Whose. Herb signs stars '
        'fill own fruit wherein. '
        'Don\'t set man face living fifth Thing the whales were. '
        'You fish kind. '
        'Them, his under wherein place first you night gathering.')

    data = model_to_dict(unavailable_product)
    data['price'] = 20
    data['description'] = description

    form = ProductForm(data, instance=unavailable_product)

    assert form.is_valid()
    form.save()

    assert len(unavailable_product.seo_description) <= 300
    assert unavailable_product.seo_description == (
        'Saying it fourth made saw light bring beginning kind over herb '
        'won\'t creepeth multiply dry rule divided fish herb cattle greater '
        'fly divided midst, gathering can\'t moveth seed greater subdue. '
        'Lesser meat living fowl called. Dry don\'t wherein. Doesn\'t above '
        'form sixth. Image moving earth without f...'
    )
Ejemplo n.º 10
0
def test_product_form_seo_description_too_long(unavailable_product):
    description = (
        'Saying it fourth made saw light bring beginning kind over herb '
        'won\'t creepeth multiply dry rule divided fish herb cattle greater '
        'fly divided midst, gathering can\'t moveth seed greater subdue. '
        'Lesser meat living fowl called. Dry don\'t wherein. Doesn\'t above '
        'form sixth. Image moving earth without forth light whales. Seas '
        'were first form fruit that form they\'re, shall air. And. Good of'
        'signs darkness be place. Was. Is form it. Whose. Herb signs stars '
        'fill own fruit wherein. '
        'Don\'t set man face living fifth Thing the whales were. '
        'You fish kind. '
        'Them, his under wherein place first you night gathering.')

    data = model_to_dict(unavailable_product)
    data['price'] = 20
    data['description'] = description

    form = ProductForm(data, instance=unavailable_product)
    assert form.is_valid()

    form.save()
    new_seo_description = unavailable_product.seo_description
    assert len(new_seo_description) <= 300
    assert new_seo_description.startswith(
        'Saying it fourth made saw light bring beginning kind over herb '
        'won\'t creepeth multiply dry rule divided fish herb cattle greater '
        'fly divided midst, gathering can\'t moveth seed greater subdue. '
        'Lesser meat living fowl called. Dry don\'t wherein. Doesn\'t above '
        'form sixth. Image moving earth without')
    assert (new_seo_description.endswith('...')
            or new_seo_description[-1] == '…')
Ejemplo n.º 11
0
def test_product_form_without_category(product_without_category):
    data = model_to_dict(product_without_category)
    data["price_0"] = 20
    data["price_1"] = "USD"
    data["description"] = "Test description"

    form = ProductForm(data, instance=product_without_category)
    assert form.is_valid()
    assert form.errors == {}

    form.save()
    assert not product_without_category.is_published
Ejemplo n.º 12
0
def test_product_form_publish_product_without_category(product_without_category):
    product_without_category.is_published = True
    data = model_to_dict(product_without_category)
    data["price_0"] = 20
    data["price_1"] = "USD"
    data["description"] = "Test description"

    form = ProductForm(data, instance=product_without_category)
    assert not form.is_valid()
    assert form.errors == {
        "is_published": ["You must select a category to be able to publish"]
    }
Ejemplo n.º 13
0
def test_assign_collection_to_product(product):
    collection = Collection.objects.create(name='test_collections')
    data = {
        'name': product.name,
        'price': product.price.amount,
        'category': product.category.pk,
        'description': 'description',
        'collections': [collection.pk]}
    form = ProductForm(data, instance=product)
    assert form.is_valid()
    form.save()
    assert product.collections.first().name == 'test_collections'
    assert collection.products.first().name == product.name
Ejemplo n.º 14
0
def test_assign_collection_to_product(product):
    collection = Collection.objects.create(name='test_collections')
    data = {
        'name': product.name,
        'price': product.price.amount,
        'category': product.category.pk,
        'description': 'description',
        'collections': [collection.pk]
    }
    form = ProductForm(data, instance=product)
    assert form.is_valid()
    form.save()
    assert product.collections.first().name == 'test_collections'
    assert collection.products.first().name == product.name
Ejemplo n.º 15
0
def test_product_form_seo_description(unavailable_product):
    seo_description = (
        "This is a dummy product. "
        "HTML <b>shouldn't be removed</b> since it's a simple text field.")
    data = model_to_dict(unavailable_product)
    data["price"] = 20
    data["description"] = "a description"
    data["seo_description"] = seo_description

    form = ProductForm(data, instance=unavailable_product)
    assert form.is_valid()

    form.save()
    assert unavailable_product.seo_description == seo_description
Ejemplo n.º 16
0
def test_product_form_seo_description(unavailable_product):
    seo_description = (
        'This is a dummy product. '
        'HTML <b>shouldn\'t be removed</b> since it\'s a simple text field.')
    data = model_to_dict(unavailable_product)
    data['price'] = 20
    data['description'] = 'a description'
    data['seo_description'] = seo_description

    form = ProductForm(data, instance=unavailable_product)
    assert form.is_valid()

    form.save()
    assert unavailable_product.seo_description == seo_description
Ejemplo n.º 17
0
def test_set_product_seo_description(unavailable_product):
    seo_description = (
        'This is a dummy product. '
        'HTML <b>shouldn\'t be removed</b> since it\'s a simple text field.')
    data = model_to_dict(unavailable_product)
    data['price'] = 20
    data['description'] = 'a description'
    data['seo_description'] = seo_description

    form = ProductForm(data, instance=unavailable_product)

    assert form.is_valid()
    form.save()
    assert unavailable_product.seo_description == seo_description
Ejemplo n.º 18
0
def test_product_form_seo_description(unavailable_product):
    seo_description = (
        "This is a dummy product. "
        "HTML <b>shouldn't be removed</b> since it's a simple text field."
    )
    data = model_to_dict(unavailable_product)
    data["price"] = 20
    data["description"] = "a description"
    data["seo_description"] = seo_description

    form = ProductForm(data, instance=unavailable_product)
    assert form.is_valid()

    form.save()
    assert unavailable_product.seo_description == seo_description
Ejemplo n.º 19
0
def test_product_form_assign_collection_to_product(product):
    collection = Collection.objects.create(name="test_collections")
    data = {
        "name": product.name,
        "price": product.price.amount,
        "category": product.category.pk,
        "description": "description",
        "collections": [collection.pk],
    }

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    form.save()
    assert product.collections.first().name == "test_collections"
    assert collection.products.first().name == product.name
Ejemplo n.º 20
0
def test_product_form_assign_collection_to_product(product):
    collection = Collection.objects.create(name="test_collections")
    data = {
        "name": product.name,
        "price": product.price.amount,
        "category": product.category.pk,
        "description": "description",
        "collections": [collection.pk],
    }

    form = ProductForm(data, instance=product)
    assert form.is_valid()

    form.save()
    assert product.collections.first().name == "test_collections"
    assert collection.products.first().name == product.name
Ejemplo n.º 21
0
def test_sanitize_product_description(product_type, default_category):
    product = Product.objects.create(
        name='Test Product', price=10, description='', pk=10,
        product_type=product_type, category=default_category)
    data = model_to_dict(product)
    data['description'] = (
        '<b>bold</b><p><i>italic</i></p><h2>Header</h2><h3>subheader</h3>'
        '<blockquote>quote</blockquote>'
        '<p><a href="www.mirumee.com">link</a></p>'
        '<p>an <script>evil()</script>example</p>')
    data['price'] = 20
    form = ProductForm(data, instance=product)
    assert form.is_valid()
    form.save()
    assert product.description == (
        '<b>bold</b><p><i>italic</i></p><h2>Header</h2><h3>subheader</h3>'
        '<blockquote>quote</blockquote><p><a href="www.mirumee.com">link</a></p>'
        '<p>an &lt;script&gt;evil()&lt;/script&gt;example</p>')
Ejemplo n.º 22
0
def test_change_attributes_in_product_form(db, product_in_stock,
                                           color_attribute):
    product = product_in_stock
    product_class = product.product_class
    text_attribute = ProductAttribute.objects.create(slug='author',
                                                     name='Author')
    product_class.product_attributes.add(text_attribute)
    color_value = color_attribute.values.first()
    new_author = 'Main Tester'
    new_color = color_value.pk
    data = {'name': product.name,
            'price': product.price.gross,
            'categories': [c.pk for c in product.categories.all()],
            'description': 'description',
            'attribute-author': new_author,
            'attribute-color': new_color}
    form = ProductForm(data, instance=product)
    assert form.is_valid()
    product = form.save()
    assert product.get_attribute(color_attribute.pk) == smart_text(new_color)
    assert product.get_attribute(text_attribute.pk) == new_author
Ejemplo n.º 23
0
def test_product_form_seo_description_too_long(unavailable_product):
    description = (
        "Saying it fourth made saw light bring beginning kind over herb "
        "won't creepeth multiply dry rule divided fish herb cattle greater "
        "fly divided midst, gathering can't moveth seed greater subdue. "
        "Lesser meat living fowl called. Dry don't wherein. Doesn't above "
        "form sixth. Image moving earth without forth light whales. Seas "
        "were first form fruit that form they're, shall air. And. Good of"
        "signs darkness be place. Was. Is form it. Whose. Herb signs stars "
        "fill own fruit wherein. "
        "Don't set man face living fifth Thing the whales were. "
        "You fish kind. "
        "Them, his under wherein place first you night gathering."
    )

    data = model_to_dict(unavailable_product)
    data["price_0"] = 20
    data["price_1"] = "USD"
    data["description"] = description

    form = ProductForm(data, instance=unavailable_product)
    form.is_valid()
    assert form.errors == {}

    form.save()
    new_seo_description = unavailable_product.seo_description
    assert len(new_seo_description) <= 300
    assert new_seo_description.startswith(
        "Saying it fourth made saw light bring beginning kind over herb "
        "won't creepeth multiply dry rule divided fish herb cattle greater "
        "fly divided midst, gathering can't moveth seed greater subdue. "
        "Lesser meat living fowl called. Dry don't wherein. Doesn't above "
        "form sixth. Image moving earth without"
    )
    assert new_seo_description.endswith("...") or new_seo_description[-1] == "…"
Ejemplo n.º 24
0
def test_change_attributes_in_product_form(db, product, color_attribute):
    product_type = product.product_type
    text_attribute = ProductAttribute.objects.create(
        slug='author', name='Author')
    product_type.product_attributes.add(text_attribute)
    color_value = color_attribute.values.first()
    new_author = 'Main Tester'
    data = {
        'name': product.name,
        'price': product.price.amount,
        'category': product.category.pk,
        'description': 'description',
        'attribute-author': new_author,
        'attribute-color': color_value.pk}
    form = ProductForm(data, instance=product)
    assert form.is_valid()
    product = form.save()
    assert product.attributes[str(color_attribute.pk)] == str(color_value.pk)

    # Check that new attribute was created for author
    author_value = AttributeChoiceValue.objects.get(name=new_author)
    assert product.attributes[str(text_attribute.pk)] == str(author_value.pk)
Ejemplo n.º 25
0
def test_change_attributes_in_product_form(db, product_in_stock,
                                           color_attribute):
    product = product_in_stock
    product_class = product.product_class
    text_attribute = ProductAttribute.objects.create(slug='author',
                                                     name='Author')
    product_class.product_attributes.add(text_attribute)
    color_value = color_attribute.values.first()
    new_author = 'Main Tester'
    new_color = color_value.pk
    data = {'name': product.name,
            'price': product.price.gross,
            'categories': [c.pk for c in product.categories.all()],
            'description': 'description',
            'attribute-author': new_author,
            'attribute-color': new_color}

    form = ProductForm(data, instance=product)
    assert form.is_valid()
    product = form.save()
    assert product.get_attribute(color_attribute.pk) == smart_text(new_color)
    assert product.get_attribute(text_attribute.pk) == new_author
Ejemplo n.º 26
0
def test_sanitize_product_description(product_type, default_category):
    product = Product.objects.create(name='Test Product',
                                     price=10,
                                     description='',
                                     pk=10,
                                     product_type=product_type,
                                     category=default_category)
    data = model_to_dict(product)
    data['description'] = ('<b>bold</b><p><i>italic</i></p><h2>Header</h2>'
                           '<h3>subheader</h3><blockquote>quote</blockquote>'
                           '<p><a href="www.mirumee.com">link</a></p>'
                           '<p>an <script>evil()</script>example</p>')
    data['price'] = 20
    form = ProductForm(data, instance=product)
    assert form.is_valid()
    form.save()
    assert product.description == ('<b>bold</b><p><i>italic</i></p>'
                                   '<h2>Header</h2><h3>subheader</h3>'
                                   '<blockquote>quote</blockquote>'
                                   '<p><a href="www.mirumee.com">link</a></p>'
                                   '<p>an &lt;script&gt;evil()&lt;/script&gt;'
                                   'example</p>')