Esempio n. 1
0
def test_plugin_update_saves_boolean_as_boolean(
    staff_api_client, permission_manage_plugins, settings
):
    settings.PLUGINS = ["tests.api.test_extensions.PluginSample"]
    manager = get_extensions_manager()
    plugin = manager.get_plugin_configuration(plugin_name="PluginSample")
    use_sandbox = get_config_value("Use sandbox", plugin.configuration)
    plugin_id = graphene.Node.to_global_id("Plugin", plugin.pk)
    variables = {
        "id": plugin_id,
        "active": plugin.active,
        "configuration": [{"name": "Use sandbox", "value": True}],
    }
    staff_api_client.user.user_permissions.add(permission_manage_plugins)
    response = staff_api_client.post_graphql(PLUGIN_UPDATE_MUTATION, variables)
    content = get_graphql_content(response)
    assert len(content["data"]["pluginUpdate"]["errors"]) == 0
    plugin.refresh_from_db()
    use_sandbox_new_value = get_config_value("Use sandbox", plugin.configuration)
    assert type(use_sandbox) == type(use_sandbox_new_value)
Esempio n. 2
0
def test_get_tax_rate_type_choices(vatlayer, settings, monkeypatch):
    expected_choices = [
        "accommodation",
        "admission to cultural events",
        "admission to entertainment events",
    ]
    monkeypatch.setattr(
        "saleor.extensions.plugins.vatlayer.plugin.get_tax_rate_types",
        lambda: expected_choices,
    )
    settings.PLUGINS = ["saleor.extensions.plugins.vatlayer.plugin.VatlayerPlugin"]
    manager = get_extensions_manager()
    choices = manager.get_tax_rate_type_choices()

    # add a default choice
    expected_choices.append("standard")

    assert len(choices) == 4
    for choice in choices:
        assert choice.code in expected_choices
Esempio n. 3
0
def test_calculate_order_shipping(
    order_line, shipping_zone, site_settings, address_usa, settings
):
    settings.AVATAX_USERNAME_OR_ACCOUNT = "test"
    settings.AVATAX_PASSWORD_OR_LICENSE = "test"
    settings.PLUGINS = ["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"]
    manager = get_extensions_manager(plugins=settings.PLUGINS)
    order = order_line.order
    method = shipping_zone.shipping_methods.get()
    order.shipping_address = order.billing_address.get_copy()
    order.shipping_method_name = method.name
    order.shipping_method = method
    order.save()

    site_settings.company_address = address_usa
    site_settings.save()

    price = manager.calculate_order_shipping(order)
    price = quantize_price(price, price.currency)
    assert price == TaxedMoney(net=Money("8.13", "USD"), gross=Money("10.00", "USD"))
Esempio n. 4
0
def test_calculate_checkout_total(
    with_discount,
    expected_net,
    expected_gross,
    voucher_amount,
    taxes_in_prices,
    checkout_with_item,
    discount_info,
    shipping_zone,
    address,
    address_usa,
    site_settings,
    monkeypatch,
    plugin_configuration,
):
    plugin_configuration()
    monkeypatch.setattr(
        "saleor.extensions.plugins.avatax.plugin.get_cached_tax_codes_or_fetch",
        lambda _: {"PC040156": "desc"},
    )
    manager = get_extensions_manager(
        plugins=["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"])
    checkout_with_item.shipping_address = address
    checkout_with_item.save()
    site_settings.company_address = address_usa
    site_settings.include_taxes_in_prices = taxes_in_prices

    voucher_amount = Money(voucher_amount, "USD")
    checkout_with_item.shipping_method = shipping_zone.shipping_methods.get()
    checkout_with_item.discount = voucher_amount
    checkout_with_item.save()
    line = checkout_with_item.lines.first()
    product = line.variant.product
    manager.assign_tax_code_to_object_meta(product, "PC040156")
    product.save()

    discounts = [discount_info] if with_discount else None
    total = manager.calculate_checkout_total(checkout_with_item, discounts)
    total = quantize_price(total, total.currency)
    assert total == TaxedMoney(net=Money(expected_net, "USD"),
                               gross=Money(expected_gross, "USD"))
Esempio n. 5
0
def test_save_plugin_configuration(settings):
    settings.PLUGINS = ["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"]
    manager = get_extensions_manager()
    manager.save_plugin_configuration(
        "Avalara",
        {
            "configuration": [
                {
                    "name": "Username or account",
                    "value": "test"
                },
                {
                    "name": "Password or license",
                    "value": "test"
                },
            ]
        },
    )
    manager.save_plugin_configuration("Avalara", {"active": True})
    plugin_configuration = PluginConfiguration.objects.get(name="Avalara")
    assert plugin_configuration.active
Esempio n. 6
0
def test_plugin_update_saves_boolean_as_boolean(
        staff_api_client_can_manage_plugins, settings):
    settings.PLUGINS = ["tests.extensions.sample_plugins.PluginSample"]
    manager = get_extensions_manager()
    plugin = manager.get_plugin(PluginSample.PLUGIN_NAME)
    use_sandbox = get_config_value("Use sandbox", plugin.configuration)
    variables = {
        "id": plugin.PLUGIN_NAME,
        "active": plugin.active,
        "configuration": [{
            "name": "Use sandbox",
            "value": True
        }],
    }
    response = staff_api_client_can_manage_plugins.post_graphql(
        PLUGIN_UPDATE_MUTATION, variables)
    content = get_graphql_content(response)
    assert len(content["data"]["pluginUpdate"]["errors"]) == 0
    use_sandbox_new_value = get_config_value("Use sandbox",
                                             plugin.configuration)
    assert type(use_sandbox) == type(use_sandbox_new_value)
Esempio n. 7
0
def test_save_plugin_configuration(settings):
    settings.PLUGINS = ["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"]
    manager = get_extensions_manager()
    configuration = manager.get_plugin_configuration("Avalara")
    manager.save_plugin_configuration(
        "Avalara",
        {
            "configuration": [
                {
                    "name": "Username or account",
                    "value": "test"
                },
                {
                    "name": "Password or license",
                    "value": "test"
                },
            ]
        },
    )
    manager.save_plugin_configuration("Avalara", {"active": True})
    configuration.refresh_from_db()
    assert configuration.active
Esempio n. 8
0
def test_calculate_checkout_line_total(
    with_discount,
    expected_net,
    expected_gross,
    taxes_in_prices,
    discount_info,
    checkout_with_item,
    address,
    address_usa,
    site_settings,
    monkeypatch,
    shipping_zone,
    settings,
):
    settings.AVATAX_USERNAME_OR_ACCOUNT = "test"
    settings.AVATAX_PASSWORD_OR_LICENSE = "test"
    settings.PLUGINS = ["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"]
    monkeypatch.setattr(
        "saleor.extensions.plugins.avatax.plugin.get_cached_tax_codes_or_fetch",
        lambda _: {"PC040156": "desc"},
    )
    manager = get_extensions_manager(plugins=settings.PLUGINS)

    checkout_with_item.shipping_address = address
    checkout_with_item.shipping_method = shipping_zone.shipping_methods.get()
    checkout_with_item.save()
    site_settings.company_address = address_usa
    site_settings.include_taxes_in_prices = taxes_in_prices
    site_settings.save()
    line = checkout_with_item.lines.first()
    product = line.variant.product
    manager.assign_tax_code_to_object_meta(product, "PC040156")
    product.save()
    discounts = [discount_info] if with_discount else None
    total = manager.calculate_checkout_line_total(line, discounts)
    total = quantize_price(total, total.currency)
    assert total == TaxedMoney(
        net=Money(expected_net, "USD"), gross=Money(expected_gross, "USD")
    )
Esempio n. 9
0
def test_get_plugin_configuration_hides_all_braintree_secrets(settings):
    settings.PLUGINS = [
        "saleor.payment.gateways.braintree.plugin.BraintreeGatewayPlugin"
    ]
    manager = get_extensions_manager()
    manager.get_plugin_configuration("Braintree")
    manager.save_plugin_configuration(
        "Braintree",
        {
            "configuration": [
                {
                    "name": "Public API key",
                    "value": "123"
                },
                {
                    "name": "Merchant ID",
                    "value": "456"
                },
                {
                    "name": "Secret API key",
                    "value": "456"
                },
            ]
        },
    )
    plugin_configuration = manager.get_plugin_configuration("Braintree")
    configuration = plugin_configuration.configuration
    public_api_key = [
        field for field in configuration if field["name"] == "Public API key"
    ][0]
    secret_api_key = [
        field for field in configuration if field["name"] == "Secret API key"
    ][0]
    merchant_id = [
        field for field in configuration if field["name"] == "Merchant ID"
    ][0]
    assert public_api_key["value"] == "*" * 10
    assert secret_api_key["value"] == "*" * 10
    assert merchant_id["value"] == "*" * 10
Esempio n. 10
0
def test_query_plugin_configuration(staff_api_client,
                                    permission_manage_plugins, settings):
    settings.PLUGINS = ["tests.api.test_extensions.PluginSample"]
    manager = get_extensions_manager()
    plugin_configuration = manager.get_plugin_configuration("PluginSample")
    configuration_id = graphene.Node.to_global_id("Plugin",
                                                  plugin_configuration.pk)

    variables = {"id": configuration_id}
    staff_api_client.user.user_permissions.add(permission_manage_plugins)
    response = staff_api_client.post_graphql(PLUGIN_QUERY, variables)
    content = get_graphql_content(response)
    plugin = content["data"]["plugin"]
    assert plugin["name"] == plugin_configuration.name
    assert plugin["active"] == plugin_configuration.active
    assert plugin["description"] == plugin_configuration.description

    configuration_item = plugin["configuration"][0]
    assert configuration_item["name"] == plugin_configuration.configuration[0][
        "name"]
    assert configuration_item["value"] == plugin_configuration.configuration[
        0]["value"]
Esempio n. 11
0
def test_plugin_configuration_update(
    staff_api_client,
    permission_manage_plugins,
    settings,
    active,
    updated_configuration_item,
):

    settings.PLUGINS = ["tests.api.test_extensions.PluginSample"]
    manager = get_extensions_manager()
    plugin = manager.get_plugin_configuration(plugin_name="PluginSample")
    old_configuration = plugin.configuration
    plugin_id = graphene.Node.to_global_id("Plugin", plugin.pk)
    variables = {
        "id": plugin_id,
        "active": active,
        "configuration": [updated_configuration_item],
    }
    staff_api_client.user.user_permissions.add(permission_manage_plugins)
    response = staff_api_client.post_graphql(PLUGIN_UPDATE_MUTATION, variables)
    get_graphql_content(response)

    plugin.refresh_from_db()
    assert plugin.active == active

    first_configuration_item = plugin.configuration[0]
    assert first_configuration_item["name"] == updated_configuration_item["name"]
    assert first_configuration_item["value"] == updated_configuration_item["value"]
    assert first_configuration_item["type"] == old_configuration[0]["type"]
    assert first_configuration_item["help_text"] == old_configuration[0]["help_text"]
    assert first_configuration_item["label"] == old_configuration[0]["label"]

    second_configuration_item = plugin.configuration[1]
    assert second_configuration_item["name"] == old_configuration[1]["name"]
    assert second_configuration_item["value"] == old_configuration[1]["value"]
    assert second_configuration_item["type"] == old_configuration[1]["type"]
    assert second_configuration_item["help_text"] == old_configuration[1]["help_text"]
    assert second_configuration_item["label"] == old_configuration[1]["label"]
Esempio n. 12
0
def test_calculate_order_line_unit(vatlayer, order_line, shipping_zone,
                                   site_settings):
    manager = get_extensions_manager(
        plugins=["saleor.extensions.plugins.vatlayer.plugin.VatlayerPlugin"])
    order_line.unit_price = TaxedMoney(net=Money("10.00", "USD"),
                                       gross=Money("10.00", "USD"))
    order_line.save()

    order = order_line.order
    method = shipping_zone.shipping_methods.get()
    order.shipping_address = order.billing_address.get_copy()
    order.shipping_method_name = method.name
    order.shipping_method = method
    order.save()

    product = order_line.variant.product
    manager.assign_tax_code_to_object_meta(product, "standard")
    product.save()

    line_price = manager.calculate_order_line_unit(order_line)
    line_price = quantize_price(line_price, line_price.currency)
    assert line_price == TaxedMoney(net=Money("8.13", "USD"),
                                    gross=Money("10.00", "USD"))
Esempio n. 13
0
def test_preprocess_order_creation_wrong_data(
    checkout_with_item,
    monkeypatch,
    address,
    shipping_zone,
    discount_info,
    plugin_configuration,
):
    plugin_configuration("wrong", "wrong")

    monkeypatch.setattr(
        "saleor.extensions.plugins.avatax.plugin.get_cached_tax_codes_or_fetch",
        lambda _: {"PC040156": "desc"},
    )
    manager = get_extensions_manager(
        plugins=["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"])

    checkout_with_item.shipping_address = address
    checkout_with_item.shipping_method = shipping_zone.shipping_methods.get()
    checkout_with_item.save()
    discounts = [discount_info]
    with pytest.raises(TaxError):
        manager.preprocess_order_creation(checkout_with_item, discounts)
Esempio n. 14
0
def test_query_plugins_hides_secret_fields(
    password,
    expected_password,
    api_key,
    expected_api_key,
    staff_api_client,
    permission_manage_plugins,
    settings,
):

    settings.PLUGINS = ["tests.api.test_extensions.PluginSample"]
    manager = get_extensions_manager()
    plugin = manager.get_plugin(PluginSample.PLUGIN_NAME)
    configuration = copy.deepcopy(plugin.configuration)
    for conf_field in configuration:
        if conf_field["name"] == "Password":
            conf_field["value"] = password
        if conf_field["name"] == "API private key":
            conf_field["value"] = api_key
    manager.save_plugin_configuration(PluginSample.PLUGIN_NAME, {
        "active": True,
        "configuration": configuration
    })

    staff_api_client.user.user_permissions.add(permission_manage_plugins)
    response = staff_api_client.post_graphql(PLUGINS_QUERY)
    content = get_graphql_content(response)

    plugins = content["data"]["plugins"]["edges"]
    assert len(plugins) == 1
    plugin = plugins[0]["node"]

    for conf_field in plugin["configuration"]:
        if conf_field["name"] == "Password":
            assert conf_field["value"] == expected_password
        if conf_field["name"] == "API private key":
            assert conf_field["value"] == expected_api_key
Esempio n. 15
0
def test_calculate_checkout_subtotal(
    with_discount,
    expected_net,
    expected_gross,
    taxes_in_prices,
    discount_info,
    checkout_with_item,
    stock,
    monkeypatch,
    site_settings,
    address_usa,
    shipping_zone,
    address,
    plugin_configuration,
):
    plugin_configuration()
    variant = stock.product_variant
    monkeypatch.setattr(
        "saleor.extensions.plugins.avatax.plugin.get_cached_tax_codes_or_fetch",
        lambda _: {"PC040156": "desc"},
    )
    manager = get_extensions_manager(
        plugins=["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"])
    site_settings.company_address = address_usa
    site_settings.include_taxes_in_prices = taxes_in_prices
    site_settings.save()

    checkout_with_item.shipping_address = address
    checkout_with_item.shipping_method = shipping_zone.shipping_methods.get()
    checkout_with_item.save()

    discounts = [discount_info] if with_discount else None
    add_variant_to_checkout(checkout_with_item, variant, 2)
    total = manager.calculate_checkout_subtotal(checkout_with_item, discounts)
    total = quantize_price(total, total.currency)
    assert total == TaxedMoney(net=Money(expected_net, "USD"),
                               gross=Money(expected_gross, "USD"))
Esempio n. 16
0
def test_calculate_checkout_subtotal(
    site_settings,
    vatlayer,
    checkout_with_item,
    address,
    shipping_zone,
    discount_info,
    with_discount,
    expected_net,
    expected_gross,
    taxes_in_prices,
    stock,
):
    variant = stock.product_variant
    site_settings.include_taxes_in_prices = taxes_in_prices
    site_settings.save()

    checkout_with_item.shipping_address = address
    checkout_with_item.shipping_method = shipping_zone.shipping_methods.get()
    checkout_with_item.save()

    manager = get_extensions_manager(
        plugins=["saleor.extensions.plugins.vatlayer.plugin.VatlayerPlugin"]
    )

    product = variant.product
    manager.assign_tax_code_to_object_meta(product, "standard")
    product.save()

    discounts = [discount_info] if with_discount else None
    add_variant_to_checkout(checkout_with_item, variant, 2)
    total = manager.calculate_checkout_subtotal(checkout_with_item, discounts)
    total = quantize_price(total, total.currency)
    assert total == TaxedMoney(
        net=Money(expected_net, "USD"), gross=Money(expected_gross, "USD")
    )
Esempio n. 17
0
def test_show_taxes_on_storefront(vatlayer, settings):
    settings.PLUGINS = ["saleor.extensions.plugins.vatlayer.plugin.VatlayerPlugin"]
    manager = get_extensions_manager()
    assert manager.show_taxes_on_storefront() is True
Esempio n. 18
0
def test_save_plugin_configuration_cannot_be_enabled_without_config(settings):
    settings.PLUGINS = ["saleor.extensions.plugins.vatlayer.plugin.VatlayerPlugin"]
    manager = get_extensions_manager()
    manager.get_plugin_configuration("Vatlayer")
    with pytest.raises(ValidationError):
        manager.save_plugin_configuration("Vatlayer", {"active": True})
Esempio n. 19
0
def test_show_taxes_on_storefront(settings):
    settings.PLUGINS = ["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"]
    settings.AVATAX_USERNAME_OR_ACCOUNT = "test"
    settings.AVATAX_PASSWORD_OR_LICENSE = "test"
    manager = get_extensions_manager()
    assert manager.show_taxes_on_storefront() is False
Esempio n. 20
0
def test_taxes_are_enabled(settings):
    settings.PLUGINS = ["saleor.extensions.plugins.avatax.plugin.AvataxPlugin"]
    settings.AVATAX_USERNAME_OR_ACCOUNT = "test"
    settings.AVATAX_PASSWORD_OR_LICENSE = "test"
    manager = get_extensions_manager()
    assert manager.taxes_are_enabled() is True
Esempio n. 21
0
def test_get_extensions_manager():
    manager_path = "saleor.extensions.manager.ExtensionsManager"
    plugin_path = "tests.extensions.test_manager.SamplePlugin"
    manager = get_extensions_manager(manager_path=manager_path, plugins=[plugin_path])
    assert isinstance(manager, ExtensionsManager)
    assert len(manager.plugins) == 1
Esempio n. 22
0
def test_plugin_configuration_update(
    staff_api_client,
    permission_manage_plugins,
    settings,
    active,
    updated_configuration_item,
):
    query = """
        mutation pluginConfigurationUpdate(
            $id: ID!, $active: Boolean, $configuration: [ConfigurationItemInput]){
            pluginConfigurationUpdate(
                id:$id,
                input:{active: $active, configuration: $configuration}
            ){
            pluginConfiguration{
              name
              active
              configuration{
                name
                value
                type
                helpText
                label
              }
            }
            errors{
              field
              message
            }
          }
        }
    """
    settings.PLUGINS = ["tests.api.test_extensions.PluginSample"]
    manager = get_extensions_manager()
    plugin = manager.get_plugin_configuration(plugin_name="PluginSample")
    old_configuration = plugin.configuration
    plugin_id = graphene.Node.to_global_id("PluginConfiguration", plugin.pk)
    variables = {
        "id": plugin_id,
        "active": active,
        "configuration": [updated_configuration_item],
    }
    staff_api_client.user.user_permissions.add(permission_manage_plugins)
    response = staff_api_client.post_graphql(query, variables)
    get_graphql_content(response)

    plugin.refresh_from_db()
    assert plugin.active == active

    first_configuration_item = plugin.configuration[0]
    assert first_configuration_item["name"] == updated_configuration_item[
        "name"]
    assert first_configuration_item["value"] == updated_configuration_item[
        "value"]
    assert first_configuration_item["type"] == old_configuration[0]["type"]
    assert first_configuration_item["help_text"] == old_configuration[0][
        "help_text"]
    assert first_configuration_item["label"] == old_configuration[0]["label"]

    second_configuration_item = plugin.configuration[1]
    assert second_configuration_item["name"] == old_configuration[1]["name"]
    assert second_configuration_item["value"] == old_configuration[1]["value"]
    assert second_configuration_item["type"] == old_configuration[1]["type"]
    assert second_configuration_item["help_text"] == old_configuration[1][
        "help_text"]
    assert second_configuration_item["label"] == old_configuration[1]["label"]
Esempio n. 23
0
def test_show_taxes_on_storefront(plugin_configuration):
    plugin_configuration()
    manager = get_extensions_manager()
    assert manager.show_taxes_on_storefront() is False