No Description
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.

test_model.py 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #-*- coding: utf-8 -*-
  2. import unittest
  3. from lodel.editorial_model.model import EditorialModel
  4. from lodel.editorial_model.components import EmComponent, EmClass, EmField, EmGroup
  5. from lodel.utils.mlstring import MlString
  6. from lodel.editorial_model.exceptions import *
  7. class EditorialModelTestCase(unittest.TestCase):
  8. def test_d_hash(self):
  9. """ Test the deterministic hash method """
  10. model = EditorialModel("test model", description = "Test EM")
  11. cls1 = model.new_class('testclass1', display_name = 'Classe de test 1', help_text = 'super aide')
  12. c1f1 = cls1.new_field('c1testfield1', data_handler = None)
  13. c1f2 = cls1.new_field('c1testfield2', data_handler = None)
  14. cls2 = model.new_class('testclass2')
  15. c2f1 = cls2.new_field('c2testfield1', data_handler = None)
  16. c2f2 = cls2.new_field('c2testfield2', data_handler = None)
  17. grp1 = model.new_group('testgroup1')
  18. grp1.add_components((cls1, c1f1))
  19. grp2 = model.new_group('testgroup2')
  20. grp2.add_components((cls2, c1f2, c2f1, c2f2))
  21. grp2.add_dependencie(grp1)
  22. e_hash = 105398984207109703509695004279282115094
  23. self.assertEqual(model.d_hash(), e_hash)
  24. c2f1.uid = 'foobar'
  25. self.assertNotEqual(model.d_hash(), e_hash)
  26. c2f1.uid = 'c2testfield1'
  27. self.assertEqual(model.d_hash(), e_hash)
  28. class EmComponentTestCase(unittest.TestCase):
  29. def test_abstract_init(self):
  30. with self.assertRaises(NotImplementedError):
  31. EmComponent('test')
  32. class EmClassTestCase(unittest.TestCase):
  33. def test_init(self):
  34. cls = EmClass('testClass', 'test class', 'A test class')
  35. self.assertEqual(cls.uid, 'testClass')
  36. self.assertEqual(cls.display_name, MlString('test class'))
  37. self.assertEqual(cls.help_text, MlString('A test class'))
  38. def test_fields(self):
  39. """ Bad test on add field method (only check uid presence) """
  40. cls = EmClass('testClass', 'test_class', 'A test class')
  41. cls.new_field('name', data_handler = None)
  42. cls.new_field('string', data_handler = None)
  43. cls.new_field('lodel_id', data_handler = None)
  44. fields = cls.fields()
  45. self.assertEqual(len(fields), 3)
  46. self.assertEqual(
  47. set([f.uid for f in fields]),
  48. set(['name', 'string', 'lodel_id'])
  49. )
  50. def test_d_hash(self):
  51. """ Test the deterministic hash method """
  52. field = EmField('test field', 'foobar')
  53. e_hash = 16085043663725855508634914630594968402
  54. self.assertEqual(field.d_hash(), e_hash)
  55. field.uid = 'test field.'
  56. self.assertNotEqual(field.d_hash(), e_hash)
  57. class EmGroupTestCase(unittest.TestCase):
  58. def test_init(self):
  59. """ Test EmGroup instanciation """
  60. grp = EmGroup('testgrp', display_name = "Test group", help_text="No Help")
  61. self.assertEqual(grp.uid, 'testgrp')
  62. self.assertEqual(grp.dependencies(), dict())
  63. self.assertEqual(grp.display_name, MlString("Test group"))
  64. self.assertEqual(grp.help_text, MlString("No Help"))
  65. grp2 = EmGroup('test')
  66. self.assertEqual(grp2.uid, 'test')
  67. self.assertEqual(grp2.display_name, None)
  68. self.assertEqual(grp2.help_text, None)
  69. grp3 = EmGroup('depends', depends = (grp, grp2))
  70. self.assertEqual(set(grp3.dependencies().values()), set((grp, grp2)))
  71. def test_deps(self):
  72. """ Test dependencies """
  73. grp1 = EmGroup('grp1')
  74. grp2 = EmGroup('grp2')
  75. grp3 = EmGroup('grp3')
  76. grp4 = EmGroup('grp4')
  77. grp2.add_dependencie(grp1)
  78. grp3.add_dependencie(grp2)
  79. grp4.add_dependencie(grp2)
  80. grp4.add_dependencie(grp1)
  81. self.assertEqual(set(grp1.dependencies().values()), set())
  82. self.assertEqual(set(grp2.dependencies().values()), set([grp1]))
  83. self.assertEqual(set(grp3.dependencies().values()), set([grp2]))
  84. self.assertEqual(set(grp4.dependencies().values()), set([grp2, grp1]))
  85. self.assertEqual(set(grp3.dependencies(True).values()), set([grp2, grp1]))
  86. self.assertEqual(set(grp4.dependencies(True).values()), set([grp2, grp1]))
  87. self.assertEqual(set(grp1.required_by.values()), set([grp2, grp4]))
  88. self.assertEqual(set(grp2.required_by.values()), set([grp3, grp4]))
  89. self.assertEqual(set(grp3.required_by.values()), set())
  90. self.assertEqual(set(grp4.required_by.values()), set())
  91. for grp in [grp1, grp2, grp3, grp4]:
  92. for uid, dep in grp.dependencies(recursive = True).items():
  93. self.assertEqual(uid, dep.uid)
  94. for uid, dep in grp.required_by.items():
  95. self.assertEqual(uid, dep.uid)
  96. def test_deps_complex(self):
  97. """ More complex dependencies handling test """
  98. grps = [ EmGroup('group%d' % i) for i in range(6) ]
  99. grps[5].add_dependencie( (grps[1], grps[2], grps[4]) )
  100. grps[4].add_dependencie( (grps[1], grps[3]) )
  101. grps[3].add_dependencie( (grps[0],) )
  102. grps[1].add_dependencie( (grps[2], grps[0]) )
  103. self.assertEqual(
  104. set(grps[5].dependencies(True).values()),
  105. set( grps[i] for i in range(5))
  106. )
  107. self.assertEqual(
  108. set(grps[4].dependencies(True).values()),
  109. set( grps[i] for i in range(4))
  110. )
  111. grps[2].add_dependencie(grps[0])
  112. self.assertEqual(
  113. set(grps[5].dependencies(True).values()),
  114. set( grps[i] for i in range(5))
  115. )
  116. self.assertEqual(
  117. set(grps[4].dependencies(True).values()),
  118. set( grps[i] for i in range(4))
  119. )
  120. # Inserting circular deps
  121. with self.assertRaises(EditorialModelError):
  122. grps[0].add_dependencie(grps[5])
  123. def test_circular_dep(self):
  124. """ Test circular dependencies detection """
  125. grps = [ EmGroup('group%d' % i) for i in range(10) ]
  126. for i in range(1,10):
  127. grps[i].add_dependencie(grps[i-1])
  128. for i in range(1,10):
  129. for j in range(i+1,10):
  130. with self.assertRaises(EditorialModelError):
  131. grps[i].add_dependencie(grps[j])
  132. def test_d_hash(self):
  133. """ Test the deterministic hash method """
  134. grp = EmGroup('testgrp', display_name = "Test group", help_text="No Help")
  135. self.assertEqual(grp.d_hash(), 2280847427800301892840867965375148376323815160723628142616247375345365409972670566216414157235977332113867542043807295933781561540623070667142779076339712861412992217365501372435232184530261327450635383095)