gristlabs_grist-core/sandbox/grist/test_dropdown_condition.py
George Gevoian 3112433a58 (core) Add dropdown conditions
Summary:
Dropdown conditions let you specify a predicate formula that's used to filter
choices and references in their respective autocomplete dropdown menus.

Test Plan: Python and browser tests (WIP).

Reviewers: jarek, paulfitz

Reviewed By: jarek

Subscribers: dsagal, paulfitz

Differential Revision: https://phab.getgrist.com/D4235
2024-04-26 16:57:55 -04:00

109 lines
4.0 KiB
Python

# -*- coding: utf-8 -*-
# pylint:disable=line-too-long
import json
import test_engine
class TestDropdownConditionUserActions(test_engine.EngineTestCase):
def test_dropdown_condition_col_actions(self):
self.apply_user_action(['AddTable', 'Table1', [
{'id': 'A', 'type': 'Text'},
{'id': 'B', 'type': 'Text'},
{'id': 'C', 'type': 'Text'},
]])
# Check that setting dropdownCondition.text automatically sets a parsed version.
out_actions = self.apply_user_action(['UpdateRecord', '_grist_Tables_column', 1, {
"widgetOptions": json.dumps({
"dropdownCondition": {
"text": 'choice.Role == "Manager"',
},
}),
}])
self.assertPartialOutActions(out_actions, { "stored": [
["UpdateRecord", "_grist_Tables_column", 1, {
"widgetOptions": "{\"dropdownCondition\": {\"text\": "
+ "\"choice.Role == \\\"Manager\\\"\", \"parsed\": "
+ "\"[\\\"Eq\\\", [\\\"Attr\\\", [\\\"Name\\\", \\\"choice\\\"], "
+ "\\\"Role\\\"], [\\\"Const\\\", \\\"Manager\\\"]]\"}}"
}]
]})
out_actions = self.apply_user_action(['BulkUpdateRecord', '_grist_Tables_column', [2, 3], {
"widgetOptions": [
json.dumps({
"dropdownCondition": {
"text": 'choice == "Manager"',
},
}),
json.dumps({
"dropdownCondition": {
"text": '$Role == "Manager"',
},
}),
],
}])
self.assertPartialOutActions(out_actions, { "stored": [
["BulkUpdateRecord", "_grist_Tables_column", [2, 3], {
"widgetOptions": [
"{\"dropdownCondition\": {\"text\": \"choice == "
+ "\\\"Manager\\\"\", \"parsed\": \"[\\\"Eq\\\", "
+ "[\\\"Name\\\", \\\"choice\\\"], [\\\"Const\\\", \\\"Manager\\\"]]\"}}",
"{\"dropdownCondition\": {\"text\": \"$Role == "
+ "\\\"Manager\\\"\", \"parsed\": \"[\\\"Eq\\\", "
+ "[\\\"Attr\\\", [\\\"Name\\\", \\\"rec\\\"], \\\"Role\\\"], "
+ "[\\\"Const\\\", \\\"Manager\\\"]]\"}}",
]
}]
]})
def test_dropdown_condition_field_actions(self):
self.apply_user_action(['AddTable', 'Table1', [
{'id': 'A', 'type': 'Text'},
{'id': 'B', 'type': 'Text'},
{'id': 'C', 'type': 'Text'},
]])
# Check that setting dropdownCondition.text automatically sets a parsed version.
out_actions = self.apply_user_action(['UpdateRecord', '_grist_Views_section_field', 1, {
"widgetOptions": json.dumps({
"dropdownCondition": {
"text": 'choice.Role == "Manager"',
},
}),
}])
self.assertPartialOutActions(out_actions, { "stored": [
["UpdateRecord", "_grist_Views_section_field", 1, {
"widgetOptions": "{\"dropdownCondition\": {\"text\": "
+ "\"choice.Role == \\\"Manager\\\"\", \"parsed\": "
+ "\"[\\\"Eq\\\", [\\\"Attr\\\", [\\\"Name\\\", \\\"choice\\\"], "
+ "\\\"Role\\\"], [\\\"Const\\\", \\\"Manager\\\"]]\"}}"
}]
]})
out_actions = self.apply_user_action(['BulkUpdateRecord', '_grist_Views_section_field', [2, 3], {
"widgetOptions": [
json.dumps({
"dropdownCondition": {
"text": 'choice == "Manager"',
},
}),
json.dumps({
"dropdownCondition": {
"text": '$Role == "Manager"',
},
}),
],
}])
self.assertPartialOutActions(out_actions, { "stored": [
["BulkUpdateRecord", "_grist_Views_section_field", [2, 3], {
"widgetOptions": [
"{\"dropdownCondition\": {\"text\": \"choice == "
+ "\\\"Manager\\\"\", \"parsed\": \"[\\\"Eq\\\", "
+ "[\\\"Name\\\", \\\"choice\\\"], [\\\"Const\\\", \\\"Manager\\\"]]\"}}",
"{\"dropdownCondition\": {\"text\": \"$Role == "
+ "\\\"Manager\\\"\", \"parsed\": \"[\\\"Eq\\\", "
+ "[\\\"Attr\\\", [\\\"Name\\\", \\\"rec\\\"], \\\"Role\\\"], "
+ "[\\\"Const\\\", \\\"Manager\\\"]]\"}}",
]
}]
]})