def test_get_listed_products_filter(): context = get_jinja_context() shop = get_default_shop() supplier = get_default_supplier() product_1 = create_product( "test-sku-1", supplier=supplier, shop=shop, ) product_2 = create_product( "test-sku-2", supplier=supplier, shop=shop, ) filter_dict = {"id": product_1.id} product_list = general.get_listed_products(context, n_products=2, filter_dict=filter_dict) assert product_1 in product_list assert product_2 not in product_list product_list = general.get_listed_products(context, n_products=2, filter_dict=filter_dict, orderable_only=False) assert product_1 in product_list assert product_2 not in product_list
def test_get_listed_products_filter(): context = get_jinja_context() shop = get_default_shop() supplier = get_default_supplier() product_1 = create_product( "test-sku-1", supplier=supplier, shop=shop, ) product_2 = create_product( "test-sku-2", supplier=supplier, shop=shop, ) cache.clear() from shuup.front.template_helpers import general filter_dict = {"id": product_1.id} for cache_test in range(2): product_list = general.get_listed_products(context, n_products=2, filter_dict=filter_dict) assert product_1 in product_list assert product_2 not in product_list for cache_test in range(2): product_list = general.get_listed_products(context, n_products=2, filter_dict=filter_dict, orderable_only=False) assert product_1 in product_list assert product_2 not in product_list
def test_get_listed_products_cache_bump(): supplier = get_default_supplier() shop = get_default_shop() product_1 = create_product("test-sku-1", supplier=supplier, shop=shop,) from shuup.front.template_helpers import general filter_dict = {"id": product_1.pk} cache.clear() context = get_jinja_context() set_cached_value_mock = mock.Mock(wraps=context_cache.set_cached_value) def set_cache_value(key, value, timeout=None): if "listed_products" in key: return set_cached_value_mock(key, value, timeout) with mock.patch.object(context_cache, "set_cached_value", new=set_cache_value): assert set_cached_value_mock.call_count == 0 for cache_test in range(2): assert general.get_listed_products(context, n_products=2, filter_dict=filter_dict, orderable_only=False) assert set_cached_value_mock.call_count == 1 # bump cache product_1.save() for cache_test in range(2): assert general.get_listed_products(context, n_products=2, filter_dict=filter_dict, orderable_only=False) assert set_cached_value_mock.call_count == 2 # use other filters from django.db.models import Q for cache_test in range(2): assert general.get_listed_products(context, n_products=2, extra_filters=Q(translations__name__isnull=False)) assert set_cached_value_mock.call_count == 3
def test_get_listed_products_orderable_only(): context = get_jinja_context() shop = get_default_shop() simple_supplier = get_simple_supplier() n_products = 2 # Create product without stock product = create_product( "test-sku", supplier=simple_supplier, shop=shop, stock_behavior=StockBehavior.STOCKED ) assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 0 assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 1 # Increase stock on product quantity = product.get_shop_instance(shop).minimum_purchase_quantity simple_supplier.adjust_stock(product.id, quantity) assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 1 assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 1 # Decrease stock on product simple_supplier.adjust_stock(product.id, -quantity) assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 0 assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 1
def test_get_listed_products_orderable_only(): if "shuup.simple_supplier" not in settings.INSTALLED_APPS: pytest.skip("Need shuup.simple_supplier in INSTALLED_APPS") from shuup_tests.simple_supplier.utils import get_simple_supplier context = get_jinja_context() shop = get_default_shop() simple_supplier = get_simple_supplier() n_products = 2 # Create product without stock product = create_product( "test-sku", supplier=simple_supplier, shop=shop, stock_behavior=StockBehavior.STOCKED ) assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 0 assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 1 # Increase stock on product quantity = product.get_shop_instance(shop).minimum_purchase_quantity simple_supplier.adjust_stock(product.id, quantity) assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 1 assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 1 # Decrease stock on product simple_supplier.adjust_stock(product.id, -quantity) assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 0 assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 1
def test_get_listed_products_filter(): context = get_jinja_context() shop = get_default_shop() supplier = get_default_supplier() product_1 = create_product( "test-sku-1", supplier=supplier, shop=shop, ) product_2 = create_product( "test-sku-2", supplier=supplier, shop=shop, ) filter_dict = {"id": product_1.id} product_list = general.get_listed_products(context, n_products=2, filter_dict=filter_dict) assert product_1 in product_list assert product_2 not in product_list # Test also with orderable_only False product_list = general.get_listed_products(context, n_products=2, filter_dict=filter_dict, orderable_only=False) assert product_1 in product_list assert product_2 not in product_list
def test_get_listed_products_orderable_only(): context = get_jinja_context() shop = get_default_shop() simple_supplier = get_simple_supplier() n_products = 2 # Create product without stock product = create_product("test-sku", supplier=simple_supplier, shop=shop) create_product("test-sku-2", supplier=simple_supplier, shop=shop) create_product("test-sku-3", supplier=simple_supplier, shop=shop) create_product("test-sku-4", supplier=simple_supplier, shop=shop) from shuup.front.template_helpers import general for cache_test in range(2): assert len( general.get_listed_products(context, n_products, orderable_only=True)) == 0 for cache_test in range(2): assert len( general.get_listed_products(context, n_products, orderable_only=False)) == 2 # Increase stock on product quantity = product.get_shop_instance(shop).minimum_purchase_quantity simple_supplier.adjust_stock(product.id, quantity) for cache_test in range(2): assert len( general.get_listed_products(context, n_products, orderable_only=True)) == 0 for cache_test in range(2): assert len( general.get_listed_products(context, n_products, orderable_only=False)) == 2 # Decrease stock on product simple_supplier.adjust_stock(product.id, -quantity) for cache_test in range(2): assert len( general.get_listed_products(context, n_products, orderable_only=True)) == 0 for cache_test in range(2): assert len( general.get_listed_products(context, n_products, orderable_only=False)) == 2
def get_context_data(self, context): count = self.config.get("count", 4) orderable_only = self.config.get("orderable_only", True) discounts = self.config.get("discounts") products = [] if discounts: # make sure to have only available discounts discounts = Discount.objects.available(shop=context["request"].shop).filter(pk__in=discounts) extra_filters = Q( Q(product_discounts__in=discounts) | Q(shop_products__categories__category_discounts__in=discounts) ) products = get_listed_products(context, count, orderable_only=orderable_only, extra_filters=extra_filters) return { "request": context["request"], "title": self.get_translated_value("title"), "products": products }
def test_get_listed_products_orderable_only(): context = get_jinja_context() shop = get_default_shop() simple_supplier = get_simple_supplier() n_products = 2 # Create product without stock product = create_product( "test-sku", supplier=simple_supplier, shop=shop ) create_product("test-sku-2", supplier=simple_supplier, shop=shop) create_product("test-sku-3", supplier=simple_supplier, shop=shop) create_product("test-sku-4", supplier=simple_supplier, shop=shop) from shuup.front.template_helpers import general for cache_test in range(2): assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 0 for cache_test in range(2): assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 2 # Increase stock on product quantity = product.get_shop_instance(shop).minimum_purchase_quantity simple_supplier.adjust_stock(product.id, quantity) for cache_test in range(2): assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 0 for cache_test in range(2): assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 2 # Decrease stock on product simple_supplier.adjust_stock(product.id, -quantity) for cache_test in range(2): assert len(general.get_listed_products(context, n_products, orderable_only=True)) == 0 for cache_test in range(2): assert len(general.get_listed_products(context, n_products, orderable_only=False)) == 2
def test_get_listed_products_sale_only(): context = get_jinja_context() shop = get_default_shop() supplier = get_default_supplier() n_products = 10 # Create product with nodiscount product = create_product("test-sku", supplier=supplier, shop=shop, default_price=10) from shuup.front.template_helpers import general for cache_test in range(2): assert general.get_listed_products(context, n_products, orderable_only=False, sale_items_only=True) == [] from shuup.customer_group_pricing.models import CgpDiscount CgpDiscount.objects.create(shop=shop, product=product, group=AnonymousContact.get_default_group(), discount_amount_value=5) for cache_test in range(2): assert product in general.get_listed_products(context, n_products, orderable_only=False, sale_items_only=True) # create a package product package_product = create_product("package", shop, supplier, default_price=30) pkg_children = [ create_product("PackageChild-%d" % x, shop, supplier, default_price=(x + 1)) for x in range(3) ] package_def = {child: 1 + i for (i, child) in enumerate(pkg_children)} package_product.make_package(package_def) package_product.save() # package product is not returned as it has not discount for cache_test in range(2): assert len( general.get_listed_products(context, n_products, orderable_only=False, sale_items_only=True)) == 1 CgpDiscount.objects.create(shop=shop, product=package_product, group=AnonymousContact.get_default_group(), discount_amount_value=3) for cache_test in range(2): products = general.get_listed_products(context, n_products, orderable_only=False, sale_items_only=True) assert len(products) == 2 assert package_product in products # create a variation parent product parent = create_product("parent", shop, supplier, default_price=40) var_children = [ create_product("VariationChild-%d" % x, shop, supplier, default_price=(x + 1)) for x in range(3) ] for var_child in var_children: var_child.link_to_parent(parent, {"option": var_child.sku}) # still the same, as there is no discount for variation for cache_test in range(2): products = general.get_listed_products(context, n_products, orderable_only=False, sale_items_only=True) assert len(products) == 2 # add discount for just a variation child CgpDiscount.objects.create(shop=shop, product=var_children[0], group=AnonymousContact.get_default_group(), discount_amount_value=0.1) for cache_test in range(2): products = general.get_listed_products(context, n_products, orderable_only=False, sale_items_only=True) assert len(products) == 3 assert parent in products