Browse Source

Add 'properties' to ContentRevision clone columns and test

Bastien Sevajol 9 years ago
parent
commit
2edcf03d60
2 changed files with 58 additions and 1 deletions
  1. 1 1
      tracim/tracim/model/data.py
  2. 57 0
      tracim/tracim/tests/models/test_content_revision.py

+ 1 - 1
tracim/tracim/model/data.py View File

@@ -515,7 +515,7 @@ class ContentRevisionRO(DeclarativeBase):
515 515
 
516 516
     """ List of column copied when make a new revision from another """
517 517
     _cloned_columns = (
518
-        'content_id', 'owner_id', 'label', 'description', 'file_name', 'file_mimetype',
518
+        'content_id', 'owner_id', 'label', 'description', 'file_name', 'file_mimetype', 'properties',
519 519
         'file_content', 'type', 'status', 'created', 'updated', 'is_deleted', 'is_archived',
520 520
         'revision_type', 'workspace_id', 'workspace', 'parent_id', 'parent', 'node', 'owner'
521 521
     )

+ 57 - 0
tracim/tracim/tests/models/test_content_revision.py View File

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