Skip to content

Commit

Permalink
remove specific translator group/role after removing a language.
Browse files Browse the repository at this point in the history
  • Loading branch information
arifin4web committed Aug 20, 2018
1 parent dc0ddbc commit e9c79cf
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 4 deletions.
17 changes: 17 additions & 0 deletions src/wagtailtrans/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,23 @@ def get_or_create_language_group(language):
return group


def remove_language_group(language):
"""Remove translator group for a specific language (if exists).
:param language: Language instance
:return: Boolean True
"""
try:
group = Group.objects.get(name='translator-%s' % language.code)
except Group.DoesNotExist:
# Do Nothing
pass
else:
group.delete()

return True


def create_group_page_permission(page, language):
"""Create new GroupPagePermissions for
the newly created page
Expand Down
15 changes: 13 additions & 2 deletions src/wagtailtrans/signals.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
from django.core.exceptions import ObjectDoesNotExist
from django.db.models.signals import m2m_changed, post_save, pre_delete
from django.db.models.signals import m2m_changed, post_save, pre_delete, post_delete
from wagtail.admin.signals import init_new_page
from wagtail.core.models import Site, get_page_models

from wagtailtrans.conf import get_wagtailtrans_setting
from wagtailtrans.models import Language, SiteLanguages, TranslatablePage
from wagtailtrans.permissions import (
create_group_permissions, get_or_create_language_group)
create_group_permissions, get_or_create_language_group, remove_language_group)


def synchronize_trees(sender, instance, **kwargs):
Expand Down Expand Up @@ -122,6 +122,16 @@ def create_language_permissions_and_group(sender, instance, **kwargs):
create_group_permissions(group, instance)


def remove_language_roles(sender, instance, **kwargs):
"""Remove the `Translator` role which was created along with Language.
:param sender: Sender model
:param instance: Language instance
:param kwargs: kwargs
"""
remove_language_group(instance)


def force_parent_language(**kwargs):
"""Force the initial language of the first page, before creating..
Expand Down Expand Up @@ -154,6 +164,7 @@ def register_signal_handlers():
"""
post_save.connect(create_language_permissions_and_group, sender=Language)
post_delete.connect(remove_language_roles, sender=Language)
init_new_page.connect(force_parent_language)
if get_wagtailtrans_setting('SYNC_TREE'):
if get_wagtailtrans_setting('LANGUAGES_PER_SITE'):
Expand Down
13 changes: 11 additions & 2 deletions tests/unit/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
from django.test import override_settings

from tests.factories import language, pages, sites, users
from django.contrib.auth.models import Group
from wagtailtrans import permissions
from wagtailtrans.models import Language, TranslatablePage
from wagtailtrans.views.language import LanguageDeleteView
from wagtailtrans.views.translation import TranslationView
Expand Down Expand Up @@ -112,18 +114,21 @@ def test_response_language_edit_view(self, admin_client):
class TestLanguageDeleteView(object):

def setup(self):
self.default_language = language.LanguageFactory.create(code='en', is_default=True)
self.default_language = language.LanguageFactory(is_default=True, code='en', position=1)
self.pages = sites.create_site_tree(language=self.default_language)
self.second_language = language.LanguageFactory(is_default=False, code='fr', position=2)
self.view = lambda language: LanguageDeleteView(
instance_pk=str(language.pk),
model_admin=LanguageModelAdmin()
)

def _get_language_group_name(self, language):
return 'translator-%s' % language.code

def test_post(self, rf):
"""
When we delete non canonical language it should also delete the related
pages.
pages and related roles/groups.
After a successfull post request the language and related pages for
that specific language should be deleted.
Expand All @@ -147,13 +152,17 @@ def test_post(self, rf):
assert TranslatablePage.objects.count() == 6
assert TranslatablePage.objects.filter(language=self.second_language).count() == 3
assert self.second_language in Language.objects.all()
assert Group.objects.\
filter(name=self._get_language_group_name(self.second_language)).count() == 1

response = self.view(self.second_language).dispatch(request)

# Second Language and Pages should not exists after post request.
assert TranslatablePage.objects.count() == 3
assert TranslatablePage.objects.filter(language=self.second_language).count() == 0
assert self.second_language not in Language.objects.all()
assert Group.objects.\
filter(name=self._get_language_group_name(self.second_language)).count() == 0

# New messages should be added
assert messages.added_new
Expand Down

0 comments on commit e9c79cf

Please sign in to comment.