def test_product_query(staff_api_client, product, permission_manage_products): category = Category.objects.first() product = category.products.first() query = """ query { category(id: "%(category_id)s") { products(first: 20) { edges { node { id name url thumbnailUrl thumbnail{ url alt } images { url } variants { name stockQuantity } availability { available, priceRange { start { gross { amount currency localized } net { amount currency localized } currency } } } purchaseCost { start { amount } stop { amount } } margin { start stop } } } } } } """ % { 'category_id': graphene.Node.to_global_id('Category', category.id) } staff_api_client.user.user_permissions.add(permission_manage_products) response = staff_api_client.post_graphql(query) content = get_graphql_content(response) assert content['data']['category'] is not None product_edges_data = content['data']['category']['products']['edges'] assert len(product_edges_data) == category.products.count() product_data = product_edges_data[0]['node'] assert product_data['name'] == product.name assert product_data['url'] == product.get_absolute_url() gross = product_data['availability']['priceRange']['start']['gross'] assert float(gross['amount']) == float(product.price.amount) from saleor.product.utils.costs import get_product_costs_data purchase_cost, margin = get_product_costs_data(product) assert purchase_cost.start.amount == product_data['purchaseCost']['start'][ 'amount'] assert purchase_cost.stop.amount == product_data['purchaseCost']['stop'][ 'amount'] assert margin[0] == product_data['margin']['start'] assert margin[1] == product_data['margin']['stop']
def test_product_query(admin_api_client, product): category = Category.objects.first() product = category.products.first() query = ''' query { category(id: "%(category_id)s") { products { edges { node { id name url thumbnailUrl images { edges { node { url } } } variants { edges { node { name stockQuantity } } } availability { available, priceRange { start { gross { amount currency localized } net { amount currency localized } currency } } } purchaseCost { start { amount } stop { amount } } margin { start stop } } } } } } ''' % { 'category_id': graphene.Node.to_global_id('Category', category.id) } response = admin_api_client.post(reverse('api'), {'query': query}) content = get_graphql_content(response) assert 'errors' not in content assert content['data']['category'] is not None product_edges_data = content['data']['category']['products']['edges'] assert len(product_edges_data) == category.products.count() product_data = product_edges_data[0]['node'] assert product_data['name'] == product.name assert product_data['url'] == product.get_absolute_url() gross = product_data['availability']['priceRange']['start']['gross'] assert float(gross['amount']) == float(product.price.amount) from saleor.product.utils.costs import get_product_costs_data purchase_cost, margin = get_product_costs_data(product) assert purchase_cost.start.amount == product_data['purchaseCost']['start'][ 'amount'] assert purchase_cost.stop.amount == product_data['purchaseCost']['stop'][ 'amount'] assert margin[0] == product_data['margin']['start'] assert margin[1] == product_data['margin']['stop']
def test_product_query(admin_client, product): category = Category.objects.first() product = category.products.first() query = ''' query { category(id: "%(category_id)s") { products { edges { node { id name url thumbnailUrl images { edges { node { url } } } variants { edges { node { name stockQuantity } } } availability { available, priceRange { start { gross { amount currency localized } net { amount currency localized } currency } } } purchaseCost{ start{ gross{ amount } } stop{ gross{ amount } } } grossMargin { start stop } } } } } } ''' % {'category_id': graphene.Node.to_global_id('Category', category.id)} response = admin_client.post(reverse('api'), {'query': query}) content = get_graphql_content(response) assert 'errors' not in content assert content['data']['category'] is not None product_edges_data = content['data']['category']['products']['edges'] assert len(product_edges_data) == category.products.count() product_data = product_edges_data[0]['node'] assert product_data['name'] == product.name assert product_data['url'] == product.get_absolute_url() gross = product_data['availability']['priceRange']['start']['gross'] assert float(gross['amount']) == float(product.price.amount) from saleor.product.utils.costs import get_product_costs_data purchase_cost, gross_margin = get_product_costs_data(product) assert purchase_cost.start.gross.amount == product_data[ 'purchaseCost']['start']['gross']['amount'] assert purchase_cost.stop.gross.amount == product_data[ 'purchaseCost']['stop']['gross']['amount'] assert gross_margin[0] == product_data['grossMargin'][0]['start'] assert gross_margin[1] == product_data['grossMargin'][0]['stop']