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_leobject.py 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. """
  2. Tests for _LeObject and LeObject
  3. """
  4. import copy
  5. import unittest
  6. from unittest import TestCase
  7. from unittest.mock import patch
  8. import EditorialModel
  9. import DataSource.dummy
  10. import leapi
  11. import leapi.test.utils
  12. from leapi.leobject import _LeObject
  13. from leapi.lecrud import _LeCrud
  14. ## Testing methods that need the generated code
  15. class LeObjectTestCase(TestCase):
  16. @classmethod
  17. def setUpClass(cls):
  18. """ Write the generated code in a temporary directory and import it """
  19. cls.tmpdir = leapi.test.utils.tmp_load_factory_code()
  20. @classmethod
  21. def tearDownClass(cls):
  22. """ Remove the temporary directory created at class setup """
  23. leapi.test.utils.cleanup(cls.tmpdir)
  24. def test_uid2leobj(self):
  25. """ Testing _Leobject.uid2leobj() """
  26. import dyncode
  27. from dyncode import LeType, LeClass
  28. for i in dyncode.LeObject._me_uid.keys():
  29. cls = dyncode.LeObject.uid2leobj(i)
  30. if LeType in cls.__bases__:
  31. self.assertEqual(i, cls._type_id)
  32. elif LeClass in cls.__bases__:
  33. self.assertEqual(i, cls._class_id)
  34. else:
  35. self.fail("Bad value returned : '%s'"%cls)
  36. i=10
  37. while i in dyncode.LeObject._me_uid.keys():
  38. i+=1
  39. with self.assertRaises(KeyError):
  40. dyncode.LeObject.uid2leobj(i)
  41. class LeObjectMockDatasourceTestCase(TestCase):
  42. """ Testing _LeObject using a mock on the datasource """
  43. @classmethod
  44. def setUpClass(cls):
  45. """ Write the generated code in a temporary directory and import it """
  46. cls.tmpdir = leapi.test.utils.tmp_load_factory_code()
  47. @classmethod
  48. def tearDownClass(cls):
  49. """ Remove the temporary directory created at class setup """
  50. leapi.test.utils.cleanup(cls.tmpdir)
  51. @patch('DataSource.dummy.leapidatasource.DummyDatasource.insert')
  52. def test_insert(self, dsmock):
  53. from dyncode import Publication, Numero, LeObject
  54. ndatas = [
  55. {'titre' : 'FooBar'},
  56. {'titre':'hello'},
  57. {'titre':'world'},
  58. ]
  59. for ndats in ndatas:
  60. # Adding values for internal fields
  61. expt_dats = copy.copy(ndats)
  62. expt_dats['string'] = None
  63. expt_dats['class_id'] = Publication._class_id
  64. expt_dats['type_id'] = Numero._type_id
  65. Publication.insert(ndats, classname='Numero')
  66. dsmock.assert_called_once_with(Numero, **expt_dats)
  67. dsmock.reset_mock()
  68. LeObject.insert(ndats, classname = 'Numero')
  69. dsmock.assert_called_once_with(Numero, **expt_dats)
  70. dsmock.reset_mock()
  71. @patch('DataSource.dummy.leapidatasource.DummyDatasource.update')
  72. def test_update(self, dsmock):
  73. from dyncode import Publication, Numero, LeObject, Personne, Article, RelTextesPersonneAuteur
  74. args = [
  75. (Article(42), {'titre': 'foobar'}),
  76. (Personne(51), {'nom': 'foobar'}),
  77. (RelTextesPersonneAuteur(1337), {'adresse': 'foobar'}),
  78. ]
  79. for instance, datas in args:
  80. with patch.object(_LeCrud, 'populate', return_value=None) as mock_populate:
  81. instance.update(datas)
  82. mock_populate.assert_called_once_with()
  83. dsmock.assert_called_once_with(instance.__class__, instance.uidget(), **datas)
  84. dsmock.reset_mock()
  85. @patch('DataSource.dummy.leapidatasource.DummyDatasource.delete')
  86. def test_delete(self, dsmock):
  87. from dyncode import Publication, Numero, LeObject, LeType, LeRelation
  88. args = [
  89. Publication(1),
  90. Numero(5),
  91. LeObject(51),
  92. LeRelation(1337),
  93. ]
  94. for instance in args:
  95. instance.delete()
  96. dsmock.assert_called_once_with(instance.__class__, instance.uidget())
  97. dsmock.reset_mock()