Refactoring: update test formatting and improve readability

This commit is contained in:
IRBorisov 2024-03-27 17:37:37 +03:00
parent 3ac6a3577d
commit 855de8412c
12 changed files with 218 additions and 107 deletions

View File

@ -11,6 +11,7 @@ class TestNaturalLanguageViews(EndpointTester):
def _assert_tags(self, actual: str, expected: str): def _assert_tags(self, actual: str, expected: str):
self.assertEqual(set(split_grams(actual)), set(split_grams(expected))) self.assertEqual(set(split_grams(actual)), set(split_grams(expected)))
@decl_endpoint(endpoint='/api/cctext/parse', method='post') @decl_endpoint(endpoint='/api/cctext/parse', method='post')
def test_parse_text(self): def test_parse_text(self):
data = {'text': 'синим слонам'} data = {'text': 'синим слонам'}
@ -18,6 +19,7 @@ class TestNaturalLanguageViews(EndpointTester):
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
self._assert_tags(response.data['result'], 'datv,NOUN,plur,anim,masc') self._assert_tags(response.data['result'], 'datv,NOUN,plur,anim,masc')
@decl_endpoint(endpoint='/api/cctext/inflect', method='post') @decl_endpoint(endpoint='/api/cctext/inflect', method='post')
def test_inflect(self): def test_inflect(self):
data = {'text': 'синий слон', 'grams': 'plur,datv'} data = {'text': 'синий слон', 'grams': 'plur,datv'}
@ -25,6 +27,7 @@ class TestNaturalLanguageViews(EndpointTester):
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['result'], 'синим слонам') self.assertEqual(response.data['result'], 'синим слонам')
@decl_endpoint(endpoint='/api/cctext/generate-lexeme', method='post') @decl_endpoint(endpoint='/api/cctext/generate-lexeme', method='post')
def test_generate_lexeme(self): def test_generate_lexeme(self):
data = {'text': 'синий слон'} data = {'text': 'синий слон'}

View File

@ -41,6 +41,7 @@ class TestConstituentaAPI(EndpointTester):
) )
self.invalid_cst = self.cst3.pk + 1337 self.invalid_cst = self.cst3.pk + 1337
@decl_endpoint('/api/constituents/{item}', method='get') @decl_endpoint('/api/constituents/{item}', method='get')
def test_retrieve(self): def test_retrieve(self):
self.assertNotFound(item=self.invalid_cst) self.assertNotFound(item=self.invalid_cst)
@ -49,6 +50,7 @@ class TestConstituentaAPI(EndpointTester):
self.assertEqual(response.data['alias'], self.cst1.alias) self.assertEqual(response.data['alias'], self.cst1.alias)
self.assertEqual(response.data['convention'], self.cst1.convention) self.assertEqual(response.data['convention'], self.cst1.convention)
@decl_endpoint('/api/constituents/{item}', method='patch') @decl_endpoint('/api/constituents/{item}', method='patch')
def test_partial_update(self): def test_partial_update(self):
data = {'convention': 'tt'} data = {'convention': 'tt'}
@ -66,6 +68,7 @@ class TestConstituentaAPI(EndpointTester):
self.assertOK(data, item=self.cst1.id) self.assertOK(data, item=self.cst1.id)
@decl_endpoint('/api/constituents/{item}', method='patch') @decl_endpoint('/api/constituents/{item}', method='patch')
def test_update_resolved_no_refs(self): def test_update_resolved_no_refs(self):
data = { data = {
@ -80,6 +83,7 @@ class TestConstituentaAPI(EndpointTester):
self.assertEqual(response.data['definition_resolved'], 'New def') self.assertEqual(response.data['definition_resolved'], 'New def')
self.assertEqual(self.cst3.definition_resolved, 'New def') self.assertEqual(self.cst3.definition_resolved, 'New def')
@decl_endpoint('/api/constituents/{item}', method='patch') @decl_endpoint('/api/constituents/{item}', method='patch')
def test_update_resolved_refs(self): def test_update_resolved_refs(self):
data = { data = {
@ -94,6 +98,7 @@ class TestConstituentaAPI(EndpointTester):
self.assertEqual(self.cst3.definition_resolved, f'{self.cst1.term_resolved} form1') self.assertEqual(self.cst3.definition_resolved, f'{self.cst1.term_resolved} form1')
self.assertEqual(response.data['definition_resolved'], f'{self.cst1.term_resolved} form1') self.assertEqual(response.data['definition_resolved'], f'{self.cst1.term_resolved} form1')
@decl_endpoint('/api/constituents/{item}', method='patch') @decl_endpoint('/api/constituents/{item}', method='patch')
def test_readonly_cst_fields(self): def test_readonly_cst_fields(self):
data = {'alias': 'X33', 'order': 10} data = {'alias': 'X33', 'order': 10}

View File

@ -32,6 +32,7 @@ class TestLibraryViewset(EndpointTester):
is_common=True is_common=True
) )
@decl_endpoint('/api/library', method='post') @decl_endpoint('/api/library', method='post')
def test_create(self): def test_create(self):
data = {'title': 'Title'} data = {'title': 'Title'}
@ -44,6 +45,7 @@ class TestLibraryViewset(EndpointTester):
data = {'title': 'Title2'} data = {'title': 'Title2'}
self.assertForbidden(data) self.assertForbidden(data)
@decl_endpoint('/api/library/{item}', method='patch') @decl_endpoint('/api/library/{item}', method='patch')
def test_update(self): def test_update(self):
data = {'id': self.unowned.id, 'title': 'New title'} data = {'id': self.unowned.id, 'title': 'New title'}
@ -55,6 +57,7 @@ class TestLibraryViewset(EndpointTester):
self.assertEqual(response.data['title'], 'New title') self.assertEqual(response.data['title'], 'New title')
self.assertEqual(response.data['alias'], self.owned.alias) self.assertEqual(response.data['alias'], self.owned.alias)
@decl_endpoint('/api/library/{item}', method='delete') @decl_endpoint('/api/library/{item}', method='delete')
def test_destroy(self): def test_destroy(self):
response = self.execute(item=self.owned.id) response = self.execute(item=self.owned.id)
@ -65,6 +68,7 @@ class TestLibraryViewset(EndpointTester):
response = self.execute(item=self.unowned.id) response = self.execute(item=self.unowned.id)
self.assertTrue(response.status_code in [status.HTTP_202_ACCEPTED, status.HTTP_204_NO_CONTENT]) self.assertTrue(response.status_code in [status.HTTP_202_ACCEPTED, status.HTTP_204_NO_CONTENT])
@decl_endpoint('/api/library/{item}/claim', method='post') @decl_endpoint('/api/library/{item}/claim', method='post')
def test_claim(self): def test_claim(self):
self.assertForbidden(item=self.owned.id) self.assertForbidden(item=self.owned.id)
@ -87,6 +91,7 @@ class TestLibraryViewset(EndpointTester):
self.logout() self.logout()
self.assertForbidden(item=self.owned.id) self.assertForbidden(item=self.owned.id)
@decl_endpoint('/api/library/active', method='get') @decl_endpoint('/api/library/active', method='get')
def test_retrieve_common(self): def test_retrieve_common(self):
response = self.execute() response = self.execute()
@ -102,6 +107,7 @@ class TestLibraryViewset(EndpointTester):
self.assertFalse(response_contains(response, self.unowned)) self.assertFalse(response_contains(response, self.unowned))
self.assertFalse(response_contains(response, self.owned)) self.assertFalse(response_contains(response, self.owned))
@decl_endpoint('/api/library/active', method='get') @decl_endpoint('/api/library/active', method='get')
def test_retrieve_subscribed(self): def test_retrieve_subscribed(self):
response = self.execute() response = self.execute()
@ -118,6 +124,7 @@ class TestLibraryViewset(EndpointTester):
self.assertTrue(response_contains(response, self.unowned)) self.assertTrue(response_contains(response, self.unowned))
self.assertEqual(len(response.data), 3) self.assertEqual(len(response.data), 3)
@decl_endpoint('/api/library/{item}/subscribe', method='post') @decl_endpoint('/api/library/{item}/subscribe', method='post')
def test_subscriptions(self): def test_subscriptions(self):
response = self.client.delete(f'/api/library/{self.unowned.id}/unsubscribe') response = self.client.delete(f'/api/library/{self.unowned.id}/unsubscribe')
@ -136,6 +143,7 @@ class TestLibraryViewset(EndpointTester):
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertFalse(self.user in self.unowned.subscribers()) self.assertFalse(self.user in self.unowned.subscribers())
@decl_endpoint('/api/library/templates', method='get') @decl_endpoint('/api/library/templates', method='get')
def test_retrieve_templates(self): def test_retrieve_templates(self):
response = self.execute() response = self.execute()
@ -151,6 +159,7 @@ class TestLibraryViewset(EndpointTester):
self.assertTrue(response_contains(response, self.unowned)) self.assertTrue(response_contains(response, self.unowned))
self.assertFalse(response_contains(response, self.owned)) self.assertFalse(response_contains(response, self.owned))
@decl_endpoint('/api/library/{item}/clone', method='post') @decl_endpoint('/api/library/{item}/clone', method='post')
def test_clone_rsform(self): def test_clone_rsform(self):
x12 = self.schema.insert_new( x12 = self.schema.insert_new(

View File

@ -12,6 +12,7 @@ from apps.rsform.models import (
class TestInlineSynthesis(EndpointTester): class TestInlineSynthesis(EndpointTester):
''' Testing Operations endpoints. ''' ''' Testing Operations endpoints. '''
@decl_endpoint('/api/operations/inline-synthesis', method='patch') @decl_endpoint('/api/operations/inline-synthesis', method='patch')
def setUp(self): def setUp(self):
super().setUp() super().setUp()
@ -19,6 +20,7 @@ class TestInlineSynthesis(EndpointTester):
self.schema2 = RSForm.create(title='Test2', alias='T2', owner=self.user) self.schema2 = RSForm.create(title='Test2', alias='T2', owner=self.user)
self.unowned = RSForm.create(title='Test3', alias='T3') self.unowned = RSForm.create(title='Test3', alias='T3')
def test_inline_synthesis_inputs(self): def test_inline_synthesis_inputs(self):
invalid_id = 1338 invalid_id = 1338
data = { data = {
@ -42,6 +44,7 @@ class TestInlineSynthesis(EndpointTester):
data['items'] = [invalid_id] data['items'] = [invalid_id]
self.assertBadData(data) self.assertBadData(data)
def test_inline_synthesis(self): def test_inline_synthesis(self):
ks1_x1 = self.schema1.insert_new('X1', term_raw='KS1X1') # -> delete ks1_x1 = self.schema1.insert_new('X1', term_raw='KS1X1') # -> delete
ks1_x2 = self.schema1.insert_new('X2', term_raw='KS1X2') # -> X2 ks1_x2 = self.schema1.insert_new('X2', term_raw='KS1X2') # -> X2

View File

@ -27,6 +27,7 @@ class TestRSFormViewset(EndpointTester):
self.unowned = RSForm.create(title='Test2', alias='T2') self.unowned = RSForm.create(title='Test2', alias='T2')
self.unowned_id = self.unowned.item.id self.unowned_id = self.unowned.item.id
@decl_endpoint('/api/rsforms/create-detailed', method='post') @decl_endpoint('/api/rsforms/create-detailed', method='post')
def test_create_rsform_file(self): def test_create_rsform_file(self):
work_dir = os.path.dirname(os.path.abspath(__file__)) work_dir = os.path.dirname(os.path.abspath(__file__))
@ -39,6 +40,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(response.data['alias'], 'ks1') self.assertEqual(response.data['alias'], 'ks1')
self.assertEqual(response.data['comment'], '123') self.assertEqual(response.data['comment'], '123')
@decl_endpoint('/api/rsforms/create-detailed', method='post') @decl_endpoint('/api/rsforms/create-detailed', method='post')
def test_create_rsform_json(self): def test_create_rsform_json(self):
data = {'title': 'Test123', 'comment': '123', 'alias': 'ks1'} data = {'title': 'Test123', 'comment': '123', 'alias': 'ks1'}
@ -49,6 +51,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(response.data['alias'], 'ks1') self.assertEqual(response.data['alias'], 'ks1')
self.assertEqual(response.data['comment'], '123') self.assertEqual(response.data['comment'], '123')
@decl_endpoint('/api/rsforms', method='get') @decl_endpoint('/api/rsforms', method='get')
def test_list(self): def test_list(self):
non_schema = LibraryItem.objects.create( non_schema = LibraryItem.objects.create(
@ -67,23 +70,27 @@ class TestRSFormViewset(EndpointTester):
self.assertTrue(response_contains(response, self.unowned.item)) self.assertTrue(response_contains(response, self.unowned.item))
self.assertTrue(response_contains(response, self.schema.item)) self.assertTrue(response_contains(response, self.schema.item))
@decl_endpoint('/api/rsforms/{item}/contents', method='get') @decl_endpoint('/api/rsforms/{item}/contents', method='get')
def test_contents(self): def test_contents(self):
schema = RSForm.create(title='Title1') schema = RSForm.create(title='Title1')
schema.insert_new('X1') schema.insert_new('X1')
self.assertOK(item=schema.item.id) self.assertOK(item=schema.item.id)
@decl_endpoint('/api/rsforms/{item}/details', method='get') @decl_endpoint('/api/rsforms/{item}/details', method='get')
def test_details(self): def test_details(self):
schema = RSForm.create(title='Test', owner=self.user) schema = RSForm.create(title='Test', owner=self.user)
x1 = schema.insert_new('X1') x1 = schema.insert_new(
x2 = schema.insert_new('X2') alias='X1',
x1.term_raw = 'человек' term_raw='человек',
x1.term_resolved = 'человек' term_resolved = 'человек'
x2.term_raw = '@{X1|plur}' )
x2.term_resolved = 'люди' x2 = schema.insert_new(
x1.save() alias='X2',
x2.save() term_raw='@{X1|plur}',
term_resolved = 'люди'
)
response = self.execute(item=schema.item.id) response = self.execute(item=schema.item.id)
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
@ -98,6 +105,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(response.data['items'][1]['term_resolved'], x2.term_resolved) self.assertEqual(response.data['items'][1]['term_resolved'], x2.term_resolved)
self.assertEqual(response.data['subscribers'], [self.user.pk]) self.assertEqual(response.data['subscribers'], [self.user.pk])
@decl_endpoint('/api/rsforms/{item}/check', method='post') @decl_endpoint('/api/rsforms/{item}/check', method='post')
def test_check(self): def test_check(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
@ -113,12 +121,14 @@ class TestRSFormViewset(EndpointTester):
self.assertOK(data, item=self.unowned_id) self.assertOK(data, item=self.unowned_id)
@decl_endpoint('/api/rsforms/{item}/resolve', method='post') @decl_endpoint('/api/rsforms/{item}/resolve', method='post')
def test_resolve(self): def test_resolve(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
x1 = schema.insert_new('X1') x1 = schema.insert_new(
x1.term_resolved = 'синий слон' alias='X1',
x1.save() term_resolved='синий слон'
)
data = {'text': '@{1|редкий} @{X1|plur,datv}'} data = {'text': '@{1|редкий} @{X1|plur,datv}'}
response = self.execute(data, item=schema.item.id) response = self.execute(data, item=schema.item.id)
@ -143,6 +153,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(response.data['refs'][1]['pos_output']['start'], 7) self.assertEqual(response.data['refs'][1]['pos_output']['start'], 7)
self.assertEqual(response.data['refs'][1]['pos_output']['finish'], 19) self.assertEqual(response.data['refs'][1]['pos_output']['finish'], 19)
@decl_endpoint('/api/rsforms/import-trs', method='post') @decl_endpoint('/api/rsforms/import-trs', method='post')
def test_import_trs(self): def test_import_trs(self):
work_dir = os.path.dirname(os.path.abspath(__file__)) work_dir = os.path.dirname(os.path.abspath(__file__))
@ -153,6 +164,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(response.data['owner'], self.user.pk) self.assertEqual(response.data['owner'], self.user.pk)
self.assertTrue(response.data['title'] != '') self.assertTrue(response.data['title'] != '')
@decl_endpoint('/api/rsforms/{item}/export-trs', method='get') @decl_endpoint('/api/rsforms/{item}/export-trs', method='get')
def test_export_trs(self): def test_export_trs(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
@ -165,6 +177,7 @@ class TestRSFormViewset(EndpointTester):
self.assertIsNone(zipped_file.testzip()) self.assertIsNone(zipped_file.testzip())
self.assertIn('document.json', zipped_file.namelist()) self.assertIn('document.json', zipped_file.namelist())
@decl_endpoint('/api/rsforms/{item}/cst-create', method='post') @decl_endpoint('/api/rsforms/{item}/cst-create', method='post')
def test_create_constituenta(self): def test_create_constituenta(self):
data = {'alias': 'X3', 'cst_type': CstType.BASE} data = {'alias': 'X3', 'cst_type': CstType.BASE}
@ -194,6 +207,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(x4.term_raw, data['term_raw']) self.assertEqual(x4.term_raw, data['term_raw'])
self.assertEqual(x4.term_forms, data['term_forms']) self.assertEqual(x4.term_forms, data['term_forms'])
@decl_endpoint('/api/rsforms/{item}/cst-rename', method='patch') @decl_endpoint('/api/rsforms/{item}/cst-rename', method='patch')
def test_rename_constituenta(self): def test_rename_constituenta(self):
x1 = self.schema.insert_new( x1 = self.schema.insert_new(
@ -244,6 +258,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(x1.alias, 'D2') self.assertEqual(x1.alias, 'D2')
self.assertEqual(x1.cst_type, CstType.TERM) self.assertEqual(x1.cst_type, CstType.TERM)
@decl_endpoint('/api/rsforms/{item}/cst-substitute', method='patch') @decl_endpoint('/api/rsforms/{item}/cst-substitute', method='patch')
def test_substitute_constituenta(self): def test_substitute_constituenta(self):
x1 = self.schema.insert_new( x1 = self.schema.insert_new(
@ -283,6 +298,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(d1.term_resolved, 'form1') self.assertEqual(d1.term_resolved, 'form1')
self.assertEqual(d1.definition_formal, 'X2') self.assertEqual(d1.definition_formal, 'X2')
@decl_endpoint('/api/rsforms/{item}/cst-create', method='post') @decl_endpoint('/api/rsforms/{item}/cst-create', method='post')
def test_create_constituenta_data(self): def test_create_constituenta_data(self):
data = { data = {
@ -304,6 +320,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(response.data['new_cst']['definition_raw'], '4') self.assertEqual(response.data['new_cst']['definition_raw'], '4')
self.assertEqual(response.data['new_cst']['definition_resolved'], '4') self.assertEqual(response.data['new_cst']['definition_resolved'], '4')
@decl_endpoint('/api/rsforms/{item}/cst-delete-multiple', method='patch') @decl_endpoint('/api/rsforms/{item}/cst-delete-multiple', method='patch')
def test_delete_constituenta(self): def test_delete_constituenta(self):
self.set_params(item=self.schema_id) self.set_params(item=self.schema_id)
@ -328,6 +345,7 @@ class TestRSFormViewset(EndpointTester):
data = {'items': [x3.id]} data = {'items': [x3.id]}
self.assertBadData(data, item=self.schema_id) self.assertBadData(data, item=self.schema_id)
@decl_endpoint('/api/rsforms/{item}/cst-moveto', method='patch') @decl_endpoint('/api/rsforms/{item}/cst-moveto', method='patch')
def test_move_constituenta(self): def test_move_constituenta(self):
self.set_params(item=self.schema_id) self.set_params(item=self.schema_id)
@ -351,6 +369,7 @@ class TestRSFormViewset(EndpointTester):
data = {'items': [x3.id], 'move_to': 1} data = {'items': [x3.id], 'move_to': 1}
self.assertBadData(data) self.assertBadData(data)
@decl_endpoint('/api/rsforms/{item}/reset-aliases', method='patch') @decl_endpoint('/api/rsforms/{item}/reset-aliases', method='patch')
def test_reset_aliases(self): def test_reset_aliases(self):
self.set_params(item=self.schema_id) self.set_params(item=self.schema_id)
@ -377,6 +396,7 @@ class TestRSFormViewset(EndpointTester):
self.assertOK() self.assertOK()
@decl_endpoint('/api/rsforms/{item}/load-trs', method='patch') @decl_endpoint('/api/rsforms/{item}/load-trs', method='patch')
def test_load_trs(self): def test_load_trs(self):
self.set_params(item=self.schema_id) self.set_params(item=self.schema_id)
@ -394,6 +414,7 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(self.schema.constituents().count(), 25) self.assertEqual(self.schema.constituents().count(), 25)
self.assertFalse(Constituenta.objects.filter(pk=x1.id).exists()) self.assertFalse(Constituenta.objects.filter(pk=x1.id).exists())
@decl_endpoint('/api/rsforms/{item}/cst-produce-structure', method='patch') @decl_endpoint('/api/rsforms/{item}/cst-produce-structure', method='patch')
def test_produce_structure(self): def test_produce_structure(self):
self.set_params(item=self.schema_id) self.set_params(item=self.schema_id)

View File

@ -7,6 +7,8 @@ from .EndpointTester import decl_endpoint, EndpointTester
class TestRSLanguageViews(EndpointTester): class TestRSLanguageViews(EndpointTester):
''' Test RS language endpoints. ''' ''' Test RS language endpoints. '''
@decl_endpoint('/api/rslang/to-ascii', method='post') @decl_endpoint('/api/rslang/to-ascii', method='post')
def test_convert_to_ascii(self): def test_convert_to_ascii(self):
data = {'data': '1=1'} data = {'data': '1=1'}
@ -17,6 +19,7 @@ class TestRSLanguageViews(EndpointTester):
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['result'], r'1 \eq 1') self.assertEqual(response.data['result'], r'1 \eq 1')
@decl_endpoint('/api/rslang/to-math', method='post') @decl_endpoint('/api/rslang/to-math', method='post')
def test_convert_to_math(self): def test_convert_to_math(self):
data = {'data': r'1 \eq 1'} data = {'data': r'1 \eq 1'}
@ -27,6 +30,7 @@ class TestRSLanguageViews(EndpointTester):
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['result'], r'1=1') self.assertEqual(response.data['result'], r'1=1')
@decl_endpoint('/api/rslang/parse-expression', method='post') @decl_endpoint('/api/rslang/parse-expression', method='post')
def test_parse_expression(self): def test_parse_expression(self):
data = {'data': r'1=1'} data = {'data': r'1=1'}

View File

@ -24,6 +24,7 @@ class TestVersionViews(EndpointTester):
order=1 order=1
) )
@decl_endpoint('/api/rsforms/{schema}/versions/create', method='post') @decl_endpoint('/api/rsforms/{schema}/versions/create', method='post')
def test_create_version(self): def test_create_version(self):
invalid_data = {'description': 'test'} invalid_data = {'description': 'test'}
@ -40,6 +41,7 @@ class TestVersionViews(EndpointTester):
self.assertTrue('schema' in response.data) self.assertTrue('schema' in response.data)
self.assertTrue(response.data['version'] in [v['id'] for v in response.data['schema']['versions']]) self.assertTrue(response.data['version'] in [v['id'] for v in response.data['schema']['versions']])
@decl_endpoint('/api/rsforms/{schema}/versions/{version}', method='get') @decl_endpoint('/api/rsforms/{schema}/versions/{version}', method='get')
def test_retrieve_version(self): def test_retrieve_version(self):
version_id = self._create_version({'version': '1.0.0', 'description': 'test'}) version_id = self._create_version({'version': '1.0.0', 'description': 'test'})
@ -61,6 +63,7 @@ class TestVersionViews(EndpointTester):
self.assertNotEqual(response.data['items'][0]['alias'], self.x1.alias) self.assertNotEqual(response.data['items'][0]['alias'], self.x1.alias)
self.assertEqual(response.data['version'], version_id) self.assertEqual(response.data['version'], version_id)
@decl_endpoint('/api/versions/{version}', method='get') @decl_endpoint('/api/versions/{version}', method='get')
def test_access_version(self): def test_access_version(self):
data = {'version': '1.0.0', 'description': 'test'} data = {'version': '1.0.0', 'description': 'test'}
@ -96,6 +99,7 @@ class TestVersionViews(EndpointTester):
response = self.get() response = self.get()
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
@decl_endpoint('/api/rsforms/{schema}/versions/{version}', method='get') @decl_endpoint('/api/rsforms/{schema}/versions/{version}', method='get')
def test_retrieve_version_details(self): def test_retrieve_version_details(self):
a1 = Constituenta.objects.create( a1 = Constituenta.objects.create(
@ -115,6 +119,7 @@ class TestVersionViews(EndpointTester):
self.assertEqual(loaded_a1['definition_formal'], 'X1=X1') self.assertEqual(loaded_a1['definition_formal'], 'X1=X1')
self.assertEqual(loaded_a1['parse']['status'], 'verified') self.assertEqual(loaded_a1['parse']['status'], 'verified')
@decl_endpoint('/api/versions/{version}/export-file', method='get') @decl_endpoint('/api/versions/{version}/export-file', method='get')
def test_export_version(self): def test_export_version(self):
invalid_id = 1338 invalid_id = 1338
@ -132,6 +137,7 @@ class TestVersionViews(EndpointTester):
self.assertIsNone(zipped_file.testzip()) self.assertIsNone(zipped_file.testzip())
self.assertIn('document.json', zipped_file.namelist()) self.assertIn('document.json', zipped_file.namelist())
def _create_version(self, data) -> int: def _create_version(self, data) -> int:
response = self.client.post( response = self.client.post(
f'/api/rsforms/{self.owned.id}/versions/create', f'/api/rsforms/{self.owned.id}/versions/create',

View File

@ -26,6 +26,7 @@ class TestGraph(unittest.TestCase):
self.assertTrue(graph.has_edge('X1', 'X3')) self.assertTrue(graph.has_edge('X1', 'X3'))
self.assertTrue(graph.has_edge('X2', 'X1')) self.assertTrue(graph.has_edge('X2', 'X1'))
def test_expand_outputs(self): def test_expand_outputs(self):
graph = Graph({ graph = Graph({
'X1': ['X2'], 'X1': ['X2'],
@ -40,6 +41,7 @@ class TestGraph(unittest.TestCase):
self.assertEqual(graph.expand_outputs(['X7']), []) self.assertEqual(graph.expand_outputs(['X7']), [])
self.assertEqual(graph.expand_outputs(['X2', 'X5']), ['X3', 'X6', 'X1']) self.assertEqual(graph.expand_outputs(['X2', 'X5']), ['X3', 'X6', 'X1'])
def test_topological_order(self): def test_topological_order(self):
self.assertEqual(Graph().topological_order(), []) self.assertEqual(Graph().topological_order(), [])
graph = Graph({ graph = Graph({

View File

@ -6,30 +6,37 @@ import json
class TestIntegrations(TestCase): class TestIntegrations(TestCase):
def test_convert_to_ascii(self): def test_convert_to_ascii(self):
''' Test converting to ASCII syntax ''' ''' Test converting to ASCII syntax '''
self.assertEqual(pc.convert_to_ascii(''), '') self.assertEqual(pc.convert_to_ascii(''), '')
self.assertEqual(pc.convert_to_ascii('\u212c(X1)'), r'B(X1)') self.assertEqual(pc.convert_to_ascii('\u212c(X1)'), r'B(X1)')
def test_convert_to_math(self): def test_convert_to_math(self):
''' Test converting to MATH syntax ''' ''' Test converting to MATH syntax '''
self.assertEqual(pc.convert_to_math(''), '') self.assertEqual(pc.convert_to_math(''), '')
self.assertEqual(pc.convert_to_math(r'B(X1)'), '\u212c(X1)') self.assertEqual(pc.convert_to_math(r'B(X1)'), '\u212c(X1)')
def test_parse_expression(self): def test_parse_expression(self):
''' Test parsing expression ''' ''' Test parsing expression '''
out = json.loads(pc.parse_expression('X1=X2')) out = json.loads(pc.parse_expression('X1=X2'))
self.assertEqual(out['parseResult'], True) self.assertEqual(out['parseResult'], True)
self.assertEqual(out['syntax'], 'math') self.assertEqual(out['syntax'], 'math')
def test_empty_schema(self): def test_empty_schema(self):
with self.assertRaises(RuntimeError): with self.assertRaises(RuntimeError):
pc.check_schema('') pc.check_schema('')
def test_check_schema(self): def test_check_schema(self):
schema = self._default_schema() schema = self._default_schema()
self.assertTrue(pc.check_schema(schema) != '') self.assertTrue(pc.check_schema(schema) != '')
def test_check_expression(self): def test_check_expression(self):
schema = self._default_schema() schema = self._default_schema()
out1 = json.loads(pc.check_expression(schema, 'X1=X1')) out1 = json.loads(pc.check_expression(schema, 'X1=X1'))
@ -39,6 +46,7 @@ class TestIntegrations(TestCase):
out2 = json.loads(pc.check_expression(schema, 'X1=X2')) out2 = json.loads(pc.check_expression(schema, 'X1=X2'))
self.assertFalse(out2['parseResult']) self.assertFalse(out2['parseResult'])
def test_reset_aliases(self): def test_reset_aliases(self):
''' Test reset aliases in schema ''' ''' Test reset aliases in schema '''
schema = self._default_schema() schema = self._default_schema()
@ -46,6 +54,7 @@ class TestIntegrations(TestCase):
self.assertTrue(len(fixedSchema['items']) > 2) self.assertTrue(len(fixedSchema['items']) > 2)
self.assertEqual(fixedSchema['items'][2]['alias'], 'S1') self.assertEqual(fixedSchema['items'][2]['alias'], 'S1')
def _default_schema(self): def _default_schema(self):
return '''{ return '''{
"type": "rsform", "type": "rsform",

View File

@ -22,28 +22,34 @@ class TestConstituenta(TestCase):
cst = Constituenta.objects.create(alias=testStr, schema=self.schema1, order=1, convention='Test') cst = Constituenta.objects.create(alias=testStr, schema=self.schema1, order=1, convention='Test')
self.assertEqual(str(cst), testStr) self.assertEqual(str(cst), testStr)
def test_url(self): def test_url(self):
testStr = 'X1' testStr = 'X1'
cst = Constituenta.objects.create(alias=testStr, schema=self.schema1, order=1, convention='Test') cst = Constituenta.objects.create(alias=testStr, schema=self.schema1, order=1, convention='Test')
self.assertEqual(cst.get_absolute_url(), f'/api/constituents/{cst.id}') self.assertEqual(cst.get_absolute_url(), f'/api/constituents/{cst.id}')
def test_order_not_null(self): def test_order_not_null(self):
with self.assertRaises(IntegrityError): with self.assertRaises(IntegrityError):
Constituenta.objects.create(alias='X1', schema=self.schema1) Constituenta.objects.create(alias='X1', schema=self.schema1)
def test_order_positive_integer(self): def test_order_positive_integer(self):
with self.assertRaises(IntegrityError): with self.assertRaises(IntegrityError):
Constituenta.objects.create(alias='X1', schema=self.schema1, order=-1) Constituenta.objects.create(alias='X1', schema=self.schema1, order=-1)
def test_order_min_value(self): def test_order_min_value(self):
with self.assertRaises(ValidationError): with self.assertRaises(ValidationError):
cst = Constituenta.objects.create(alias='X1', schema=self.schema1, order=0) cst = Constituenta.objects.create(alias='X1', schema=self.schema1, order=0)
cst.full_clean() cst.full_clean()
def test_schema_not_null(self): def test_schema_not_null(self):
with self.assertRaises(IntegrityError): with self.assertRaises(IntegrityError):
Constituenta.objects.create(alias='X1', order=1) Constituenta.objects.create(alias='X1', order=1)
def test_create_default(self): def test_create_default(self):
cst = Constituenta.objects.create( cst = Constituenta.objects.create(
alias='X1', alias='X1',
@ -70,18 +76,29 @@ class TestLibraryItem(TestCase):
self.user2 = User.objects.create(username='User2') self.user2 = User.objects.create(username='User2')
self.assertNotEqual(self.user1, self.user2) self.assertNotEqual(self.user1, self.user2)
def test_str(self): def test_str(self):
testStr = 'Test123' testStr = 'Test123'
item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, item = LibraryItem.objects.create(
title=testStr, owner=self.user1, alias='КС1') item_type=LibraryItemType.RSFORM,
title=testStr,
owner=self.user1,
alias='КС1'
)
self.assertEqual(str(item), testStr) self.assertEqual(str(item), testStr)
def test_url(self): def test_url(self):
testStr = 'Test123' testStr = 'Test123'
item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, item = LibraryItem.objects.create(
title=testStr, owner=self.user1, alias='КС1') item_type=LibraryItemType.RSFORM,
title=testStr,
owner=self.user1,
alias='КС1'
)
self.assertEqual(item.get_absolute_url(), f'/api/library/{item.id}') self.assertEqual(item.get_absolute_url(), f'/api/library/{item.id}')
def test_create_default(self): def test_create_default(self):
item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test') item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test')
self.assertIsNone(item.owner) self.assertIsNone(item.owner)
@ -91,6 +108,7 @@ class TestLibraryItem(TestCase):
self.assertEqual(item.is_common, False) self.assertEqual(item.is_common, False)
self.assertEqual(item.is_canonical, False) self.assertEqual(item.is_canonical, False)
def test_create(self): def test_create(self):
item = LibraryItem.objects.create( item = LibraryItem.objects.create(
item_type=LibraryItemType.RSFORM, item_type=LibraryItemType.RSFORM,
@ -109,6 +127,7 @@ class TestLibraryItem(TestCase):
self.assertEqual(item.is_canonical, True) self.assertEqual(item.is_canonical, True)
self.assertTrue(Subscription.objects.filter(user=item.owner, item=item).exists()) self.assertTrue(Subscription.objects.filter(user=item.owner, item=item).exists())
def test_subscribe(self): def test_subscribe(self):
item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test') item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test')
self.assertEqual(len(item.subscribers()), 0) self.assertEqual(len(item.subscribers()), 0)
@ -128,6 +147,7 @@ class TestLibraryItem(TestCase):
self.user1.delete() self.user1.delete()
self.assertEqual(len(item.subscribers()), 1) self.assertEqual(len(item.subscribers()), 1)
def test_unsubscribe(self): def test_unsubscribe(self):
item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test') item = LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='Test')
self.assertFalse(Subscription.unsubscribe(self.user1, item)) self.assertFalse(Subscription.unsubscribe(self.user1, item))
@ -141,6 +161,7 @@ class TestLibraryItem(TestCase):
self.assertFalse(Subscription.unsubscribe(self.user1, item)) self.assertFalse(Subscription.unsubscribe(self.user1, item))
class TestRSForm(TestCase): class TestRSForm(TestCase):
''' Testing RSForm wrapper. ''' ''' Testing RSForm wrapper. '''
def setUp(self): def setUp(self):
@ -148,6 +169,7 @@ class TestRSForm(TestCase):
self.user2 = User.objects.create(username='User2') self.user2 = User.objects.create(username='User2')
self.assertNotEqual(self.user1, self.user2) self.assertNotEqual(self.user1, self.user2)
def test_constituents(self): def test_constituents(self):
schema1 = RSForm.create(title='Test1') schema1 = RSForm.create(title='Test1')
schema2 = RSForm.create(title='Test2') schema2 = RSForm.create(title='Test2')
@ -160,6 +182,7 @@ class TestRSForm(TestCase):
self.assertFalse(schema2.constituents().exists()) self.assertFalse(schema2.constituents().exists())
self.assertEqual(schema1.constituents().count(), 2) self.assertEqual(schema1.constituents().count(), 2)
def test_get_max_index(self): def test_get_max_index(self):
schema1 = RSForm.create(title='Test1') schema1 = RSForm.create(title='Test1')
Constituenta.objects.create(alias='X1', schema=schema1.item, order=1) Constituenta.objects.create(alias='X1', schema=schema1.item, order=1)
@ -168,97 +191,107 @@ class TestRSForm(TestCase):
self.assertEqual(schema1.get_max_index(CstType.TERM), 2) self.assertEqual(schema1.get_max_index(CstType.TERM), 2)
self.assertEqual(schema1.get_max_index(CstType.AXIOM), 0) self.assertEqual(schema1.get_max_index(CstType.AXIOM), 0)
def test_insert_at(self): def test_insert_at(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
cst1 = schema.insert_new('X1', CstType.BASE, 1) x1 = schema.insert_new('X1')
self.assertEqual(cst1.order, 1) self.assertEqual(x1.order, 1)
self.assertEqual(cst1.schema, schema.item) self.assertEqual(x1.schema, schema.item)
cst2 = schema.insert_new('X2', CstType.BASE, 1) x2 = schema.insert_new('X2', position=1)
cst1.refresh_from_db() x1.refresh_from_db()
self.assertEqual(cst2.order, 1) self.assertEqual(x2.order, 1)
self.assertEqual(cst2.schema, schema.item) self.assertEqual(x2.schema, schema.item)
self.assertEqual(cst1.order, 2) self.assertEqual(x1.order, 2)
cst3 = schema.insert_new('X3', CstType.BASE, 4) x3 = schema.insert_new('X3', position=4)
cst2.refresh_from_db() x2.refresh_from_db()
cst1.refresh_from_db() x1.refresh_from_db()
self.assertEqual(cst3.order, 3) self.assertEqual(x3.order, 3)
self.assertEqual(cst3.schema, schema.item) self.assertEqual(x3.schema, schema.item)
self.assertEqual(cst2.order, 1) self.assertEqual(x2.order, 1)
self.assertEqual(cst1.order, 2) 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)
cst4 = schema.insert_new('X4', CstType.BASE, 3)
cst3.refresh_from_db()
cst2.refresh_from_db()
cst1.refresh_from_db()
self.assertEqual(cst4.order, 3)
self.assertEqual(cst4.schema, schema.item)
self.assertEqual(cst3.order, 4)
self.assertEqual(cst2.order, 1)
self.assertEqual(cst1.order, 2)
def test_insert_at_invalid_position(self): def test_insert_at_invalid_position(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
with self.assertRaises(ValidationError): with self.assertRaises(ValidationError):
schema.insert_new('X5', CstType.BASE, 0) 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') schema = RSForm.create(title='Test')
schema.insert_new('X1', CstType.BASE, 1) schema.insert_new('X1')
with self.assertRaises(ValidationError): with self.assertRaises(ValidationError):
schema.insert_new('X1', CstType.BASE, 2) schema.insert_new('X1')
def test_insert_at_reorder(self): def test_insert_at_reorder(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
schema.insert_new('X1', CstType.BASE, 1) schema.insert_new('X1')
d1 = schema.insert_new('D1', CstType.TERM, 2) d1 = schema.insert_new('D1')
d2 = schema.insert_new('D2', CstType.TERM, 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', CstType.BASE, 4) x2 = 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') schema = RSForm.create(title='Test')
cst1 = schema.insert_new('X1', CstType.BASE) x1 = schema.insert_new('X1')
self.assertEqual(cst1.order, 1) self.assertEqual(x1.order, 1)
self.assertEqual(cst1.schema, schema.item) 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)
cst2 = schema.insert_new('X2', CstType.BASE)
self.assertEqual(cst2.order, 2)
self.assertEqual(cst2.schema, schema.item)
self.assertEqual(cst1.order, 1)
def test_create_cst_resolve(self): def test_create_cst_resolve(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
cst1 = schema.insert_new('X1', CstType.BASE) x1 = schema.insert_new(
cst1.term_raw = '@{X2|datv}' alias='X1',
cst1.definition_raw = '@{X1|datv} @{X2|datv}' term_raw='@{X2|datv}',
cst1.save() definition_raw='@{X1|datv} @{X2|datv}'
cst2 = schema.create_cst({ )
x2 = schema.create_cst({
'alias': 'X2', 'alias': 'X2',
'cst_type': CstType.BASE, 'cst_type': CstType.BASE,
'term_raw': 'слон', 'term_raw': 'слон',
'definition_raw': '@{X1|plur} @{X2|plur}' 'definition_raw': '@{X1|plur} @{X2|plur}'
}) })
cst1.refresh_from_db() x1.refresh_from_db()
self.assertEqual(cst1.term_resolved, 'слону') self.assertEqual(x1.term_resolved, 'слону')
self.assertEqual(cst1.definition_resolved, 'слону слону') self.assertEqual(x1.definition_resolved, 'слону слону')
self.assertEqual(cst2.term_resolved, 'слон') self.assertEqual(x2.term_resolved, 'слон')
self.assertEqual(cst2.definition_resolved, 'слонам слоны') self.assertEqual(x2.definition_resolved, 'слонам слоны')
def test_insert_copy(self): def test_insert_copy(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
x1 = schema.insert_new('X10', CstType.BASE) x1 = schema.insert_new(
s1 = schema.insert_new('S11', CstType.STRUCTURED) alias='X10',
x1.convention = 'Test' convention='Test'
s1.definition_formal = x1.alias )
s1.definition_raw = '@{X10|plur}' s1 = schema.insert_new(
x1.save() alias='S11',
s1.save() definition_formal=x1.alias,
definition_raw='@{X10|plur}'
)
result = schema.insert_copy([s1, x1], 2) result = schema.insert_copy([s1, x1], 2)
self.assertEqual(len(result), 2) self.assertEqual(len(result), 2)
@ -279,16 +312,18 @@ class TestRSForm(TestCase):
self.assertEqual(s2.definition_formal, x2.alias) self.assertEqual(s2.definition_formal, x2.alias)
self.assertEqual(s2.definition_raw, '@{X11|plur}') self.assertEqual(s2.definition_raw, '@{X11|plur}')
def test_apply_mapping(self): def test_apply_mapping(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
x1 = schema.insert_new('X1', CstType.BASE) x1 = schema.insert_new('X1')
x2 = schema.insert_new('X11', CstType.BASE) x2 = schema.insert_new('X11')
d1 = schema.insert_new('D1', CstType.TERM) d1 = schema.insert_new(
d1.definition_formal = 'X1 = X11 = X2' alias='D1',
d1.definition_raw = '@{X11|sing}' definition_formal='X1 = X11 = X2',
d1.convention = 'X1' definition_raw='@{X11|sing}',
d1.term_raw = '@{X1|plur}' convention='X1',
d1.save() term_raw='@{X1|plur}'
)
schema.apply_mapping({x1.alias: 'X3', x2.alias: 'X4'}) schema.apply_mapping({x1.alias: 'X3', x2.alias: 'X4'})
d1.refresh_from_db() d1.refresh_from_db()
@ -299,17 +334,21 @@ class TestRSForm(TestCase):
self.assertEqual(d1.term_resolved, '', msg='Do not run resolve on mapping') self.assertEqual(d1.term_resolved, '', msg='Do not run resolve on mapping')
self.assertEqual(d1.definition_resolved, '', msg='Do not run resolve on mapping') self.assertEqual(d1.definition_resolved, '', msg='Do not run resolve on mapping')
def test_substitute(self): def test_substitute(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
x1 = schema.insert_new('X1', CstType.BASE) x1 = schema.insert_new(
x2 = schema.insert_new('X2', CstType.BASE) alias='X1',
d1 = schema.insert_new('D1', CstType.TERM) term_raw='Test'
d1.definition_formal = x1.alias )
d1.save() x2 = schema.insert_new(
x1.term_raw = 'Test' alias='X2',
x1.save() term_raw='Test2'
x2.term_raw = 'Test2' )
x2.save() d1 = schema.insert_new(
alias='D1',
definition_formal=x1.alias
)
schema.substitute(x1, x2, True) schema.substitute(x1, x2, True)
x2.refresh_from_db() x2.refresh_from_db()
@ -318,12 +357,13 @@ class TestRSForm(TestCase):
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') schema = RSForm.create(title='Test')
x1 = schema.insert_new('X1', CstType.BASE) x1 = schema.insert_new('X1')
x2 = schema.insert_new('X2', CstType.BASE) x2 = schema.insert_new('X2')
d1 = schema.insert_new('D1', CstType.TERM) d1 = schema.insert_new('D1')
d2 = schema.insert_new('D2', CstType.TERM) d2 = schema.insert_new('D2')
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()
@ -334,30 +374,34 @@ class TestRSForm(TestCase):
self.assertEqual(d1.order, 4) self.assertEqual(d1.order, 4)
self.assertEqual(d2.order, 2) self.assertEqual(d2.order, 2)
def test_move_cst_down(self): def test_move_cst_down(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
x1 = schema.insert_new('X1', CstType.BASE) x1 = schema.insert_new('X1')
x2 = schema.insert_new('X2', CstType.BASE) x2 = schema.insert_new('X2')
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)
self.assertEqual(x2.order, 1) self.assertEqual(x2.order, 1)
def test_reset_aliases(self): def test_reset_aliases(self):
schema = RSForm.create(title='Test') schema = RSForm.create(title='Test')
x1 = schema.insert_new('X11', CstType.BASE) x1 = schema.insert_new(
x2 = schema.insert_new('X21', CstType.BASE) alias='X11',
d1 = schema.insert_new('D11', CstType.TERM) term_raw='человек',
x1.term_raw = 'человек' term_resolved='человек'
x1.term_resolved = 'человек' )
d1.convention = 'D11 - cool' x2 = schema.insert_new('X21')
d1.definition_formal = 'X21=X21' d1 = schema.insert_new(
d1.term_raw = '@{X21|sing}' alias='D11',
d1.definition_raw = '@{X11|datv}' convention='D11 - cool',
d1.definition_resolved = 'test' definition_formal='X21=X21',
d1.save() term_raw='@{X21|sing}',
x1.save() definition_raw='@{X11|datv}',
definition_resolved='test'
)
schema.reset_aliases() schema.reset_aliases()
x1.refresh_from_db() x1.refresh_from_db()

View File

@ -7,11 +7,13 @@ class TestExpressionSerializer(TestCase):
def setUp(self): def setUp(self):
pass pass
def test_validate(self): def test_validate(self):
serializer = ExpressionSerializer(data={'expression': 'X1=X1'}) serializer = ExpressionSerializer(data={'expression': 'X1=X1'})
self.assertTrue(serializer.is_valid(raise_exception=False)) self.assertTrue(serializer.is_valid(raise_exception=False))
self.assertEqual(serializer.validated_data['expression'], 'X1=X1') self.assertEqual(serializer.validated_data['expression'], 'X1=X1')
def test_missing_data(self): def test_missing_data(self):
serializer = ExpressionSerializer(data={}) serializer = ExpressionSerializer(data={})
self.assertFalse(serializer.is_valid(raise_exception=False)) self.assertFalse(serializer.is_valid(raise_exception=False))

View File

@ -7,6 +7,8 @@ from apps.rsform.utils import apply_pattern, fix_old_references
class TestUtils(unittest.TestCase): class TestUtils(unittest.TestCase):
''' Test various utility functions. ''' ''' Test various utility functions. '''
def test_apply_mapping_patter(self): def test_apply_mapping_patter(self):
mapping = {'X101': 'X20'} mapping = {'X101': 'X20'}
pattern = re.compile(r'(X[0-9]+)') pattern = re.compile(r'(X[0-9]+)')
@ -15,6 +17,7 @@ class TestUtils(unittest.TestCase):
self.assertEqual(apply_pattern('X101', mapping, pattern), 'X20') self.assertEqual(apply_pattern('X101', mapping, pattern), 'X20')
self.assertEqual(apply_pattern('asdf X101 asdf', mapping, pattern), 'asdf X20 asdf') self.assertEqual(apply_pattern('asdf X101 asdf', mapping, pattern), 'asdf X20 asdf')
def test_fix_old_references(self): def test_fix_old_references(self):
self.assertEqual(fix_old_references(''), '') self.assertEqual(fix_old_references(''), '')
self.assertEqual(fix_old_references('X20'), 'X20') self.assertEqual(fix_old_references('X20'), 'X20')