mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
85 lines
3.5 KiB
Python
85 lines
3.5 KiB
Python
|
# -*- 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"]
|
||
|
]})
|