def test_get_visible_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_visible_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_visible_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_visible_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_visible_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_visible_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_visible_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_visible_products(context, n_products, orderable_only=True)) == 0
    assert len(general.get_visible_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_visible_products(context, n_products, orderable_only=True)) == 1
    assert len(general.get_visible_products(context, n_products, orderable_only=False)) == 1

    # Decrease stock on product
    simple_supplier.adjust_stock(product.id, -quantity)
    assert len(general.get_visible_products(context, n_products, orderable_only=True)) == 0
    assert len(general.get_visible_products(context, n_products, orderable_only=False)) == 1
def test_get_visible_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_visible_products(context, n_products,
                                     orderable_only=True)) == 0
    assert len(
        general.get_visible_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_visible_products(context, n_products,
                                     orderable_only=True)) == 1
    assert len(
        general.get_visible_products(context, n_products,
                                     orderable_only=False)) == 1

    # Decrease stock on product
    simple_supplier.adjust_stock(product.id, -quantity)
    assert len(
        general.get_visible_products(context, n_products,
                                     orderable_only=True)) == 0
    assert len(
        general.get_visible_products(context, n_products,
                                     orderable_only=False)) == 1