def test_product_query_where(client): client.products.create( types.ProductDraft( key="test-product1", master_variant=types.ProductVariantDraft( prices=[ types.PriceDraft( country="NL", value=types.CentPrecisionMoneyDraft( cent_amount=8750, currency_code="EUR" ), ) ] ), ) ) client.products.create( types.ProductDraft( key="test-product-2", master_variant=types.ProductVariantDraft( prices=[ types.PriceDraft( country="UK", value=types.CentPrecisionMoneyDraft( cent_amount=8750, currency_code="EUR" ), ) ] ), ) ) client.products.create(types.ProductDraft(key="test-product2")) result = client.products.query( where="masterData(staged(masterVariant(prices(country='NL'))))" ) assert len(result.results) == 1 assert result.total == 1 result = client.products.query( where="masterData(staged(masterVariant(prices(country='UK'))))" ) assert len(result.results) == 1 assert result.total == 1 result = client.products.query( where="masterData(staged(masterVariant(prices(country='UK' or country='NL'))))" ) assert len(result.results) == 2 assert result.total == 2
def test_get_by_id(client): product = client.products.create( types.ProductDraft( master_variant=types.ProductVariantDraft(sku="123"), publish=True, name=types.LocalizedString(nl="Test product"), ) ) shopping_list = client.shopping_lists.create( draft=types.ShoppingListDraft( name=types.LocalizedString({"nl": "Verlanglijstje"}), description=types.LocalizedString({"nl": "Verlanglijstje van LabD"}), line_items=[ types.ShoppingListLineItemDraft(product_id=product.id, quantity=1) ], ) ) assert shopping_list.id shopping_list = client.shopping_lists.get_by_id(shopping_list.id) assert shopping_list.name["nl"] == "Verlanglijstje" assert shopping_list.description["nl"] == "Verlanglijstje van LabD" assert shopping_list.line_items[0].product_id == product.id assert shopping_list.line_items[0].quantity == 1
def test_product_update_add_price_current(client): product = client.products.create( types.ProductDraft( key="test-product", name=types.LocalizedString(en=f"my-product-1"), slug=types.LocalizedString(en=f"my-product-1"), product_type=types.ProductTypeResourceIdentifier(key="dummy"), master_variant=types.ProductVariantDraft(sku="1", key="1"), publish=True, ) ) product = client.products.update_by_id( id=product.id, version=product.version, actions=[ types.ProductAddPriceAction( sku="1", staged=False, price=types.PriceDraft( value=types.Money(cent_amount=1000, currency_code="GBP") ), ) ], ) assert product.master_data.staged is None assert len(product.master_data.current.master_variant.prices) == 1
def test_get_by_key(client): product = client.products.create( types.ProductDraft( master_variant=types.ProductVariantDraft(sku="123"), publish=True, name=types.LocalizedString(nl="Test product"), slug=types.LocalizedString(en="my-product"), product_type=types.ProductTypeResourceIdentifier(key="dummy"), )) variant = product.master_data.current.master_variant shopping_list = client.shopping_lists.create(draft=types.ShoppingListDraft( key="test-shopping-list", name=types.LocalizedString({"nl": "Verlanglijstje"}), description=types.LocalizedString({"nl": "Verlanglijstje van LabD"}), line_items=[ types.ShoppingListLineItemDraft(sku=variant.sku, quantity=1) ], )) assert shopping_list.key shopping_list = client.shopping_lists.get_by_key("test-shopping-list") assert shopping_list.name["nl"] == "Verlanglijstje" assert shopping_list.description["nl"] == "Verlanglijstje van LabD" assert shopping_list.line_items[0].variant.sku == "123" assert shopping_list.line_items[0].quantity == 1
def test_products_create(client): custom_type = client.types.create( types.TypeDraft(name=types.LocalizedString(en="myType"), resource_type_ids=[types.ResourceTypeId.ASSET], field_definitions=[types.FieldDefinition(name="foo")])) assert custom_type.id draft = types.ProductDraft( key="test-product", publish=True, master_variant=types.ProductVariantDraft( assets=[ types.AssetDraft(custom=types.CustomFieldsDraft( type=types.TypeResourceIdentifier(id=custom_type.id), fields=types.FieldContainer(foo="bar"), )) ], prices=[ types.PriceDraft( value=types.CentPrecisionMoneyDraft(cent_amount=1000, currency_code="EUR"), country="NL", ) ], ), ) product = client.products.create(draft) assert product.id assert product.master_data.current.master_variant.assets assert product.master_data.current.master_variant.prices
def test_product_update(client): """Test the return value of the update methods. It doesn't test the actual update itself. TODO: See if this is worth testing since we're using a mocking backend """ product = client.products.create( types.ProductDraft( key="test-product", master_variant=types.ProductVariantDraft(sku="1", key="1"), )) assert uuid.UUID(product.id) assert product.key == "test-product" product = client.products.update_by_id( id=product.id, version=product.version, actions=[ types.ProductChangeSlugAction(slug=types.LocalizedString( nl="nl-slug2")) ], ) assert product.key == "test-product" assert product.master_data.published is False product = client.products.update_by_id( id=product.id, version=product.version, actions=[types.ProductPublishAction()]) assert product.master_data.published is True assert not product.master_data.current.master_variant.prices product = client.products.update_by_id( id=product.id, version=product.version, actions=[ types.ProductSetPricesAction( sku="1", prices=[ types.PriceDraft(value=types.Money(cent_amount=1000, currency_code="GBP")) ], staged=False, ) ], ) assert len(product.master_data.current.master_variant.prices) == 1 product = client.products.update_by_key( key="test-product", version=product.version, actions=[ types.ProductChangeSlugAction(slug=types.LocalizedString( nl="nl-slug2")) ], ) assert product.key == "test-product"
def test_product_update_add_change_price_staged(client): product = client.products.create( types.ProductDraft( key="test-product", name=types.LocalizedString(en=f"my-product-1"), slug=types.LocalizedString(en=f"my-product-1"), product_type=types.ProductTypeResourceIdentifier(key="dummy"), master_variant=types.ProductVariantDraft(sku="1", key="1"), ) ) product = client.products.update_by_id( id=product.id, version=product.version, actions=[ types.ProductAddPriceAction( sku="1", price=types.PriceDraft( value=types.Money(cent_amount=1000, currency_code="GBP") ), ) ], ) assert product.master_data.current is None assert len(product.master_data.staged.master_variant.prices) == 1 price = product.master_data.staged.master_variant.prices[0] assert price.value.cent_amount == 1000 assert price.value.currency_code == "GBP" product = client.products.update_by_id( id=product.id, version=product.version, actions=[ types.ProductChangePriceAction( price_id=price.id, price=types.PriceDraft( value=types.Money(cent_amount=3000, currency_code="EUR") ), ) ], ) assert product.master_data.current is None assert len(product.master_data.staged.master_variant.prices) == 1 price = product.master_data.staged.master_variant.prices[0] assert price.value.cent_amount == 3000 assert price.value.currency_code == "EUR"
def test_product_projections_get_by_key(client): variant = types.ProductVariantDraft() product_create = client.products.create( types.ProductDraft( key="test-product", product_type=types.ProductTypeResourceIdentifier(key="dummy"), name=types.LocalizedString(en=f"my-product"), slug=types.LocalizedString(en=f"my-product"), master_variant=variant, variants=[variant], publish=False, ) ) product = client.product_projections.get_by_key(product_create.key, staged=True) assert product.id == product_create.id assert product.key == product_create.key
def updater(self, obj: dict, action: types.ProductAddVariantAction): variant = self.model._create_variant_from_draft( types.ProductVariantDraft( sku=action.sku, key=action.key, prices=action.prices, attributes=action.attributes, images=action.images, assets=action.assets, )) schema = schemas.ProductVariantSchema() new = copy.deepcopy(obj) target_obj = _get_target_obj(new, action) if not target_obj["variants"]: target_obj["variants"] = [] target_obj["variants"].append(schema.dump(variant)) return new
def test_product_projections_query(client): for key in ["product-1", "product-2"]: variant = types.ProductVariantDraft() client.products.create( types.ProductDraft( key=key, product_type=types.ProductTypeResourceIdentifier(key="dummy"), name=types.LocalizedString(en=key), slug=types.LocalizedString(en=key), master_variant=variant, variants=[variant], publish=True, ) ) key = "product-3" client.products.create( types.ProductDraft( key=key, product_type=types.ProductTypeResourceIdentifier(key="dummy"), name=types.LocalizedString(en=key), slug=types.LocalizedString(en=key), master_variant=variant, variants=[variant], publish=False, ) ) # single sort query result = client.product_projections.query( sort="id asc", where=[f'slug(nl-NL="product-3")'], expand=["parent.category"] ) assert len(result.results) == 2 assert result.total == 2 assert result.results[0].key == "product-1" assert result.results[1].key == "product-2" # multiple sort queries result = client.product_projections.query(sort=["id asc", "name asc"]) assert len(result.results) == 2 assert result.total == 2
def test_product_update_add_price_current(client): product = client.products.create( types.ProductDraft( key="test-product", master_variant=types.ProductVariantDraft(sku="1", key="1"), publish=True, )) product = client.products.update_by_id( id=product.id, version=product.version, actions=[ types.ProductAddPriceAction( sku="1", staged=False, price=types.PriceDraft( value=types.Money(cent_amount=1000, currency_code="GBP")), ) ], ) assert product.master_data.staged is None assert len(product.master_data.current.master_variant.prices) == 1
def test_product_query_where(client): client.products.create( types.ProductDraft( key="test-product1", name=types.LocalizedString(en=f"my-product-1"), slug=types.LocalizedString(en=f"my-product-1"), product_type=types.ProductTypeResourceIdentifier(key="dummy"), master_variant=types.ProductVariantDraft( prices=[ types.PriceDraft( country="NL", value=types.CentPrecisionMoneyDraft( cent_amount=8750, currency_code="EUR" ), ) ] ), ) ) client.products.create( types.ProductDraft( key="test-product-2", name=types.LocalizedString(en=f"my-product-1"), slug=types.LocalizedString(en=f"my-product-1"), product_type=types.ProductTypeResourceIdentifier(key="dummy"), master_variant=types.ProductVariantDraft( prices=[ types.PriceDraft( country="UK", value=types.CentPrecisionMoneyDraft( cent_amount=8750, currency_code="EUR" ), ) ] ), ) ) client.products.create( types.ProductDraft( key="test-product2", name=types.LocalizedString(en=f"my-product-1"), slug=types.LocalizedString(en=f"my-product-1"), product_type=types.ProductTypeResourceIdentifier(key="dummy"), ) ) result = client.products.query( where="masterData(staged(masterVariant(prices(country='NL'))))" ) assert len(result.results) == 1 assert result.total == 1 result = client.products.query( where="masterData(staged(masterVariant(prices(country='UK'))))" ) assert len(result.results) == 1 assert result.total == 1 result = client.products.query( where="masterData(staged(masterVariant(prices(country='UK' or country='NL'))))" ) assert len(result.results) == 2 assert result.total == 2