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)
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
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"))
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"))
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
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)
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
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") )
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
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"]
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"]
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"))
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)
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
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"))
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") )
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
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})
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
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
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
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"]
def test_show_taxes_on_storefront(plugin_configuration): plugin_configuration() manager = get_extensions_manager() assert manager.show_taxes_on_storefront() is False