本文整理汇总了Python中shuup.testing.factories.create_product函数的典型用法代码示例。如果您正苦于以下问题:Python create_product函数的具体用法?Python create_product怎么用?Python create_product使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了create_product函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_get_orderable_variation_children
def test_get_orderable_variation_children(rf):
supplier = get_default_supplier()
shop = get_default_shop()
variable_name = "Color"
parent = create_product("test-sku-1", shop=shop)
variation_variable = ProductVariationVariable.objects.create(product=parent, identifier="color", name=variable_name)
red_value = ProductVariationVariableValue.objects.create(variable=variation_variable, identifier="red", value="Red")
blue_value =ProductVariationVariableValue.objects.create(variable=variation_variable, identifier="blue", value="Blue")
combinations = list(parent.get_all_available_combinations())
assert len(combinations) == 2
for combo in combinations:
assert not combo["result_product_pk"]
child = create_product("xyz-%s" % combo["sku_part"], shop=shop, supplier=get_default_supplier(), default_price=20)
child.link_to_parent(parent, combination_hash=combo["hash"])
combinations = list(parent.get_all_available_combinations())
assert len(combinations) == 2
parent.refresh_from_db()
assert parent.is_variation_parent()
request = apply_request_middleware(rf.get("/"))
cache.clear()
for time in range(2):
orderable_children, is_orderable = get_orderable_variation_children(parent, request, None)
assert len(orderable_children)
for var_variable, var_values in dict(orderable_children).items():
assert var_variable == variation_variable
assert red_value in var_values
assert blue_value in var_values
示例2: test_best_selling_products_with_multiple_orders
def test_best_selling_products_with_multiple_orders():
context = get_jinja_context()
supplier = get_default_supplier()
shop = get_default_shop()
n_products = 2
price = 10
product_1 = create_product("test-sku-1", supplier=supplier, shop=shop)
product_2 = create_product("test-sku-2", supplier=supplier, shop=shop)
create_order_with_product(product_1, supplier, quantity=1, taxless_base_unit_price=price, shop=shop)
create_order_with_product(product_2, supplier, quantity=1, taxless_base_unit_price=price, shop=shop)
cache.clear()
# Two initial products sold
assert product_1 in general.get_best_selling_products(context, n_products=n_products)
assert product_2 in general.get_best_selling_products(context, n_products=n_products)
product_3 = create_product("test-sku-3", supplier=supplier, shop=shop)
create_order_with_product(product_3, supplier, quantity=2, taxless_base_unit_price=price, shop=shop)
cache.clear()
# Third product sold in greater quantity
assert product_3 in general.get_best_selling_products(context, n_products=n_products)
create_order_with_product(product_1, supplier, quantity=4, taxless_base_unit_price=price, shop=shop)
create_order_with_product(product_2, supplier, quantity=4, taxless_base_unit_price=price, shop=shop)
cache.clear()
# Third product outsold by first two products
assert product_3 not in general.get_best_selling_products(context, n_products=n_products)
children = [create_product("SimpleVarChild-%d" % x, supplier=supplier, shop=shop) for x in range(5)]
for child in children:
child.link_to_parent(product_3)
create_order_with_product(child, supplier, quantity=1, taxless_base_unit_price=price, shop=shop)
cache.clear()
# Third product now sold in greatest quantity
assert product_3 == general.get_best_selling_products(context, n_products=n_products)[0]
示例3: test_protected_fields
def test_protected_fields():
activate("en")
shop = Shop.objects.create(
name="testshop",
identifier="testshop",
status=ShopStatus.ENABLED,
public_name="test shop",
domain="derp",
currency="EUR"
)
get_currency("EUR")
get_currency("USD")
assert shop.name == "testshop"
assert shop.currency == "EUR"
assert not ConfigurationItem.objects.filter(shop=shop, key="languages").exists()
shop_form = ShopBaseForm(instance=shop, languages=settings.LANGUAGES)
assert not shop_form._get_protected_fields() # No protected fields just yet, right?
data = get_form_data(shop_form, prepared=True)
shop_form = ShopBaseForm(data=data, instance=shop, languages=settings.LANGUAGES)
_test_cleanliness(shop_form)
shop_form.save()
# Now let's make it protected!
create_product(printable_gibberish(), shop=shop, supplier=get_default_supplier())
order = create_random_order(customer=create_random_person(), shop=shop)
assert order.shop == shop
# And try again...
data["currency"] = "USD"
shop_form = ShopBaseForm(data=data, instance=shop, languages=settings.LANGUAGES)
assert shop_form._get_protected_fields() # So protected!
_test_cleanliness(shop_form)
shop = shop_form.save()
assert shop.currency == "EUR" # But the shop form ignored the change . . .
示例4: test_price_infos
def test_price_infos(rf):
request, shop, group = initialize_test(rf, True)
price = shop.create_price
product_one = create_product("Product_1", shop, default_price=150)
product_two = create_product("Product_2", shop, default_price=250)
spp = CgpPrice(product=product_one, shop=shop, group=group, price_value=100)
spp.save()
spp = CgpPrice(product=product_two, shop=shop, group=group, price_value=200)
spp.save()
product_ids = [product_one.pk, product_two.pk]
spm = get_pricing_module()
assert isinstance(spm, CustomerGroupPricingModule)
pricing_context = spm.get_context_from_request(request)
price_infos = spm.get_price_infos(pricing_context, product_ids)
assert len(price_infos) == 2
assert product_one.pk in price_infos
assert product_two.pk in price_infos
assert price_infos[product_one.pk].price == price(100)
assert price_infos[product_two.pk].price == price(200)
assert price_infos[product_one.pk].base_price == price(100)
assert price_infos[product_two.pk].base_price == price(200)
示例5: test_mass_edit_orders
def test_mass_edit_orders(rf, admin_user):
shop = get_default_shop()
supplier = get_default_supplier()
contact1 = create_random_person()
product1 = create_product(printable_gibberish(), shop=shop, supplier=supplier, default_price="50")
product2 = create_product(printable_gibberish(), shop=shop, supplier=supplier, default_price="501")
order = create_random_order(customer=contact1,
products=[product1, product2],
completion_probability=0)
assert order.status.role != OrderStatusRole.CANCELED
payload = {
"action": CancelOrderAction().identifier,
"values": [order.pk]
}
request = apply_request_middleware(rf.post(
"/",
user=admin_user,
))
request._body = json.dumps(payload).encode("UTF-8")
view = OrderListView.as_view()
response = view(request=request)
assert response.status_code == 200
for order in Order.objects.all():
assert order.status.role == OrderStatusRole.CANCELED
示例6: test_limited_methods
def test_limited_methods():
"""
Test that products can declare that they limit available shipping methods.
"""
unique_shipping_method = get_shipping_method(name="unique", price=0)
shop = get_default_shop()
common_product = create_product(sku="SH_COMMON", shop=shop) # A product that does not limit shipping methods
unique_product = create_product(sku="SH_UNIQUE", shop=shop) # A product that only supports unique_shipping_method
unique_shop_product = unique_product.get_shop_instance(shop)
unique_shop_product.limit_shipping_methods = True
unique_shop_product.shipping_methods.add(unique_shipping_method)
unique_shop_product.save()
impossible_product = create_product(sku="SH_IMP", shop=shop) # A product that can't be shipped at all
imp_shop_product = impossible_product.get_shop_instance(shop)
imp_shop_product.limit_shipping_methods = True
imp_shop_product.save()
for product_ids, method_ids in [
((common_product.pk, unique_product.pk), (unique_shipping_method.pk,)),
((common_product.pk,), ShippingMethod.objects.values_list("pk", flat=True)),
((unique_product.pk,), (unique_shipping_method.pk,)),
((unique_product.pk, impossible_product.pk,), ()),
((common_product.pk, impossible_product.pk,), ()),
]:
product_ids = set(product_ids)
assert ShippingMethod.objects.available_ids(shop=shop, products=product_ids) == set(method_ids)
示例7: test_variable_variation
def test_variable_variation():
parent = create_product("ComplexVarParent")
sizes_and_children = [("%sL" % ("X" * x), create_product("ComplexVarChild-%d" % x)) for x in range(4)]
for size, child in sizes_and_children:
child.link_to_parent(parent, variables={"size": size})
assert parent.mode == ProductMode.VARIABLE_VARIATION_PARENT
assert all(child.is_variation_child() for (size, child) in sizes_and_children)
# Validation tests
dummy = create_product("InvalidComplexVarChild")
with pytest.raises(ValueError):
dummy.link_to_parent(parent)
with pytest.raises(ValueError):
parent.link_to_parent(dummy)
with pytest.raises(ValueError):
dummy.link_to_parent(sizes_and_children[0][1])
# Variable tests
size_attr = parent.variation_variables.get(identifier="size")
for size, child in sizes_and_children:
size_val = size_attr.values.get(identifier=size)
result_product = ProductVariationResult.resolve(parent, {size_attr: size_val})
assert result_product == child
示例8: test_extract_products_shortdescription
def test_extract_products_shortdescription():
activate("en")
out = StringIO()
html_description1 = "<b>a HTML description</b>"
product1 = create_product("p1", description=html_description1)
html_description2 = '<p class="what">another HTML description</p>'
product2 = create_product("p2", description=html_description2)
faker = Faker()
long_description = faker.sentence(nb_words=150, variable_nb_words=True)
product3 = create_product("p3", description=long_description)
for lang, _ in settings.LANGUAGES:
product2.set_current_language(lang)
product2.description = html_description2
product2.save()
call_command("shuup_extract_products_shortdescription", stdout=out)
product1 = Product.objects.get(pk=product1.pk)
product2 = Product.objects.get(pk=product2.pk)
product3 = Product.objects.get(pk=product3.pk)
assert product1.short_description == do_striptags(html_description1)
for lang, _ in settings.LANGUAGES:
product2.set_current_language(lang)
assert product2.short_description == do_striptags(html_description2)
assert product3.short_description == long_description[:150]
assert "Done." in out.getvalue()
示例9: test_price_info_cache_bump
def test_price_info_cache_bump(rf):
request, shop, group = initialize_test(rf, True)
product_one = create_product("Product_1", shop, default_price=150)
product_two = create_product("Product_2", shop, default_price=250)
contact = create_customer()
group2 = ContactGroup.objects.create(name="Group 2", shop=shop)
cgp_price = CgpPrice.objects.create(product=product_one, shop=shop, group=group, price_value=100)
cgp_discount = CgpDiscount.objects.create(product=product_two, shop=shop, group=group, discount_amount_value=200)
spm = get_pricing_module()
assert isinstance(spm, CustomerGroupPricingModule)
pricing_context = spm.get_context_from_request(request)
for function in [
lambda: cgp_price.save(),
lambda: cgp_discount.save(),
lambda: group2.members.add(contact),
lambda: cgp_price.delete(),
lambda: cgp_discount.delete()
]:
cache_price_info(pricing_context, product_one, 1, product_one.get_price_info(pricing_context))
cache_price_info(pricing_context, product_two, 1, product_two.get_price_info(pricing_context))
# prices are cached
assert get_cached_price_info(pricing_context, product_one)
assert get_cached_price_info(pricing_context, product_two)
# caches should be bumped
function()
assert get_cached_price_info(pricing_context, product_one) is None
assert get_cached_price_info(pricing_context, product_two) is None
示例10: test_make_product_package
def test_make_product_package(admin_user):
shop = get_default_shop()
client = _get_client(admin_user)
product1 = create_product("product1")
product2 = create_product("product2")
product3 = create_product("product3")
product4 = create_product("product4")
assert product1.mode == product2.mode == product3.mode == product4.mode == ProductMode.NORMAL
package_data = [
{"product": product2.pk, "quantity":1},
{"product": product3.pk, "quantity":2},
{"product": product4.pk, "quantity":3.5}
]
response = client.post("/api/shuup/product/%d/make_package/" % product1.pk,
content_type="application/json",
data=json.dumps(package_data))
assert response.status_code == status.HTTP_201_CREATED
product1.refresh_from_db()
product2.refresh_from_db()
product3.refresh_from_db()
product4.refresh_from_db()
assert product1.mode == ProductMode.PACKAGE_PARENT
child1 = ProductPackageLink.objects.get(parent=product1, child=product2)
assert child1.quantity == 1
child2 = ProductPackageLink.objects.get(parent=product1, child=product3)
assert child2.quantity == 2
child3 = ProductPackageLink.objects.get(parent=product1, child=product4)
assert child3.quantity == 3.5
示例11: test_mass_edit_products2
def test_mass_edit_products2(rf, admin_user):
shop = get_default_shop()
supplier = get_default_supplier()
product1 = create_product(printable_gibberish(), shop=shop, supplier=supplier, default_price="50")
product2 = create_product(printable_gibberish(), shop=shop, supplier=supplier, default_price="501")
shop_product1 = product1.get_shop_instance(shop)
shop_product2 = product2.get_shop_instance(shop)
# ensure no categories set
assert shop_product1.primary_category is None
assert shop_product2.primary_category is None
payload = {
"action": InvisibleMassAction().identifier,
"values": [product1.pk, product2.pk]
}
request = apply_request_middleware(rf.post(
"/",
user=admin_user,
))
request._body = json.dumps(payload).encode("UTF-8")
view = ProductListView.as_view()
response = view(request=request)
assert response.status_code == 200
for product in Product.objects.all():
assert product.get_shop_instance(shop).visibility == ShopProductVisibility.NOT_VISIBLE
示例12: test_best_selling_products_with_multiple_orders
def test_best_selling_products_with_multiple_orders():
context = get_jinja_context()
supplier = get_default_supplier()
shop = get_default_shop()
n_products = 2
price = 10
product_1 = create_product("test-sku-1", supplier=supplier, shop=shop)
product_2 = create_product("test-sku-2", supplier=supplier, shop=shop)
create_order_with_product(product_1, supplier, quantity=1, taxless_base_unit_price=price, shop=shop)
create_order_with_product(product_2, supplier, quantity=1, taxless_base_unit_price=price, shop=shop)
cache.clear()
# Two initial products sold
assert product_1 in general.get_best_selling_products(context, n_products=n_products)
assert product_2 in general.get_best_selling_products(context, n_products=n_products)
product_3 = create_product("test-sku-3", supplier=supplier, shop=shop)
create_order_with_product(product_3, supplier, quantity=2, taxless_base_unit_price=price, shop=shop)
cache.clear()
# Third product sold in greater quantity
assert product_3 in general.get_best_selling_products(context, n_products=n_products)
create_order_with_product(product_1, supplier, quantity=4, taxless_base_unit_price=price, shop=shop)
create_order_with_product(product_2, supplier, quantity=4, taxless_base_unit_price=price, shop=shop)
cache.clear()
# Third product outsold by first two products
assert product_3 not in general.get_best_selling_products(context, n_products=n_products)
示例13: get_frontend_order_state
def get_frontend_order_state(contact, valid_lines=True):
"""
Get a dict structure mirroring what the frontend JavaScript would submit.
:type contact: Contact|None
"""
translation.activate("en")
shop = get_default_shop()
tax = Tax.objects.create(code="test_code", rate=decimal.Decimal("0.20"), name="Default")
tax_class = TaxClass.objects.create(identifier="test_tax_class", name="Default")
rule = TaxRule.objects.create(tax=tax)
rule.tax_classes.add(tax_class)
rule.save()
product = create_product(
sku=printable_gibberish(),
supplier=get_default_supplier(),
shop=shop
)
product.tax_class = tax_class
product.save()
if valid_lines:
lines = [
{"id": "x", "type": "product", "product": {"id": product.id}, "quantity": "32", "baseUnitPrice": 50},
{"id": "y", "type": "other", "sku": "hello", "text": "A greeting", "quantity": 1, "unitPrice": "5.5"},
{"id": "z", "type": "text", "text": "This was an order!", "quantity": 0},
]
else:
unshopped_product = create_product(sku=printable_gibberish(), supplier=get_default_supplier())
not_visible_product = create_product(
sku=printable_gibberish(),
supplier=get_default_supplier(),
shop=shop
)
not_visible_shop_product = not_visible_product.get_shop_instance(shop)
not_visible_shop_product.visible = False
not_visible_shop_product.save()
lines = [
{"id": "x", "type": "product"}, # no product?
{"id": "x", "type": "product", "product": {"id": unshopped_product.id}}, # not in this shop?
{"id": "y", "type": "product", "product": {"id": -product.id}}, # invalid product?
{"id": "z", "type": "other", "quantity": 1, "unitPrice": "q"}, # what's that price?
{"id": "rr", "type": "product", "quantity": 1, "product": {"id": not_visible_product.id}} # not visible
]
state = {
"customer": {"id": contact.id if contact else None},
"lines": lines,
"methods": {
"shippingMethod": {"id": get_default_shipping_method().id},
"paymentMethod": {"id": get_default_payment_method().id},
},
"shop": {
"selected": {
"id": shop.id,
"name": shop.name,
"currency": shop.currency,
"priceIncludeTaxes": shop.prices_include_tax
}
}
}
return state
示例14: test_complex_variation
def test_complex_variation():
request = get_request_with_basket()
basket = request.basket
shop = get_default_shop()
supplier = get_default_supplier()
parent = create_product("SuperComplexVarParent", shop=shop, supplier=supplier)
color_var = ProductVariationVariable.objects.create(product=parent, identifier="color")
size_var = ProductVariationVariable.objects.create(product=parent, identifier="size")
ProductVariationVariableValue.objects.create(variable=color_var, identifier="yellow")
ProductVariationVariableValue.objects.create(variable=size_var, identifier="small")
combinations = list(parent.get_all_available_combinations())
for combo in combinations:
child = create_product("xyz-%s" % combo["sku_part"], shop=shop, supplier=supplier)
child.link_to_parent(parent, combo["variable_to_value"])
# Elided product should not yield a result
yellow_color_value = ProductVariationVariableValue.objects.get(variable=color_var, identifier="yellow")
small_size_value = ProductVariationVariableValue.objects.get(variable=size_var, identifier="small")
# add to basket yellow + small
kwargs = {"var_%d" % color_var.pk: yellow_color_value.pk, "var_%d" % size_var.pk: small_size_value.pk}
basket_commands.handle_add_var(request, basket, parent.id, **kwargs)
assert basket.get_product_ids_and_quantities()[child.pk] == 1
with pytest.raises(ValidationError):
kwargs = {"var_%d" % color_var.pk: yellow_color_value.pk, "var_%d" % size_var.pk: small_size_value.pk + 1}
basket_commands.handle_add_var(request, basket, parent.id, **kwargs)
示例15: test_get_newest_products
def test_get_newest_products():
from shuup.front.template_helpers import general
supplier = get_default_supplier()
shop = get_default_shop()
products = [create_product("sku-%d" % x, supplier=supplier, shop=shop) for x in range(2)]
children = [create_product("SimpleVarChild-%d" % x, supplier=supplier, shop=shop) for x in range(2)]
for child in children:
child.link_to_parent(products[0])
context = get_jinja_context()
for cache_test in range(2):
newest_products = list(general.get_newest_products(context, n_products=10))
# only 2 products exist
assert len(newest_products) == 2
assert products[0] in newest_products
assert products[1] in newest_products
# Delete one product
products[0].soft_delete()
for cache_test in range(2):
newest_products = list(general.get_newest_products(context, n_products=10))
# only 2 products exist
assert len(newest_products) == 1
assert products[0] not in newest_products
assert products[1] in newest_products