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_recordlist.py

103 lines
3.3 KiB

import testutil
import test_engine
from objtypes import RecordSetStub
class TestRecordList(test_engine.EngineTestCase):
col = testutil.col_schema_row
sample_desc = {
"SCHEMA": [
[1, "Creatures", [
col(1, "Name", "Text", False),
col(2, "Class", "Ref:Class", False),
]],
[2, "Class", [
col(11, "Name", "Text", False),
col(12, "Creatures", "RefList:Creatures", False),
]],
],
"DATA": {
"Class": [
["id", "Name", "Creatures"],
[1, "Mammals", [1, 3]],
[2, "Reptilia", [2, 4]],
],
"Creatures": [
["id","Name", "Class"],
[1, "Cat", 1],
[2, "Chicken", 2],
[3, "Dolphin", 1],
[4, "Turtle", 2],
],
}
}
sample = testutil.parse_test_sample(sample_desc)
def test_removals(self):
# Removing target rows should remove them from RefList columns.
self.load_sample(self.sample)
self.assertTableData("Class", data=[
["id", "Name", "Creatures"],
[1, "Mammals", [1, 3]],
[2, "Reptilia", [2, 4]],
])
self.remove_record("Creatures", 2)
self.assertTableData("Class", data=[
["id", "Name", "Creatures"],
[1, "Mammals", [1, 3]],
[2, "Reptilia", [4]],
])
self.remove_record("Creatures", 4)
self.assertTableData("Class", data=[
["id", "Name", "Creatures"],
[1, "Mammals", [1, 3]],
[2, "Reptilia", None]
])
def test_contains(self):
self.load_sample(self.sample)
self.add_column('Class', 'ContainsInt', type='Any', isFormula=True,
formula="2 in $Creatures")
self.add_column('Class', 'ContainsRec', type='Any', isFormula=True,
formula="Creatures.lookupOne(Name='Chicken') in $Creatures")
self.add_column('Class', 'ContainsWrong', type='Any', isFormula=True,
formula="Class.lookupOne(Name='Reptilia') in $Creatures")
self.assertTableData("Class", data=[
["id", "Name", "Creatures", "ContainsInt", "ContainsRec", "ContainsWrong"],
[1, "Mammals", [1, 3], False, False, False],
[2, "Reptilia", [2, 4], True, True, False]
])
def test_equals(self):
self.load_sample(self.sample)
self.add_column('Class', 'Lookup', type='RefList:Creatures', isFormula=True,
formula="Creatures.lookupRecords(Class=$id)")
self.add_column('Class', 'Equal', type='Any', isFormula=True,
formula="$Lookup == $Creatures")
self.assertTableData("Class", data=[
["id", "Name", "Creatures", "Lookup", "Equal"],
[1, "Mammals", [1, 3], [1, 3], True],
[2, "Reptilia", [2, 4], [2, 4], True],
])
def test_attribute_chain(self):
self.load_sample(self.sample)
self.add_column('Class', 'Names', type='Any', isFormula=True,
formula="$Creatures.Class.Name")
self.add_column('Class', 'Creatures2', type='Any', isFormula=True,
formula="$Creatures.Class.Creatures")
mammals = RecordSetStub("Creatures", [1, 3])
reptiles = RecordSetStub("Creatures", [2, 4])
self.assertTableData("Class", data=[
["id", "Name", "Creatures", "Names", "Creatures2"],
[1, "Mammals", [1, 3], ["Mammals", "Mammals"], [mammals, mammals]],
[2, "Reptilia", [2, 4], ["Reptilia", "Reptilia"], [reptiles, reptiles]],
])