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)
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 <script>evil()</script>example</p>') assert product.seo_description == ( 'bolditalicHeadersubheaderquotelinkan evil()example')
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)]
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] == "…"
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)
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
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 <script>evil()</script>example</p>" ) assert product.seo_description == ( "bolditalicHeadersubheaderquotelinkan evil()example" )
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 <script>evil()</script>example</p>" ) assert product.seo_description == ( "bolditalicHeadersubheaderquotelinkan evil()example" )
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...' )
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] == '…')
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
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"] }
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
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
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
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
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
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
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
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 <script>evil()</script>example</p>')
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
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] == "…"
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)
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 <script>evil()</script>' 'example</p>')