Add the tag created and tag edited events.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -117,6 +117,7 @@
|
||||
- The official config filename is config.yml.
|
||||
- Interpret ALLOWED_HOSTS as YAML.
|
||||
- Don't show the document types of an index instance.
|
||||
- Add the tag created and tag edited events.
|
||||
|
||||
3.0.3 (2018-08-17)
|
||||
==================
|
||||
|
||||
@@ -19,7 +19,9 @@ from events.links import (
|
||||
from events.permissions import permission_events_view
|
||||
from navigation import SourceColumn
|
||||
|
||||
from .events import event_tag_attach, event_tag_remove
|
||||
from .events import (
|
||||
event_tag_attach, event_tag_created, event_tag_edited, event_tag_remove
|
||||
)
|
||||
from .handlers import handler_index_document, handler_tag_pre_delete
|
||||
from .links import (
|
||||
link_multiple_documents_attach_tag, link_multiple_documents_tag_remove,
|
||||
@@ -66,7 +68,8 @@ class TagsApp(MayanAppConfig):
|
||||
|
||||
ModelEventType.register(
|
||||
model=Tag, event_types=(
|
||||
event_tag_attach, event_tag_remove
|
||||
event_tag_attach, event_tag_created, event_tag_edited,
|
||||
event_tag_remove
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -9,6 +9,12 @@ namespace = EventTypeNamespace(name='tags', label=_('Tags'))
|
||||
event_tag_attach = namespace.add_event_type(
|
||||
label=_('Tag attached to document'), name='attach'
|
||||
)
|
||||
event_tag_created = namespace.add_event_type(
|
||||
label=_('Tag created'), name='tag_created'
|
||||
)
|
||||
event_tag_edited = namespace.add_event_type(
|
||||
label=_('Tag edited'), name='tag_edited'
|
||||
)
|
||||
event_tag_remove = namespace.add_event_type(
|
||||
label=_('Tag removed from document'), name='remove'
|
||||
)
|
||||
|
||||
@@ -11,7 +11,9 @@ from acls.models import AccessControlList
|
||||
from documents.models import Document
|
||||
from documents.permissions import permission_document_view
|
||||
|
||||
from .events import event_tag_attach, event_tag_remove
|
||||
from .events import (
|
||||
event_tag_attach, event_tag_created, event_tag_edited, event_tag_remove
|
||||
)
|
||||
from .widgets import widget_single_tag
|
||||
|
||||
|
||||
@@ -59,6 +61,19 @@ class Tag(models.Model):
|
||||
action_object=self, actor=user, target=document
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
user = kwargs.pop('_user', None)
|
||||
created = not self.pk
|
||||
|
||||
result = super(Tag, self).save(*args, **kwargs)
|
||||
|
||||
if created:
|
||||
event_tag_created.commit(actor=user, target=self)
|
||||
else:
|
||||
event_tag_edited.commit(actor=user, target=self)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
class DocumentTag(Tag):
|
||||
class Meta:
|
||||
|
||||
42
mayan/apps/tags/tests/mixins.py
Normal file
42
mayan/apps/tags/tests/mixins.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from documents.permissions import permission_document_view
|
||||
from documents.tests import GenericDocumentViewTestCase
|
||||
|
||||
from ..models import Tag
|
||||
from ..permissions import (
|
||||
permission_tag_attach, permission_tag_create, permission_tag_delete,
|
||||
permission_tag_edit, permission_tag_remove, permission_tag_view
|
||||
)
|
||||
|
||||
from .literals import (
|
||||
TEST_TAG_COLOR, TEST_TAG_COLOR_EDITED, TEST_TAG_LABEL,
|
||||
TEST_TAG_LABEL_EDITED
|
||||
)
|
||||
|
||||
|
||||
class TagTestMixin(object):
|
||||
def _create_tag(self):
|
||||
self.tag = Tag.objects.create(
|
||||
color=TEST_TAG_COLOR, label=TEST_TAG_LABEL
|
||||
)
|
||||
|
||||
def _request_tag_create_view(self):
|
||||
return self.post(
|
||||
viewname='tags:tag_create', data={
|
||||
'label': TEST_TAG_LABEL,
|
||||
'color': TEST_TAG_COLOR
|
||||
}
|
||||
)
|
||||
|
||||
def _request_tag_delete_view(self):
|
||||
return self.post(
|
||||
viewname='tags:tag_delete', args=(self.tag.pk,)
|
||||
)
|
||||
|
||||
def _request_tag_edit_view(self):
|
||||
return self.post(
|
||||
viewname='tags:tag_edit', args=(self.tag.pk,), data={
|
||||
'label': TEST_TAG_LABEL_EDITED, 'color': TEST_TAG_COLOR_EDITED
|
||||
}
|
||||
)
|
||||
73
mayan/apps/tags/tests/test_events.py
Normal file
73
mayan/apps/tags/tests/test_events.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from actstream.models import Action
|
||||
|
||||
from documents.tests import GenericDocumentViewTestCase
|
||||
|
||||
from ..events import event_tag_created, event_tag_edited
|
||||
from ..models import Tag
|
||||
from ..permissions import permission_tag_create, permission_tag_edit
|
||||
|
||||
from .mixins import TagTestMixin
|
||||
|
||||
|
||||
class TagEventsTestCase(TagTestMixin, GenericDocumentViewTestCase):
|
||||
def test_tag_create_event_no_permissions(self):
|
||||
self.login_user()
|
||||
|
||||
Action.objects.all().delete()
|
||||
|
||||
response = self._request_tag_create_view()
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(Action.objects.count(), 0)
|
||||
|
||||
def test_tag_create_event_with_permissions(self):
|
||||
self.login_user()
|
||||
|
||||
Action.objects.all().delete()
|
||||
|
||||
self.grant_permission(permission=permission_tag_create)
|
||||
|
||||
response = self._request_tag_create_view()
|
||||
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
event = Action.objects.first()
|
||||
|
||||
tag = Tag.objects.first()
|
||||
|
||||
self.assertEqual(event.verb, event_tag_created.id)
|
||||
self.assertEqual(event.target, tag)
|
||||
self.assertEqual(event.actor, self.user)
|
||||
|
||||
def test_tag_edit_event_no_permissions(self):
|
||||
self._create_tag()
|
||||
|
||||
self.login_user()
|
||||
|
||||
Action.objects.all().delete()
|
||||
|
||||
response = self._request_tag_edit_view()
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(Action.objects.count(), 0)
|
||||
|
||||
def test_tag_edit_event_with_access(self):
|
||||
self._create_tag()
|
||||
|
||||
self.login_user()
|
||||
|
||||
Action.objects.all().delete()
|
||||
|
||||
self.grant_access(
|
||||
permission=permission_tag_edit, obj=self.tag
|
||||
)
|
||||
|
||||
response = self._request_tag_edit_view()
|
||||
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
event = Action.objects.first()
|
||||
|
||||
self.assertEqual(event.verb, event_tag_edited.id)
|
||||
self.assertEqual(event.target, self.tag)
|
||||
self.assertEqual(event.actor, self.user)
|
||||
@@ -126,6 +126,9 @@ class TagCreateView(SingleObjectCreateView):
|
||||
post_action_redirect = reverse_lazy('tags:tag_list')
|
||||
view_permission = permission_tag_create
|
||||
|
||||
def get_save_extra_data(self):
|
||||
return {'_user': self.request.user}
|
||||
|
||||
|
||||
class TagDeleteActionView(MultipleObjectConfirmActionView):
|
||||
model = Tag
|
||||
@@ -186,6 +189,9 @@ class TagEditView(SingleObjectEditView):
|
||||
'title': _('Edit tag: %s') % self.get_object(),
|
||||
}
|
||||
|
||||
def get_save_extra_data(self):
|
||||
return {'_user': self.request.user}
|
||||
|
||||
|
||||
class TagListView(SingleObjectListView):
|
||||
object_permission = permission_tag_view
|
||||
|
||||
Reference in New Issue
Block a user