test_content_revision.py 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # -*- coding: utf-8 -*-
  2. from collections import OrderedDict
  3. from nose.tools import eq_
  4. from sqlalchemy import inspect
  5. from tracim.model import DBSession, ContentRevisionRO
  6. from tracim.model import User
  7. from tracim.model.data import ContentType
  8. from tracim.tests import TestStandard, BaseTest
  9. class TestContentRevision(BaseTest, TestStandard):
  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 if not attr.key in excluded_columns]
  19. new_revision = ContentRevisionRO()
  20. for revision_column in revision_columns:
  21. old_revision_column_value = getattr(revision, revision_column)
  22. setattr(new_revision, revision_column, old_revision_column_value)
  23. return new_revision
  24. def _get_dict_representation(self, revision):
  25. keys_to_remove = ('updated', '_sa_instance_state')
  26. dict_repr = OrderedDict(sorted(revision.__dict__.items()))
  27. for key_to_remove in keys_to_remove:
  28. dict_repr.pop(key_to_remove, None)
  29. return dict_repr
  30. def test_new_revision(self):
  31. admin = DBSession.query(User).filter(User.email == 'admin@admin.admin').one()
  32. workspace = self._create_workspace_and_test(name='workspace_1', user=admin)
  33. folder = self._create_content_and_test(name='folder_1', workspace=workspace, type=ContentType.Folder)
  34. page = self._create_content_and_test(
  35. workspace=workspace,
  36. parent=folder,
  37. name='file_1',
  38. description='content of file_1',
  39. type=ContentType.Page,
  40. owner=admin
  41. )
  42. DBSession.flush()
  43. # Model create a new instance with list of column
  44. new_revision_by_model = ContentRevisionRO.new_from(page.revision)
  45. # Test create a new instance from dynamic listing of model columns mapping
  46. new_revision_by_test = self._new_from(page.revision)
  47. new_revision_by_model_dict = self._get_dict_representation(new_revision_by_model)
  48. new_revision_by_test_dict = self._get_dict_representation(new_revision_by_test)
  49. # They must be identical
  50. eq_(new_revision_by_model_dict, new_revision_by_test_dict)