Browse Source

Merge pull request #99 from tracim/fix/add_revision_type_to_revision

Damien Accorsi 6 years ago
parent
commit
29df01bc78
No account linked to committer's email

+ 4 - 0
tracim/models/context_models.py View File

@@ -458,6 +458,10 @@ class RevisionInContext(object):
458 458
         return self.revision.label
459 459
 
460 460
     @property
461
+    def revision_type(self) -> str:
462
+        return self.revision.revision_type
463
+
464
+    @property
461 465
     def content_type(self) -> str:
462 466
         content_type = ContentType(self.revision.type)
463 467
         if content_type:

+ 113 - 0
tracim/tests/functional/test_contents.py View File

@@ -1,4 +1,12 @@
1 1
 # -*- coding: utf-8 -*-
2
+import transaction
3
+
4
+from tracim import models
5
+from tracim.lib.core.content import ContentApi
6
+from tracim.lib.core.workspace import WorkspaceApi
7
+from tracim.models import get_tm_session
8
+from tracim.models.contents import ContentTypeLegacy as ContentType
9
+from tracim.models.revision_protection import new_revision
2 10
 from tracim.tests import FunctionalTest
3 11
 from tracim.tests import set_html_document_slug_to_legacy
4 12
 from tracim.fixtures.content import Content as ContentFixtures
@@ -314,6 +322,7 @@ class TestHtmlDocuments(FunctionalTest):
314 322
         assert revision['status'] == 'open'
315 323
         assert revision['workspace_id'] == 2
316 324
         assert revision['revision_id'] == 6
325
+        assert revision['revision_type'] == 'creation'
317 326
         assert revision['sub_content_types']
318 327
         # TODO - G.M - 2018-06-173 - Test with real comments
319 328
         assert revision['comment_ids'] == []
@@ -335,6 +344,7 @@ class TestHtmlDocuments(FunctionalTest):
335 344
         assert revision['status'] == 'open'
336 345
         assert revision['workspace_id'] == 2
337 346
         assert revision['revision_id'] == 7
347
+        assert revision['revision_type'] == 'edition'
338 348
         assert revision['sub_content_types']
339 349
         # TODO - G.M - 2018-06-173 - Test with real comments
340 350
         assert revision['comment_ids'] == []
@@ -356,6 +366,7 @@ class TestHtmlDocuments(FunctionalTest):
356 366
         assert revision['status'] == 'open'
357 367
         assert revision['workspace_id'] == 2
358 368
         assert revision['revision_id'] == 27
369
+        assert revision['revision_type'] == 'edition'
359 370
         assert revision['sub_content_types']
360 371
         # TODO - G.M - 2018-06-173 - Test with real comments
361 372
         assert revision['comment_ids'] == []
@@ -697,6 +708,7 @@ class TestThreads(FunctionalTest):
697 708
         assert revision['workspace_id'] == 2
698 709
         assert revision['revision_id'] == 8
699 710
         assert revision['sub_content_types']
711
+        assert revision['revision_type'] == 'creation'
700 712
         assert revision['comment_ids'] == [18, 19, 20]
701 713
         # TODO - G.M - 2018-06-173 - check date format
702 714
         assert revision['created']
@@ -716,6 +728,7 @@ class TestThreads(FunctionalTest):
716 728
         assert revision['status'] == 'open'
717 729
         assert revision['workspace_id'] == 2
718 730
         assert revision['revision_id'] == 26
731
+        assert revision['revision_type'] == 'edition'
719 732
         assert revision['sub_content_types']
720 733
         assert revision['comment_ids'] == []
721 734
         # TODO - G.M - 2018-06-173 - check date format
@@ -725,6 +738,106 @@ class TestThreads(FunctionalTest):
725 738
         assert revision['author']['avatar_url'] is None
726 739
         assert revision['author']['public_name'] == 'Bob i.'
727 740
 
741
+    def test_api__get_thread_revisions__ok_200__most_revision_type(self) -> None:
742
+        """
743
+        get threads revisions
744
+        """
745
+        dbsession = get_tm_session(self.session_factory, transaction.manager)
746
+        admin = dbsession.query(models.User) \
747
+            .filter(models.User.email == 'admin@admin.admin') \
748
+            .one()
749
+        workspace_api = WorkspaceApi(
750
+            current_user=admin,
751
+            session=dbsession,
752
+            config=self.app_config
753
+        )
754
+        business_workspace = workspace_api.get_one(1)
755
+        content_api = ContentApi(
756
+            current_user=admin,
757
+            session=dbsession,
758
+            config=self.app_config
759
+        )
760
+        tool_folder = content_api.get_one(1, content_type=ContentType.Any)
761
+        test_thread = content_api.create(
762
+            content_type=ContentType.Thread,
763
+            workspace=business_workspace,
764
+            parent=tool_folder,
765
+            label='Test Thread',
766
+            do_save=True,
767
+            do_notify=False,
768
+        )
769
+        with new_revision(
770
+           session=dbsession,
771
+           tm=transaction.manager,
772
+           content=test_thread,
773
+        ):
774
+            content_api.update_content(
775
+                test_thread,
776
+                new_label='test_thread_updated',
777
+                new_content='Just a test'
778
+            )
779
+        content_api.save(test_thread)
780
+        with new_revision(
781
+           session=dbsession,
782
+           tm=transaction.manager,
783
+           content=test_thread,
784
+        ):
785
+            content_api.archive(test_thread)
786
+        content_api.save(test_thread)
787
+
788
+        with new_revision(
789
+           session=dbsession,
790
+           tm=transaction.manager,
791
+           content=test_thread,
792
+        ):
793
+            content_api.unarchive(test_thread)
794
+        content_api.save(test_thread)
795
+
796
+        with new_revision(
797
+           session=dbsession,
798
+           tm=transaction.manager,
799
+           content=test_thread,
800
+        ):
801
+            content_api.delete(test_thread)
802
+        content_api.save(test_thread)
803
+
804
+        with new_revision(
805
+           session=dbsession,
806
+           tm=transaction.manager,
807
+           content=test_thread,
808
+        ):
809
+            content_api.undelete(test_thread)
810
+        content_api.save(test_thread)
811
+        dbsession.flush()
812
+        transaction.commit()
813
+        self.testapp.authorization = (
814
+            'Basic',
815
+            (
816
+                'admin@admin.admin',
817
+                'admin@admin.admin'
818
+            )
819
+        )
820
+        res = self.testapp.get(
821
+            '/api/v2/workspaces/1/threads/{}/revisions'.format(test_thread.content_id),  # nopep8
822
+            status=200
823
+        )
824
+        revisions = res.json_body
825
+        assert len(revisions) == 6
826
+        for revision in revisions:
827
+            revision['content_type'] == 'thread'
828
+            revision['workspace_id'] == 1
829
+            revision['content_id'] == test_thread.content_id
830
+        revision = revisions[0]
831
+        revision['revision_type'] == 'creation'
832
+        revision = revisions[1]
833
+        revision['revision_type'] == 'archiving'
834
+        revision = revisions[2]
835
+        revision['revision_type'] == 'unarchiving'
836
+        revision = revisions[3]
837
+        revision['revision_type'] == 'deletion'
838
+        revision = revisions[4]
839
+        revision['revision_type'] == 'undeletion'
840
+
728 841
     def test_api__set_thread_status__ok_200__nominal_case(self) -> None:
729 842
         """
730 843
         Set thread status

+ 5 - 0
tracim/views/core_api/schemas.py View File

@@ -20,6 +20,7 @@ from tracim.models.context_models import WorkspaceAndContentPath
20 20
 from tracim.models.context_models import ContentFilter
21 21
 from tracim.models.context_models import LoginCredentials
22 22
 from tracim.models.data import UserRoleInWorkspace
23
+from tracim.models.data import ActionDescription
23 24
 
24 25
 
25 26
 class UserDigestSchema(marshmallow.Schema):
@@ -473,6 +474,10 @@ class RevisionSchema(ContentDigestSchema):
473 474
         example=12,
474 475
         validate=Range(min=1, error="Value must be greater than 0"),
475 476
     )
477
+    revision_type = marshmallow.fields.String(
478
+        example=ActionDescription.CREATION,
479
+        validate=OneOf(ActionDescription.allowed_values()),
480
+    )
476 481
     created = marshmallow.fields.DateTime(
477 482
         format=DATETIME_FORMAT,
478 483
         description='Content creation date',