test_content_revision.py 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # -*- coding: utf-8 -*-
  2. from collections import OrderedDict
  3. from sqlalchemy import inspect
  4. from tracim_backend.models import ContentRevisionRO
  5. from tracim_backend.models import User
  6. from tracim_backend.models.contents import CONTENT_TYPES
  7. from tracim_backend.tests import DefaultTest
  8. from tracim_backend.tests import eq_
  9. class TestContentRevision(DefaultTest):
  10. def _new_from(self, revision):
  11. excluded_columns = (
  12. 'revision_id',
  13. '_sa_instance_state',
  14. 'depot_file',
  15. 'node',
  16. 'revision_read_statuses',
  17. )
  18. revision_columns = [attr.key for attr in inspect(revision).attrs
  19. if attr.key not in excluded_columns]
  20. new_revision = ContentRevisionRO()
  21. for revision_column in revision_columns:
  22. old_revision_column_value = getattr(revision, revision_column)
  23. setattr(new_revision, revision_column, old_revision_column_value)
  24. return new_revision
  25. def _get_dict_representation(self, revision):
  26. keys_to_remove = ('updated', '_sa_instance_state')
  27. dict_repr = OrderedDict(sorted(revision.__dict__.items()))
  28. for key_to_remove in keys_to_remove:
  29. dict_repr.pop(key_to_remove, None)
  30. return dict_repr
  31. def test_new_revision(self):
  32. admin = self.session.query(User).filter(
  33. User.email == 'admin@admin.admin'
  34. ).one()
  35. workspace = self._create_workspace_and_test(
  36. name='workspace_1',
  37. user=admin
  38. )
  39. folder = self._create_content_and_test(
  40. name='folder_1',
  41. workspace=workspace,
  42. type=CONTENT_TYPES.Folder.slug
  43. )
  44. page = self._create_content_and_test(
  45. workspace=workspace,
  46. parent=folder,
  47. name='file_1',
  48. description='content of file_1',
  49. type=CONTENT_TYPES.Page.slug,
  50. owner=admin
  51. )
  52. self.session.flush()
  53. # Model create a new instance with list of column
  54. new_revision_by_model = ContentRevisionRO.new_from(page.revision)
  55. # Test create a new instance from dynamic listing of model
  56. # columns mapping
  57. new_revision_by_test = self._new_from(page.revision)
  58. new_revision_by_model_dict = self._get_dict_representation(
  59. new_revision_by_model
  60. )
  61. new_revision_by_test_dict = self._get_dict_representation(
  62. new_revision_by_test
  63. )
  64. # They must be identical
  65. eq_(new_revision_by_model_dict, new_revision_by_test_dict)