2023-07-15 17:46:19 +03:00
|
|
|
|
''' Testing models '''
|
|
|
|
|
import json
|
|
|
|
|
from django.test import TestCase
|
|
|
|
|
from django.db.utils import IntegrityError
|
|
|
|
|
from django.forms import ValidationError
|
|
|
|
|
|
|
|
|
|
from apps.rsform.models import (
|
2023-08-26 17:26:49 +03:00
|
|
|
|
RSForm, Constituenta, CstType,
|
2023-08-25 22:51:20 +03:00
|
|
|
|
User,
|
2023-08-26 17:26:49 +03:00
|
|
|
|
LibraryItem, LibraryItemType, Subscription
|
2023-07-15 17:46:19 +03:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestConstituenta(TestCase):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
''' Testing Constituenta model. '''
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def setUp(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
self.schema1 = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test1')
|
|
|
|
|
self.schema2 = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test2')
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
|
|
|
|
def test_str(self):
|
|
|
|
|
testStr = 'X1'
|
|
|
|
|
cst = Constituenta.objects.create(alias=testStr, schema=self.schema1, order=1, convention='Test')
|
|
|
|
|
self.assertEqual(str(cst), testStr)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-24 22:34:03 +03:00
|
|
|
|
def test_url(self):
|
|
|
|
|
testStr = 'X1'
|
|
|
|
|
cst = Constituenta.objects.create(alias=testStr, schema=self.schema1, order=1, convention='Test')
|
2023-08-26 17:26:49 +03:00
|
|
|
|
self.assertEqual(cst.get_absolute_url(), f'/api/constituents/{cst.id}')
|
2023-07-24 22:34:03 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_order_not_null(self):
|
|
|
|
|
with self.assertRaises(IntegrityError):
|
|
|
|
|
Constituenta.objects.create(alias='X1', schema=self.schema1)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_order_positive_integer(self):
|
|
|
|
|
with self.assertRaises(IntegrityError):
|
|
|
|
|
Constituenta.objects.create(alias='X1', schema=self.schema1, order=-1)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_order_min_value(self):
|
|
|
|
|
with self.assertRaises(ValidationError):
|
|
|
|
|
cst = Constituenta.objects.create(alias='X1', schema=self.schema1, order=0)
|
|
|
|
|
cst.full_clean()
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_schema_not_null(self):
|
|
|
|
|
with self.assertRaises(IntegrityError):
|
|
|
|
|
Constituenta.objects.create(alias='X1', order=1)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_create_default(self):
|
|
|
|
|
cst = Constituenta.objects.create(
|
|
|
|
|
alias='X1',
|
|
|
|
|
schema=self.schema1,
|
|
|
|
|
order=1
|
|
|
|
|
)
|
|
|
|
|
self.assertEqual(cst.schema, self.schema1)
|
|
|
|
|
self.assertEqual(cst.order, 1)
|
|
|
|
|
self.assertEqual(cst.alias, 'X1')
|
2023-07-26 23:11:00 +03:00
|
|
|
|
self.assertEqual(cst.cst_type, CstType.BASE)
|
2023-07-15 17:46:19 +03:00
|
|
|
|
self.assertEqual(cst.convention, '')
|
|
|
|
|
self.assertEqual(cst.definition_formal, '')
|
2023-07-24 22:34:03 +03:00
|
|
|
|
self.assertEqual(cst.term_raw, '')
|
|
|
|
|
self.assertEqual(cst.term_resolved, '')
|
|
|
|
|
self.assertEqual(cst.term_forms, [])
|
|
|
|
|
self.assertEqual(cst.definition_resolved, '')
|
|
|
|
|
self.assertEqual(cst.definition_raw, '')
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
|
|
|
|
|
2023-08-25 22:51:20 +03:00
|
|
|
|
class TestLibraryItem(TestCase):
|
|
|
|
|
''' Testing LibraryItem model. '''
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def setUp(self):
|
|
|
|
|
self.user1 = User.objects.create(username='User1')
|
|
|
|
|
self.user2 = User.objects.create(username='User2')
|
|
|
|
|
self.assertNotEqual(self.user1, self.user2)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_str(self):
|
|
|
|
|
testStr = 'Test123'
|
2024-03-27 17:37:37 +03:00
|
|
|
|
item = LibraryItem.objects.create(
|
|
|
|
|
item_type=LibraryItemType.RSFORM,
|
|
|
|
|
title=testStr,
|
|
|
|
|
owner=self.user1,
|
|
|
|
|
alias='КС1'
|
|
|
|
|
)
|
2023-08-25 22:51:20 +03:00
|
|
|
|
self.assertEqual(str(item), testStr)
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-24 22:34:03 +03:00
|
|
|
|
def test_url(self):
|
|
|
|
|
testStr = 'Test123'
|
2024-03-27 17:37:37 +03:00
|
|
|
|
item = LibraryItem.objects.create(
|
|
|
|
|
item_type=LibraryItemType.RSFORM,
|
|
|
|
|
title=testStr,
|
|
|
|
|
owner=self.user1,
|
|
|
|
|
alias='КС1'
|
|
|
|
|
)
|
2023-09-22 23:26:22 +03:00
|
|
|
|
self.assertEqual(item.get_absolute_url(), f'/api/library/{item.id}')
|
2023-07-24 22:34:03 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_create_default(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test')
|
|
|
|
|
self.assertIsNone(item.owner)
|
|
|
|
|
self.assertEqual(item.title, 'Test')
|
|
|
|
|
self.assertEqual(item.alias, '')
|
|
|
|
|
self.assertEqual(item.comment, '')
|
|
|
|
|
self.assertEqual(item.is_common, False)
|
|
|
|
|
self.assertEqual(item.is_canonical, False)
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_create(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
item = LibraryItem.objects.create(
|
|
|
|
|
item_type=LibraryItemType.RSFORM,
|
2023-07-15 17:46:19 +03:00
|
|
|
|
title='Test',
|
|
|
|
|
owner=self.user1,
|
|
|
|
|
alias='KS1',
|
|
|
|
|
comment='Test comment',
|
2023-08-25 22:51:20 +03:00
|
|
|
|
is_common=True,
|
|
|
|
|
is_canonical=True
|
2023-07-15 17:46:19 +03:00
|
|
|
|
)
|
2023-08-25 22:51:20 +03:00
|
|
|
|
self.assertEqual(item.owner, self.user1)
|
|
|
|
|
self.assertEqual(item.title, 'Test')
|
|
|
|
|
self.assertEqual(item.alias, 'KS1')
|
|
|
|
|
self.assertEqual(item.comment, 'Test comment')
|
|
|
|
|
self.assertEqual(item.is_common, True)
|
|
|
|
|
self.assertEqual(item.is_canonical, True)
|
2023-08-26 17:26:49 +03:00
|
|
|
|
self.assertTrue(Subscription.objects.filter(user=item.owner, item=item).exists())
|
2023-08-25 22:51:20 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-08-26 17:26:49 +03:00
|
|
|
|
def test_subscribe(self):
|
|
|
|
|
item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test')
|
|
|
|
|
self.assertEqual(len(item.subscribers()), 0)
|
|
|
|
|
|
|
|
|
|
self.assertTrue(Subscription.subscribe(self.user1, item))
|
|
|
|
|
self.assertEqual(len(item.subscribers()), 1)
|
|
|
|
|
self.assertTrue(self.user1 in item.subscribers())
|
|
|
|
|
|
|
|
|
|
self.assertFalse(Subscription.subscribe(self.user1, item))
|
|
|
|
|
self.assertEqual(len(item.subscribers()), 1)
|
|
|
|
|
|
|
|
|
|
self.assertTrue(Subscription.subscribe(self.user2, item))
|
|
|
|
|
self.assertEqual(len(item.subscribers()), 2)
|
|
|
|
|
self.assertTrue(self.user1 in item.subscribers())
|
|
|
|
|
self.assertTrue(self.user2 in item.subscribers())
|
|
|
|
|
|
|
|
|
|
self.user1.delete()
|
|
|
|
|
self.assertEqual(len(item.subscribers()), 1)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-08-26 17:26:49 +03:00
|
|
|
|
def test_unsubscribe(self):
|
|
|
|
|
item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test')
|
|
|
|
|
self.assertFalse(Subscription.unsubscribe(self.user1, item))
|
|
|
|
|
Subscription.subscribe(self.user1, item)
|
|
|
|
|
Subscription.subscribe(self.user2, item)
|
|
|
|
|
self.assertEqual(len(item.subscribers()), 2)
|
|
|
|
|
|
|
|
|
|
self.assertTrue(Subscription.unsubscribe(self.user1, item))
|
|
|
|
|
self.assertEqual(len(item.subscribers()), 1)
|
|
|
|
|
self.assertTrue(self.user2 in item.subscribers())
|
|
|
|
|
|
|
|
|
|
self.assertFalse(Subscription.unsubscribe(self.user1, item))
|
2023-08-25 22:51:20 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-08-25 22:51:20 +03:00
|
|
|
|
class TestRSForm(TestCase):
|
|
|
|
|
''' Testing RSForm wrapper. '''
|
|
|
|
|
def setUp(self):
|
|
|
|
|
self.user1 = User.objects.create(username='User1')
|
|
|
|
|
self.user2 = User.objects.create(username='User2')
|
|
|
|
|
self.assertNotEqual(self.user1, self.user2)
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_constituents(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema1 = RSForm.create(title='Test1')
|
|
|
|
|
schema2 = RSForm.create(title='Test2')
|
2023-07-15 17:46:19 +03:00
|
|
|
|
self.assertFalse(schema1.constituents().exists())
|
|
|
|
|
self.assertFalse(schema2.constituents().exists())
|
|
|
|
|
|
2023-08-25 22:51:20 +03:00
|
|
|
|
Constituenta.objects.create(alias='X1', schema=schema1.item, order=1)
|
|
|
|
|
Constituenta.objects.create(alias='X2', schema=schema1.item, order=2)
|
2023-07-15 17:46:19 +03:00
|
|
|
|
self.assertTrue(schema1.constituents().exists())
|
|
|
|
|
self.assertFalse(schema2.constituents().exists())
|
|
|
|
|
self.assertEqual(schema1.constituents().count(), 2)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2024-03-14 20:22:02 +03:00
|
|
|
|
def test_get_max_index(self):
|
|
|
|
|
schema1 = RSForm.create(title='Test1')
|
|
|
|
|
Constituenta.objects.create(alias='X1', schema=schema1.item, order=1)
|
|
|
|
|
Constituenta.objects.create(alias='D2', cst_type=CstType.TERM, schema=schema1.item, order=2)
|
|
|
|
|
self.assertEqual(schema1.get_max_index(CstType.BASE), 1)
|
|
|
|
|
self.assertEqual(schema1.get_max_index(CstType.TERM), 2)
|
|
|
|
|
self.assertEqual(schema1.get_max_index(CstType.AXIOM), 0)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_insert_at(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new('X1')
|
|
|
|
|
self.assertEqual(x1.order, 1)
|
|
|
|
|
self.assertEqual(x1.schema, schema.item)
|
|
|
|
|
|
|
|
|
|
x2 = schema.insert_new('X2', position=1)
|
|
|
|
|
x1.refresh_from_db()
|
|
|
|
|
self.assertEqual(x2.order, 1)
|
|
|
|
|
self.assertEqual(x2.schema, schema.item)
|
|
|
|
|
self.assertEqual(x1.order, 2)
|
|
|
|
|
|
|
|
|
|
x3 = schema.insert_new('X3', position=4)
|
|
|
|
|
x2.refresh_from_db()
|
|
|
|
|
x1.refresh_from_db()
|
|
|
|
|
self.assertEqual(x3.order, 3)
|
|
|
|
|
self.assertEqual(x3.schema, schema.item)
|
|
|
|
|
self.assertEqual(x2.order, 1)
|
|
|
|
|
self.assertEqual(x1.order, 2)
|
|
|
|
|
|
|
|
|
|
x4 = schema.insert_new('X4', position=3)
|
|
|
|
|
x3.refresh_from_db()
|
|
|
|
|
x2.refresh_from_db()
|
|
|
|
|
x1.refresh_from_db()
|
|
|
|
|
self.assertEqual(x4.order, 3)
|
|
|
|
|
self.assertEqual(x4.schema, schema.item)
|
|
|
|
|
self.assertEqual(x3.order, 4)
|
|
|
|
|
self.assertEqual(x2.order, 1)
|
|
|
|
|
self.assertEqual(x1.order, 2)
|
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
2023-10-23 20:55:12 +03:00
|
|
|
|
def test_insert_at_invalid_position(self):
|
|
|
|
|
schema = RSForm.create(title='Test')
|
2023-07-15 17:46:19 +03:00
|
|
|
|
with self.assertRaises(ValidationError):
|
2024-03-27 17:37:37 +03:00
|
|
|
|
schema.insert_new('X5', position=0)
|
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
2023-10-23 20:55:12 +03:00
|
|
|
|
def test_insert_at_invalid_alias(self):
|
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
schema.insert_new('X1')
|
2023-10-23 20:55:12 +03:00
|
|
|
|
with self.assertRaises(ValidationError):
|
2024-03-27 17:37:37 +03:00
|
|
|
|
schema.insert_new('X1')
|
|
|
|
|
|
2023-10-23 20:55:12 +03:00
|
|
|
|
|
2023-07-23 15:23:01 +03:00
|
|
|
|
def test_insert_at_reorder(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
schema.insert_new('X1')
|
|
|
|
|
d1 = schema.insert_new('D1')
|
|
|
|
|
d2 = schema.insert_new('D2',position=1)
|
2023-07-23 15:23:01 +03:00
|
|
|
|
d1.refresh_from_db()
|
|
|
|
|
self.assertEqual(d1.order, 3)
|
2023-08-29 15:17:16 +03:00
|
|
|
|
self.assertEqual(d2.order, 1)
|
2023-07-23 15:23:01 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x2 = schema.insert_new('X2', position=4)
|
2023-08-29 15:17:16 +03:00
|
|
|
|
self.assertEqual(x2.order, 4)
|
2023-07-23 15:23:01 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
|
def test_insert_last(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new('X1')
|
|
|
|
|
self.assertEqual(x1.order, 1)
|
|
|
|
|
self.assertEqual(x1.schema, schema.item)
|
|
|
|
|
|
|
|
|
|
x2 = schema.insert_new('X2')
|
|
|
|
|
self.assertEqual(x2.order, 2)
|
|
|
|
|
self.assertEqual(x2.schema, schema.item)
|
|
|
|
|
self.assertEqual(x1.order, 1)
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
|
|
|
|
|
2023-08-21 20:20:03 +03:00
|
|
|
|
def test_create_cst_resolve(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new(
|
|
|
|
|
alias='X1',
|
|
|
|
|
term_raw='@{X2|datv}',
|
|
|
|
|
definition_raw='@{X1|datv} @{X2|datv}'
|
|
|
|
|
)
|
|
|
|
|
x2 = schema.create_cst({
|
2023-08-21 20:20:03 +03:00
|
|
|
|
'alias': 'X2',
|
|
|
|
|
'cst_type': CstType.BASE,
|
|
|
|
|
'term_raw': 'слон',
|
|
|
|
|
'definition_raw': '@{X1|plur} @{X2|plur}'
|
|
|
|
|
})
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1.refresh_from_db()
|
|
|
|
|
self.assertEqual(x1.term_resolved, 'слону')
|
|
|
|
|
self.assertEqual(x1.definition_resolved, 'слону слону')
|
|
|
|
|
self.assertEqual(x2.term_resolved, 'слон')
|
|
|
|
|
self.assertEqual(x2.definition_resolved, 'слонам слоны')
|
|
|
|
|
|
2023-08-21 20:20:03 +03:00
|
|
|
|
|
2024-03-22 17:01:14 +03:00
|
|
|
|
def test_insert_copy(self):
|
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new(
|
|
|
|
|
alias='X10',
|
|
|
|
|
convention='Test'
|
|
|
|
|
)
|
|
|
|
|
s1 = schema.insert_new(
|
|
|
|
|
alias='S11',
|
|
|
|
|
definition_formal=x1.alias,
|
|
|
|
|
definition_raw='@{X10|plur}'
|
|
|
|
|
)
|
2024-03-22 17:01:14 +03:00
|
|
|
|
|
|
|
|
|
result = schema.insert_copy([s1, x1], 2)
|
|
|
|
|
self.assertEqual(len(result), 2)
|
|
|
|
|
|
|
|
|
|
s1.refresh_from_db()
|
|
|
|
|
self.assertEqual(s1.order, 4)
|
|
|
|
|
|
|
|
|
|
x2 = result[1]
|
|
|
|
|
self.assertEqual(x2.order, 3)
|
|
|
|
|
self.assertEqual(x2.alias, 'X11')
|
|
|
|
|
self.assertEqual(x2.cst_type, CstType.BASE)
|
|
|
|
|
self.assertEqual(x2.convention, x1.convention)
|
|
|
|
|
|
|
|
|
|
s2 = result[0]
|
|
|
|
|
self.assertEqual(s2.order, 2)
|
|
|
|
|
self.assertEqual(s2.alias, 'S12')
|
|
|
|
|
self.assertEqual(s2.cst_type, CstType.STRUCTURED)
|
|
|
|
|
self.assertEqual(s2.definition_formal, x2.alias)
|
|
|
|
|
self.assertEqual(s2.definition_raw, '@{X11|plur}')
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2024-01-15 23:37:14 +03:00
|
|
|
|
def test_apply_mapping(self):
|
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new('X1')
|
|
|
|
|
x2 = schema.insert_new('X11')
|
|
|
|
|
d1 = schema.insert_new(
|
|
|
|
|
alias='D1',
|
|
|
|
|
definition_formal='X1 = X11 = X2',
|
|
|
|
|
definition_raw='@{X11|sing}',
|
|
|
|
|
convention='X1',
|
|
|
|
|
term_raw='@{X1|plur}'
|
|
|
|
|
)
|
2024-01-15 23:37:14 +03:00
|
|
|
|
|
|
|
|
|
schema.apply_mapping({x1.alias: 'X3', x2.alias: 'X4'})
|
|
|
|
|
d1.refresh_from_db()
|
|
|
|
|
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.convention, 'X3', msg='Map IDs in convention')
|
|
|
|
|
self.assertEqual(d1.term_raw, '@{X3|plur}', msg='Map IDs in term')
|
|
|
|
|
self.assertEqual(d1.term_resolved, '', msg='Do not run resolve on mapping')
|
|
|
|
|
self.assertEqual(d1.definition_resolved, '', msg='Do not run resolve on mapping')
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2024-01-15 23:37:14 +03:00
|
|
|
|
def test_substitute(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new(
|
|
|
|
|
alias='X1',
|
|
|
|
|
term_raw='Test'
|
|
|
|
|
)
|
|
|
|
|
x2 = schema.insert_new(
|
|
|
|
|
alias='X2',
|
|
|
|
|
term_raw='Test2'
|
|
|
|
|
)
|
|
|
|
|
d1 = schema.insert_new(
|
|
|
|
|
alias='D1',
|
|
|
|
|
definition_formal=x1.alias
|
|
|
|
|
)
|
2024-01-15 23:37:14 +03:00
|
|
|
|
|
|
|
|
|
schema.substitute(x1, x2, True)
|
|
|
|
|
x2.refresh_from_db()
|
|
|
|
|
d1.refresh_from_db()
|
2023-07-23 21:38:04 +03:00
|
|
|
|
self.assertEqual(schema.constituents().count(), 2)
|
2024-01-15 23:37:14 +03:00
|
|
|
|
self.assertEqual(x2.term_raw, 'Test')
|
|
|
|
|
self.assertEqual(d1.definition_formal, x2.alias)
|
2023-07-23 21:38:04 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-24 22:34:03 +03:00
|
|
|
|
def test_move_cst(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new('X1')
|
|
|
|
|
x2 = schema.insert_new('X2')
|
|
|
|
|
d1 = schema.insert_new('D1')
|
|
|
|
|
d2 = schema.insert_new('D2')
|
2023-07-24 22:34:03 +03:00
|
|
|
|
schema.move_cst([x2, d2], 1)
|
|
|
|
|
x1.refresh_from_db()
|
|
|
|
|
x2.refresh_from_db()
|
|
|
|
|
d1.refresh_from_db()
|
|
|
|
|
d2.refresh_from_db()
|
2023-08-29 15:17:16 +03:00
|
|
|
|
self.assertEqual(x1.order, 3)
|
2023-07-24 22:34:03 +03:00
|
|
|
|
self.assertEqual(x2.order, 1)
|
|
|
|
|
self.assertEqual(d1.order, 4)
|
2023-08-29 15:17:16 +03:00
|
|
|
|
self.assertEqual(d2.order, 2)
|
2023-07-24 22:34:03 +03:00
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-07-24 22:34:03 +03:00
|
|
|
|
def test_move_cst_down(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new('X1')
|
|
|
|
|
x2 = schema.insert_new('X2')
|
2023-07-24 22:34:03 +03:00
|
|
|
|
schema.move_cst([x1], 2)
|
|
|
|
|
x1.refresh_from_db()
|
|
|
|
|
x2.refresh_from_db()
|
|
|
|
|
self.assertEqual(x1.order, 2)
|
|
|
|
|
self.assertEqual(x2.order, 1)
|
|
|
|
|
|
2024-03-27 17:37:37 +03:00
|
|
|
|
|
2023-08-22 17:52:59 +03:00
|
|
|
|
def test_reset_aliases(self):
|
2023-08-25 22:51:20 +03:00
|
|
|
|
schema = RSForm.create(title='Test')
|
2024-03-27 17:37:37 +03:00
|
|
|
|
x1 = schema.insert_new(
|
|
|
|
|
alias='X11',
|
|
|
|
|
term_raw='человек',
|
|
|
|
|
term_resolved='человек'
|
|
|
|
|
)
|
|
|
|
|
x2 = schema.insert_new('X21')
|
|
|
|
|
d1 = schema.insert_new(
|
|
|
|
|
alias='D11',
|
|
|
|
|
convention='D11 - cool',
|
|
|
|
|
definition_formal='X21=X21',
|
|
|
|
|
term_raw='@{X21|sing}',
|
|
|
|
|
definition_raw='@{X11|datv}',
|
|
|
|
|
definition_resolved='test'
|
|
|
|
|
)
|
2023-08-22 17:52:59 +03:00
|
|
|
|
|
|
|
|
|
schema.reset_aliases()
|
|
|
|
|
x1.refresh_from_db()
|
2023-07-27 22:04:25 +03:00
|
|
|
|
x2.refresh_from_db()
|
2023-08-22 17:52:59 +03:00
|
|
|
|
d1.refresh_from_db()
|
|
|
|
|
|
|
|
|
|
self.assertEqual(x1.alias, 'X1')
|
|
|
|
|
self.assertEqual(x2.alias, 'X2')
|
|
|
|
|
self.assertEqual(d1.alias, 'D1')
|
|
|
|
|
self.assertEqual(d1.convention, 'D1 - cool')
|
|
|
|
|
self.assertEqual(d1.term_raw, '@{X2|sing}')
|
|
|
|
|
self.assertEqual(d1.definition_raw, '@{X1|datv}')
|
|
|
|
|
self.assertEqual(d1.definition_resolved, 'test')
|