コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #5
0
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
コード例 #6
0
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"
コード例 #7
0
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"
コード例 #8
0
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
コード例 #9
0
    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
コード例 #10
0
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
コード例 #11
0
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
コード例 #12
0
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