gristlabs_grist-core/sandbox/grist/test_actions.py
Paul Fitzpatrick b82eec714a (core) move data engine code to core
Summary:
this moves sandbox/grist to core, and adds a requirements.txt
file for reconstructing the content of sandbox/thirdparty.

Test Plan:
existing tests pass.
Tested core functionality manually.  Tested docker build manually.

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D2563
2020-07-29 08:57:25 -04:00

80 lines
3.5 KiB
Python

import unittest
import actions
class TestActions(unittest.TestCase):
action_obj1 = actions.UpdateRecord("foo", 17, {"bar": "baz"})
doc_action1 = ["UpdateRecord", "foo", 17, {"bar": "baz"}]
def test_convert(self):
self.assertEqual(actions.get_action_repr(self.action_obj1), self.doc_action1)
self.assertEqual(actions.action_from_repr(self.doc_action1), self.action_obj1)
with self.assertRaises(ValueError) as err:
actions.action_from_repr(["Foo", "bar"])
self.assertTrue("Foo" in str(err.exception))
def test_prune_actions(self):
# prune_actions is in-place, so we make a new list every time.
def alist():
return [
actions.BulkUpdateRecord("Table1", [1,2,3], {'Foo': [10,20,30]}),
actions.BulkUpdateRecord("Table2", [1,2,3], {'Foo': [10,20,30], 'Bar': ['a','b','c']}),
actions.UpdateRecord("Table1", 17, {'Foo': 10}),
actions.UpdateRecord("Table2", 18, {'Foo': 10, 'Bar': 'a'}),
actions.AddRecord("Table1", 17, {'Foo': 10}),
actions.BulkAddRecord("Table2", 18, {'Foo': 10, 'Bar': 'a'}),
actions.ReplaceTableData("Table2", 18, {'Foo': 10, 'Bar': 'a'}),
actions.RemoveRecord("Table1", 17),
actions.BulkRemoveRecord("Table2", [17,18]),
actions.AddColumn("Table1", "Foo", {"type": "Text"}),
actions.RenameColumn("Table1", "Foo", "Bar"),
actions.ModifyColumn("Table1", "Foo", {"type": "Text"}),
actions.RemoveColumn("Table1", "Foo"),
actions.AddTable("THello", [{"id": "Foo"}, {"id": "Bar"}]),
actions.RemoveTable("THello"),
actions.RenameTable("THello", "TWorld"),
]
def prune(table_id, col_id):
a = alist()
actions.prune_actions(a, table_id, col_id)
return a
self.assertEqual(prune('Table1', 'Foo'), [
actions.BulkUpdateRecord("Table2", [1,2,3], {'Foo': [10,20,30], 'Bar': ['a','b','c']}),
actions.UpdateRecord("Table2", 18, {'Foo': 10, 'Bar': 'a'}),
actions.BulkAddRecord("Table2", 18, {'Foo': 10, 'Bar': 'a'}),
actions.ReplaceTableData("Table2", 18, {'Foo': 10, 'Bar': 'a'}),
actions.RemoveRecord("Table1", 17),
actions.BulkRemoveRecord("Table2", [17,18]),
# It doesn't do anything with column renames; it can be addressed if needed.
actions.RenameColumn("Table1", "Foo", "Bar"),
# It doesn't do anything with AddTable, which is expected.
actions.AddTable("THello", [{"id": "Foo"}, {"id": "Bar"}]),
actions.RemoveTable("THello"),
actions.RenameTable("THello", "TWorld"),
])
self.assertEqual(prune('Table2', 'Foo'), [
actions.BulkUpdateRecord("Table1", [1,2,3], {'Foo': [10,20,30]}),
actions.BulkUpdateRecord("Table2", [1,2,3], {'Bar': ['a','b','c']}),
actions.UpdateRecord("Table1", 17, {'Foo': 10}),
actions.UpdateRecord("Table2", 18, {'Bar': 'a'}),
actions.AddRecord("Table1", 17, {'Foo': 10}),
actions.BulkAddRecord("Table2", 18, {'Bar': 'a'}),
actions.ReplaceTableData("Table2", 18, {'Bar': 'a'}),
actions.RemoveRecord("Table1", 17),
actions.BulkRemoveRecord("Table2", [17,18]),
actions.AddColumn("Table1", "Foo", {"type": "Text"}),
actions.RenameColumn("Table1", "Foo", "Bar"),
actions.ModifyColumn("Table1", "Foo", {"type": "Text"}),
actions.RemoveColumn("Table1", "Foo"),
actions.AddTable("THello", [{"id": "Foo"}, {"id": "Bar"}]),
actions.RemoveTable("THello"),
actions.RenameTable("THello", "TWorld"),
])
if __name__ == "__main__":
unittest.main()