mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-01 11:19:09 +00:00
test: Field filter validation and Custom field as field filter
- Test to block Item fields (which aren’t in Website Item) in E Commerce Settings as filters - Removed unnecessary function and setup in E Commerce Settings test - Removed commented useless test - Test to check custom field as filter
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
|
|
||||||
# See license.txt
|
# See license.txt
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
@@ -11,44 +10,33 @@ from erpnext.e_commerce.doctype.e_commerce_settings.e_commerce_settings import (
|
|||||||
|
|
||||||
|
|
||||||
class TestECommerceSettings(unittest.TestCase):
|
class TestECommerceSettings(unittest.TestCase):
|
||||||
def setUp(self):
|
def tearDown(self):
|
||||||
frappe.db.sql("""delete from `tabSingles` where doctype="Shipping Cart Settings" """)
|
frappe.db.rollback()
|
||||||
|
|
||||||
def get_cart_settings(self):
|
|
||||||
return frappe.get_doc({"doctype": "E Commerce Settings", "company": "_Test Company"})
|
|
||||||
|
|
||||||
# NOTE: Exchangrate API has all enabled currencies that ERPNext supports.
|
|
||||||
# We aren't checking just currency exchange record anymore
|
|
||||||
# while validating price list currency exchange rate to that of company.
|
|
||||||
# The API is being used to fetch the rate which again almost always
|
|
||||||
# gives back a valid value (for valid currencies).
|
|
||||||
# This makes the test obsolete.
|
|
||||||
# Commenting because im not sure if there's a better test we can write
|
|
||||||
|
|
||||||
# def test_exchange_rate_exists(self):
|
|
||||||
# frappe.db.sql("""delete from `tabCurrency Exchange`""")
|
|
||||||
|
|
||||||
# cart_settings = self.get_cart_settings()
|
|
||||||
# cart_settings.price_list = "_Test Price List Rest of the World"
|
|
||||||
# self.assertRaises(ShoppingCartSetupError, cart_settings.validate_exchange_rates_exist)
|
|
||||||
|
|
||||||
# from erpnext.setup.doctype.currency_exchange.test_currency_exchange import (
|
|
||||||
# test_records as currency_exchange_records,
|
|
||||||
# )
|
|
||||||
# frappe.get_doc(currency_exchange_records[0]).insert()
|
|
||||||
# cart_settings.validate_exchange_rates_exist()
|
|
||||||
|
|
||||||
def test_tax_rule_validation(self):
|
def test_tax_rule_validation(self):
|
||||||
frappe.db.sql("update `tabTax Rule` set use_for_shopping_cart = 0")
|
frappe.db.sql("update `tabTax Rule` set use_for_shopping_cart = 0")
|
||||||
frappe.db.commit() # nosemgrep
|
frappe.db.commit() # nosemgrep
|
||||||
|
|
||||||
cart_settings = self.get_cart_settings()
|
cart_settings = frappe.get_doc("E Commerce Settings")
|
||||||
cart_settings.enabled = 1
|
cart_settings.enabled = 1
|
||||||
if not frappe.db.get_value("Tax Rule", {"use_for_shopping_cart": 1}, "name"):
|
if not frappe.db.get_value("Tax Rule", {"use_for_shopping_cart": 1}, "name"):
|
||||||
self.assertRaises(ShoppingCartSetupError, cart_settings.validate_tax_rule)
|
self.assertRaises(ShoppingCartSetupError, cart_settings.validate_tax_rule)
|
||||||
|
|
||||||
frappe.db.sql("update `tabTax Rule` set use_for_shopping_cart = 1")
|
frappe.db.sql("update `tabTax Rule` set use_for_shopping_cart = 1")
|
||||||
|
|
||||||
|
def test_invalid_filter_fields(self):
|
||||||
|
"Check if Item fields are blocked in E Commerce Settings filter fields."
|
||||||
|
from frappe.custom.doctype.custom_field.custom_field import create_custom_field
|
||||||
|
|
||||||
|
create_custom_field(
|
||||||
|
"Item",
|
||||||
|
dict(owner="Administrator", fieldname="test_data", label="Test", fieldtype="Data"),
|
||||||
|
)
|
||||||
|
settings = frappe.get_doc("E Commerce Settings")
|
||||||
|
settings.append("filter_fields", {"fieldname": "test_data"})
|
||||||
|
|
||||||
|
self.assertRaises(frappe.ValidationError, settings.save)
|
||||||
|
|
||||||
|
|
||||||
def setup_e_commerce_settings(values_dict):
|
def setup_e_commerce_settings(values_dict):
|
||||||
"Accepts a dict of values that updates E Commerce Settings."
|
"Accepts a dict of values that updates E Commerce Settings."
|
||||||
|
|||||||
@@ -277,6 +277,54 @@ class TestProductDataEngine(unittest.TestCase):
|
|||||||
# tear down
|
# tear down
|
||||||
setup_e_commerce_settings({"enable_attribute_filters": 1, "hide_variants": 0})
|
setup_e_commerce_settings({"enable_attribute_filters": 1, "hide_variants": 0})
|
||||||
|
|
||||||
|
def test_custom_field_as_filter(self):
|
||||||
|
"Test if custom field functions as filter correctly."
|
||||||
|
from frappe.custom.doctype.custom_field.custom_field import create_custom_field
|
||||||
|
|
||||||
|
create_custom_field(
|
||||||
|
"Website Item",
|
||||||
|
dict(
|
||||||
|
owner="Administrator",
|
||||||
|
fieldname="supplier",
|
||||||
|
label="Supplier",
|
||||||
|
fieldtype="Link",
|
||||||
|
options="Supplier",
|
||||||
|
insert_after="on_backorder",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
frappe.db.set_value(
|
||||||
|
"Website Item", {"item_code": "Test 11I Laptop"}, "supplier", "_Test Supplier"
|
||||||
|
)
|
||||||
|
frappe.db.set_value(
|
||||||
|
"Website Item", {"item_code": "Test 12I Laptop"}, "supplier", "_Test Supplier 1"
|
||||||
|
)
|
||||||
|
|
||||||
|
settings = frappe.get_doc("E Commerce Settings")
|
||||||
|
settings.append("filter_fields", {"fieldname": "supplier"})
|
||||||
|
settings.save()
|
||||||
|
|
||||||
|
filter_engine = ProductFiltersBuilder()
|
||||||
|
field_filters = filter_engine.get_field_filters()
|
||||||
|
custom_filter = field_filters[1]
|
||||||
|
filter_values = custom_filter[1]
|
||||||
|
|
||||||
|
self.assertEqual(custom_filter[0].options, "Supplier")
|
||||||
|
self.assertEqual(len(filter_values), 2)
|
||||||
|
self.assertIn("_Test Supplier", filter_values)
|
||||||
|
|
||||||
|
# test if custom filter works in query
|
||||||
|
field_filters = {"supplier": "_Test Supplier 1"}
|
||||||
|
engine = ProductQuery()
|
||||||
|
result = engine.query(
|
||||||
|
attributes={}, fields=field_filters, search_term=None, start=0, item_group=None
|
||||||
|
)
|
||||||
|
items = result.get("items")
|
||||||
|
|
||||||
|
# check if only 'Raw Material' are fetched in the right order
|
||||||
|
self.assertEqual(len(items), 1)
|
||||||
|
self.assertEqual(items[0].get("item_code"), "Test 12I Laptop")
|
||||||
|
|
||||||
|
|
||||||
def create_variant_web_item():
|
def create_variant_web_item():
|
||||||
"Create Variant and Template Website Items."
|
"Create Variant and Template Website Items."
|
||||||
|
|||||||
Reference in New Issue
Block a user