You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gristlabs_grist-core/sandbox/grist/test_rules_grid.py

85 lines
3.5 KiB

# -*- coding: utf-8 -*-
import test_engine
class TestGridRules(test_engine.EngineTestCase):
# Helper for rules action
def add_empty(self):
return self.apply_user_action(['AddEmptyRule', "Table1", 0, 0])
def set_rule(self, rule_index, formula):
rules = self.engine.docmodel.tables.lookupOne(tableId='Table1').rawViewSectionRef.rules
rule = list(rules)[rule_index]
return self.apply_user_action(['UpdateRecord', '_grist_Tables_column',
rule.id, {"formula": formula}])
def remove_rule(self, rule_index):
rules = self.engine.docmodel.tables.lookupOne(tableId='Table1').rawViewSectionRef.rules
rule = list(rules)[rule_index]
return self.apply_user_action(['RemoveColumn', 'Table1', rule.colId])
def test_simple_rules(self):
self.apply_user_action(['AddEmptyTable', None])
self.apply_user_action(['AddRecord', "Table1", None, {"A": 1}])
self.apply_user_action(['AddRecord', "Table1", None, {"A": 2}])
self.apply_user_action(['AddRecord', "Table1", None, {"A": 3}])
out_actions = self.add_empty()
self.assertPartialOutActions(out_actions, {"stored": [
["AddColumn", "Table1", "gristHelper_RowConditionalRule",
{"formula": "", "isFormula": True, "type": "Any"}],
["AddRecord", "_grist_Tables_column", 5,
{"colId": "gristHelper_RowConditionalRule", "formula": "", "isFormula": True,
"label": "gristHelper_RowConditionalRule", "parentId": 1, "parentPos": 5.0,
"type": "Any",
"widgetOptions": ""}],
["UpdateRecord", "_grist_Views_section", 2, {"rules": ["L", 5]}],
]})
out_actions = self.set_rule(0, "$A == 1")
self.assertPartialOutActions(out_actions, {"stored": [
["ModifyColumn", "Table1", "gristHelper_RowConditionalRule",
{"formula": "$A == 1"}],
["UpdateRecord", "_grist_Tables_column", 5, {"formula": "$A == 1"}],
["BulkUpdateRecord", "Table1", [1, 2, 3],
{"gristHelper_RowConditionalRule": [True, False, False]}],
]})
# Replace this rule with another rule to mark A = 2
out_actions = self.set_rule(0, "$A == 2")
self.assertPartialOutActions(out_actions, {"stored": [
["ModifyColumn", "Table1", "gristHelper_RowConditionalRule",
{"formula": "$A == 2"}],
["UpdateRecord", "_grist_Tables_column", 5, {"formula": "$A == 2"}],
["BulkUpdateRecord", "Table1", [1, 2],
{"gristHelper_RowConditionalRule": [False, True]}],
]})
# Add another rule A = 3
self.add_empty()
out_actions = self.set_rule(1, "$A == 3")
self.assertPartialOutActions(out_actions, {"stored": [
["ModifyColumn", "Table1", "gristHelper_RowConditionalRule2",
{"formula": "$A == 3"}],
["UpdateRecord", "_grist_Tables_column", 6, {"formula": "$A == 3"}],
["BulkUpdateRecord", "Table1", [1, 2, 3],
{"gristHelper_RowConditionalRule2": [False, False, True]}],
]})
# Remove the last rule
out_actions = self.remove_rule(1)
self.assertPartialOutActions(out_actions, {"stored": [
["RemoveRecord", "_grist_Tables_column", 6],
["UpdateRecord", "_grist_Views_section", 2, {"rules": ["L", 5]}],
["RemoveColumn", "Table1", "gristHelper_RowConditionalRule2"]
]})
# Remove last rule
out_actions = self.remove_rule(0)
self.assertPartialOutActions(out_actions, {"stored": [
["RemoveRecord", "_grist_Tables_column", 5],
["UpdateRecord", "_grist_Views_section", 2, {"rules": None}],
["RemoveColumn", "Table1", "gristHelper_RowConditionalRule"]
]})