mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 13:00:39 +03:00
Fix reference updating
This commit is contained in:
parent
855de8412c
commit
54da2f4871
|
@ -67,7 +67,7 @@ class RSForm:
|
||||||
resolver.context[cst.alias] = Entity(cst.alias, resolved)
|
resolver.context[cst.alias] = Entity(cst.alias, resolved)
|
||||||
|
|
||||||
graph_defs = self._definition_graph()
|
graph_defs = self._definition_graph()
|
||||||
update_defs = set(expansion + graph_defs.expand_outputs(expansion)).union(changed)
|
update_defs = set(expansion + graph_defs.expand_outputs(expansion + changed)).union(changed)
|
||||||
if len(update_defs) == 0:
|
if len(update_defs) == 0:
|
||||||
return
|
return
|
||||||
for alias in update_defs:
|
for alias in update_defs:
|
||||||
|
|
|
@ -167,6 +167,7 @@ class TestRSForm(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.user1 = User.objects.create(username='User1')
|
self.user1 = User.objects.create(username='User1')
|
||||||
self.user2 = User.objects.create(username='User2')
|
self.user2 = User.objects.create(username='User2')
|
||||||
|
self.schema = RSForm.create(title='Test')
|
||||||
self.assertNotEqual(self.user1, self.user2)
|
self.assertNotEqual(self.user1, self.user2)
|
||||||
|
|
||||||
|
|
||||||
|
@ -224,51 +225,46 @@ class TestRSForm(TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_insert_at_invalid_position(self):
|
def test_insert_at_invalid_position(self):
|
||||||
schema = RSForm.create(title='Test')
|
|
||||||
with self.assertRaises(ValidationError):
|
with self.assertRaises(ValidationError):
|
||||||
schema.insert_new('X5', position=0)
|
self.schema.insert_new('X5', position=0)
|
||||||
|
|
||||||
|
|
||||||
def test_insert_at_invalid_alias(self):
|
def test_insert_at_invalid_alias(self):
|
||||||
schema = RSForm.create(title='Test')
|
self.schema.insert_new('X1')
|
||||||
schema.insert_new('X1')
|
|
||||||
with self.assertRaises(ValidationError):
|
with self.assertRaises(ValidationError):
|
||||||
schema.insert_new('X1')
|
self.schema.insert_new('X1')
|
||||||
|
|
||||||
|
|
||||||
def test_insert_at_reorder(self):
|
def test_insert_at_reorder(self):
|
||||||
schema = RSForm.create(title='Test')
|
self.schema.insert_new('X1')
|
||||||
schema.insert_new('X1')
|
d1 = self.schema.insert_new('D1')
|
||||||
d1 = schema.insert_new('D1')
|
d2 = self.schema.insert_new('D2',position=1)
|
||||||
d2 = schema.insert_new('D2',position=1)
|
|
||||||
d1.refresh_from_db()
|
d1.refresh_from_db()
|
||||||
self.assertEqual(d1.order, 3)
|
self.assertEqual(d1.order, 3)
|
||||||
self.assertEqual(d2.order, 1)
|
self.assertEqual(d2.order, 1)
|
||||||
|
|
||||||
x2 = schema.insert_new('X2', position=4)
|
x2 = self.schema.insert_new('X2', position=4)
|
||||||
self.assertEqual(x2.order, 4)
|
self.assertEqual(x2.order, 4)
|
||||||
|
|
||||||
|
|
||||||
def test_insert_last(self):
|
def test_insert_last(self):
|
||||||
schema = RSForm.create(title='Test')
|
x1 = self.schema.insert_new('X1')
|
||||||
x1 = schema.insert_new('X1')
|
|
||||||
self.assertEqual(x1.order, 1)
|
self.assertEqual(x1.order, 1)
|
||||||
self.assertEqual(x1.schema, schema.item)
|
self.assertEqual(x1.schema, self.schema.item)
|
||||||
|
|
||||||
x2 = schema.insert_new('X2')
|
x2 = self.schema.insert_new('X2')
|
||||||
self.assertEqual(x2.order, 2)
|
self.assertEqual(x2.order, 2)
|
||||||
self.assertEqual(x2.schema, schema.item)
|
self.assertEqual(x2.schema, self.schema.item)
|
||||||
self.assertEqual(x1.order, 1)
|
self.assertEqual(x1.order, 1)
|
||||||
|
|
||||||
|
|
||||||
def test_create_cst_resolve(self):
|
def test_create_cst_resolve(self):
|
||||||
schema = RSForm.create(title='Test')
|
x1 = self.schema.insert_new(
|
||||||
x1 = schema.insert_new(
|
|
||||||
alias='X1',
|
alias='X1',
|
||||||
term_raw='@{X2|datv}',
|
term_raw='@{X2|datv}',
|
||||||
definition_raw='@{X1|datv} @{X2|datv}'
|
definition_raw='@{X1|datv} @{X2|datv}'
|
||||||
)
|
)
|
||||||
x2 = schema.create_cst({
|
x2 = self.schema.create_cst({
|
||||||
'alias': 'X2',
|
'alias': 'X2',
|
||||||
'cst_type': CstType.BASE,
|
'cst_type': CstType.BASE,
|
||||||
'term_raw': 'слон',
|
'term_raw': 'слон',
|
||||||
|
@ -282,18 +278,17 @@ class TestRSForm(TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_insert_copy(self):
|
def test_insert_copy(self):
|
||||||
schema = RSForm.create(title='Test')
|
x1 = self.schema.insert_new(
|
||||||
x1 = schema.insert_new(
|
|
||||||
alias='X10',
|
alias='X10',
|
||||||
convention='Test'
|
convention='Test'
|
||||||
)
|
)
|
||||||
s1 = schema.insert_new(
|
s1 = self.schema.insert_new(
|
||||||
alias='S11',
|
alias='S11',
|
||||||
definition_formal=x1.alias,
|
definition_formal=x1.alias,
|
||||||
definition_raw='@{X10|plur}'
|
definition_raw='@{X10|plur}'
|
||||||
)
|
)
|
||||||
|
|
||||||
result = schema.insert_copy([s1, x1], 2)
|
result = self.schema.insert_copy([s1, x1], 2)
|
||||||
self.assertEqual(len(result), 2)
|
self.assertEqual(len(result), 2)
|
||||||
|
|
||||||
s1.refresh_from_db()
|
s1.refresh_from_db()
|
||||||
|
@ -314,10 +309,9 @@ class TestRSForm(TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_apply_mapping(self):
|
def test_apply_mapping(self):
|
||||||
schema = RSForm.create(title='Test')
|
x1 = self.schema.insert_new('X1')
|
||||||
x1 = schema.insert_new('X1')
|
x2 = self.schema.insert_new('X11')
|
||||||
x2 = schema.insert_new('X11')
|
d1 = self.schema.insert_new(
|
||||||
d1 = schema.insert_new(
|
|
||||||
alias='D1',
|
alias='D1',
|
||||||
definition_formal='X1 = X11 = X2',
|
definition_formal='X1 = X11 = X2',
|
||||||
definition_raw='@{X11|sing}',
|
definition_raw='@{X11|sing}',
|
||||||
|
@ -325,7 +319,7 @@ class TestRSForm(TestCase):
|
||||||
term_raw='@{X1|plur}'
|
term_raw='@{X1|plur}'
|
||||||
)
|
)
|
||||||
|
|
||||||
schema.apply_mapping({x1.alias: 'X3', x2.alias: 'X4'})
|
self.schema.apply_mapping({x1.alias: 'X3', x2.alias: 'X4'})
|
||||||
d1.refresh_from_db()
|
d1.refresh_from_db()
|
||||||
self.assertEqual(d1.definition_formal, 'X3 = X4 = X2', msg='Map IDs in expression')
|
self.assertEqual(d1.definition_formal, 'X3 = X4 = X2', msg='Map IDs in expression')
|
||||||
self.assertEqual(d1.definition_raw, '@{X4|sing}', msg='Map IDs in definition')
|
self.assertEqual(d1.definition_raw, '@{X4|sing}', msg='Map IDs in definition')
|
||||||
|
@ -336,35 +330,33 @@ class TestRSForm(TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_substitute(self):
|
def test_substitute(self):
|
||||||
schema = RSForm.create(title='Test')
|
x1 = self.schema.insert_new(
|
||||||
x1 = schema.insert_new(
|
|
||||||
alias='X1',
|
alias='X1',
|
||||||
term_raw='Test'
|
term_raw='Test'
|
||||||
)
|
)
|
||||||
x2 = schema.insert_new(
|
x2 = self.schema.insert_new(
|
||||||
alias='X2',
|
alias='X2',
|
||||||
term_raw='Test2'
|
term_raw='Test2'
|
||||||
)
|
)
|
||||||
d1 = schema.insert_new(
|
d1 = self.schema.insert_new(
|
||||||
alias='D1',
|
alias='D1',
|
||||||
definition_formal=x1.alias
|
definition_formal=x1.alias
|
||||||
)
|
)
|
||||||
|
|
||||||
schema.substitute(x1, x2, True)
|
self.schema.substitute(x1, x2, True)
|
||||||
x2.refresh_from_db()
|
x2.refresh_from_db()
|
||||||
d1.refresh_from_db()
|
d1.refresh_from_db()
|
||||||
self.assertEqual(schema.constituents().count(), 2)
|
self.assertEqual(self.schema.constituents().count(), 2)
|
||||||
self.assertEqual(x2.term_raw, 'Test')
|
self.assertEqual(x2.term_raw, 'Test')
|
||||||
self.assertEqual(d1.definition_formal, x2.alias)
|
self.assertEqual(d1.definition_formal, x2.alias)
|
||||||
|
|
||||||
|
|
||||||
def test_move_cst(self):
|
def test_move_cst(self):
|
||||||
schema = RSForm.create(title='Test')
|
x1 = self.schema.insert_new('X1')
|
||||||
x1 = schema.insert_new('X1')
|
x2 = self.schema.insert_new('X2')
|
||||||
x2 = schema.insert_new('X2')
|
d1 = self.schema.insert_new('D1')
|
||||||
d1 = schema.insert_new('D1')
|
d2 = self.schema.insert_new('D2')
|
||||||
d2 = schema.insert_new('D2')
|
self.schema.move_cst([x2, d2], 1)
|
||||||
schema.move_cst([x2, d2], 1)
|
|
||||||
x1.refresh_from_db()
|
x1.refresh_from_db()
|
||||||
x2.refresh_from_db()
|
x2.refresh_from_db()
|
||||||
d1.refresh_from_db()
|
d1.refresh_from_db()
|
||||||
|
@ -376,10 +368,9 @@ class TestRSForm(TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_move_cst_down(self):
|
def test_move_cst_down(self):
|
||||||
schema = RSForm.create(title='Test')
|
x1 = self.schema.insert_new('X1')
|
||||||
x1 = schema.insert_new('X1')
|
x2 = self.schema.insert_new('X2')
|
||||||
x2 = schema.insert_new('X2')
|
self.schema.move_cst([x1], 2)
|
||||||
schema.move_cst([x1], 2)
|
|
||||||
x1.refresh_from_db()
|
x1.refresh_from_db()
|
||||||
x2.refresh_from_db()
|
x2.refresh_from_db()
|
||||||
self.assertEqual(x1.order, 2)
|
self.assertEqual(x1.order, 2)
|
||||||
|
@ -387,14 +378,13 @@ class TestRSForm(TestCase):
|
||||||
|
|
||||||
|
|
||||||
def test_reset_aliases(self):
|
def test_reset_aliases(self):
|
||||||
schema = RSForm.create(title='Test')
|
x1 = self.schema.insert_new(
|
||||||
x1 = schema.insert_new(
|
|
||||||
alias='X11',
|
alias='X11',
|
||||||
term_raw='человек',
|
term_raw='человек',
|
||||||
term_resolved='человек'
|
term_resolved='человек'
|
||||||
)
|
)
|
||||||
x2 = schema.insert_new('X21')
|
x2 = self.schema.insert_new('X21')
|
||||||
d1 = schema.insert_new(
|
d1 = self.schema.insert_new(
|
||||||
alias='D11',
|
alias='D11',
|
||||||
convention='D11 - cool',
|
convention='D11 - cool',
|
||||||
definition_formal='X21=X21',
|
definition_formal='X21=X21',
|
||||||
|
@ -403,7 +393,7 @@ class TestRSForm(TestCase):
|
||||||
definition_resolved='test'
|
definition_resolved='test'
|
||||||
)
|
)
|
||||||
|
|
||||||
schema.reset_aliases()
|
self.schema.reset_aliases()
|
||||||
x1.refresh_from_db()
|
x1.refresh_from_db()
|
||||||
x2.refresh_from_db()
|
x2.refresh_from_db()
|
||||||
d1.refresh_from_db()
|
d1.refresh_from_db()
|
||||||
|
@ -415,3 +405,47 @@ class TestRSForm(TestCase):
|
||||||
self.assertEqual(d1.term_raw, '@{X2|sing}')
|
self.assertEqual(d1.term_raw, '@{X2|sing}')
|
||||||
self.assertEqual(d1.definition_raw, '@{X1|datv}')
|
self.assertEqual(d1.definition_raw, '@{X1|datv}')
|
||||||
self.assertEqual(d1.definition_resolved, 'test')
|
self.assertEqual(d1.definition_resolved, 'test')
|
||||||
|
|
||||||
|
|
||||||
|
def test_on_term_change(self):
|
||||||
|
x1 = self.schema.insert_new(
|
||||||
|
alias='X1',
|
||||||
|
term_raw='человек',
|
||||||
|
term_resolved='человек',
|
||||||
|
definition_raw='одному @{X1|datv}',
|
||||||
|
definition_resolved='одному человеку',
|
||||||
|
)
|
||||||
|
x2 = self.schema.insert_new(
|
||||||
|
alias='X2',
|
||||||
|
term_raw='сильный @{X1|sing}',
|
||||||
|
term_resolved='сильный человек',
|
||||||
|
definition_raw=x1.definition_raw,
|
||||||
|
definition_resolved=x1.definition_resolved
|
||||||
|
)
|
||||||
|
x3 = self.schema.insert_new(
|
||||||
|
alias='X3',
|
||||||
|
definition_raw=x1.definition_raw,
|
||||||
|
definition_resolved=x1.definition_resolved
|
||||||
|
)
|
||||||
|
d1 = self.schema.insert_new(
|
||||||
|
alias='D1',
|
||||||
|
definition_raw='очень @{X2|sing}',
|
||||||
|
definition_resolved='очень сильный человек'
|
||||||
|
)
|
||||||
|
|
||||||
|
x1.term_raw='слон'
|
||||||
|
x1.term_resolved='слон'
|
||||||
|
x1.save()
|
||||||
|
|
||||||
|
self.schema.on_term_change([x1.alias])
|
||||||
|
x1.refresh_from_db()
|
||||||
|
x2.refresh_from_db()
|
||||||
|
x3.refresh_from_db()
|
||||||
|
d1.refresh_from_db()
|
||||||
|
|
||||||
|
self.assertEqual(x1.term_raw, 'слон')
|
||||||
|
self.assertEqual(x1.term_resolved, 'слон')
|
||||||
|
self.assertEqual(x1.definition_resolved, 'одному слону')
|
||||||
|
self.assertEqual(x2.definition_resolved, x1.definition_resolved)
|
||||||
|
self.assertEqual(x3.definition_resolved, x1.definition_resolved)
|
||||||
|
self.assertEqual(d1.definition_resolved, 'очень сильный слон')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user