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:
parent
6d750e185e
commit
8981405a62
@ -1,5 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
import unittest
|
||||
|
||||
@ -11,44 +10,33 @@ from erpnext.e_commerce.doctype.e_commerce_settings.e_commerce_settings import (
|
||||
|
||||
|
||||
class TestECommerceSettings(unittest.TestCase):
|
||||
def setUp(self):
|
||||
frappe.db.sql("""delete from `tabSingles` where doctype="Shipping Cart Settings" """)
|
||||
|
||||
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 tearDown(self):
|
||||
frappe.db.rollback()
|
||||
|
||||
def test_tax_rule_validation(self):
|
||||
frappe.db.sql("update `tabTax Rule` set use_for_shopping_cart = 0")
|
||||
frappe.db.commit() # nosemgrep
|
||||
|
||||
cart_settings = self.get_cart_settings()
|
||||
cart_settings = frappe.get_doc("E Commerce Settings")
|
||||
cart_settings.enabled = 1
|
||||
if not frappe.db.get_value("Tax Rule", {"use_for_shopping_cart": 1}, "name"):
|
||||
self.assertRaises(ShoppingCartSetupError, cart_settings.validate_tax_rule)
|
||||
|
||||
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):
|
||||
"Accepts a dict of values that updates E Commerce Settings."
|
||||
|
@ -277,6 +277,54 @@ class TestProductDataEngine(unittest.TestCase):
|
||||
# tear down
|
||||
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():
|
||||
"Create Variant and Template Website Items."
|
||||
|
Loading…
x
Reference in New Issue
Block a user