Example #1
0
def test_sort_products_within_collection_null_sort_order_is_ordered_to_last(
    staff_api_client,
    staff_user,
    collection,
    category,
    product_type,
    permission_manage_products,
):
    db_products = CollectionProduct.objects.bulk_create([
        CollectionProduct(
            collection=collection,
            product=Product.objects.create(price=Money(10, "USD"),
                                           product_type=product_type,
                                           category=category),
        ),
        CollectionProduct(
            collection=collection,
            sort_order=1,
            product=Product.objects.create(price=Money(10, "USD"),
                                           product_type=product_type,
                                           category=category),
        ),
    ])

    assert db_products[0].sort_order is None
    assert db_products[1].sort_order == 1

    staff_api_client.user.user_permissions.add(permission_manage_products)
    null_product_id = graphene.Node.to_global_id("Product",
                                                 db_products[0].product.pk)

    collection_id = graphene.Node.to_global_id("Collection", collection.pk)
    products = get_graphql_content(
        staff_api_client.post_graphql(
            GET_SORTED_PRODUCTS_COLLECTION_QUERY,
            {"id": collection_id}))["data"]["collection"]["products"]["edges"]

    assert len(products) == len(db_products)
    assert products[-1]["node"]["id"] == null_product_id

    products = get_graphql_content(
        staff_api_client.post_graphql(
            COLLECTION_RESORT_QUERY,
            {
                "collectionId":
                collection_id,
                "moves": [{
                    "productId": null_product_id,
                    "sortOrder": -len(products)
                }],
            },
        )
    )["data"]["collectionReorderProducts"]["collection"]["products"]["edges"]

    # Ensure it was properly pushed to the top
    assert products[0]["node"]["id"] == null_product_id
Example #2
0
def collection_with_products(db, collection, product_list_published):
    for sort_order, product in enumerate(product_list_published):
        CollectionProduct(
            collection=collection, product=product, sort_order=sort_order
        ).save()
    return product_list_published