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_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
Exemple #4
0
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
Exemple #6
0
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
Exemple #9
0
    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
        }
Exemple #10
0
    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
Exemple #12
0
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