Skip to content
This repository has been archived by the owner on Jun 29, 2020. It is now read-only.

Commit

Permalink
Merge pull request #1024 from kawazrepos/grave
Browse files Browse the repository at this point in the history
ガフの部屋を実装した
  • Loading branch information
giginet committed Dec 29, 2015
2 parents 169c5cc + 0ba3e5a commit 36580b9
Show file tree
Hide file tree
Showing 13 changed files with 210 additions and 78 deletions.
5 changes: 5 additions & 0 deletions src/kawaz/core/personas/models/persona.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ def create_superuser(self, username, email, password, **extra_fields):
return self._create_user(username, email, password, 'adam',
**extra_fields)

def retired(self):
return self.filter(is_active=False)


class ActivePersonaManager(PersonaManager):
"""
Expand Down Expand Up @@ -145,6 +148,7 @@ class Meta:
verbose_name = _('Persona')
verbose_name_plural = _('Personas')
permissions = (
('view_retired_persona', 'Can view retired'),
('activate_persona', 'Can activate/deactivate the persona'),
('assign_role_persona', 'Can assign the role to the persona'),
)
Expand Down Expand Up @@ -184,6 +188,7 @@ def get_avatar(self, size):
get_middle_avatar = lambda self: self.get_avatar('middle')
get_large_avatar = lambda self: self.get_avatar('large')
get_huge_avatar = lambda self: self.get_avatar('huge')
get_grayscale_avatar = lambda self: self.get_avatar('grayscale')

def clean_fields(self, exclude=None, **kwargs):
# 使用不可な文字列が指定されていた場合はエラー
Expand Down
4 changes: 4 additions & 0 deletions src/kawaz/core/personas/perms.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ def _has_activate_perm(self, user_obj, perm, obj):
# が可能(Adminページ限定)
return user_obj.role in ('seele', 'nerv',)

def _has_view_retired_perm(self, user_obj, perm, obj):
return user_obj.role in ('children', 'seele', 'nerv')

def _has_assign_role_perm(self, user_obj, perm, obj):
# ゼーレ権限以上の場合のみ役職を変更することができる
return user_obj.role in ('seele',)
Expand All @@ -46,6 +49,7 @@ def has_perm(self, user_obj, perm, obj=None):
'personas.delete_persona': self._has_delete_perm,
'personas.activate_persona': self._has_activate_perm,
'personas.assign_role_persona': self._has_assign_role_perm,
'personas.view_retired_persona': self._has_view_retired_perm,
}
if perm in permission_methods:
return permission_methods[perm](user_obj, perm, obj)
Expand Down
17 changes: 16 additions & 1 deletion src/kawaz/core/personas/tests/test_models/test_persona.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,22 @@
from django.core.exceptions import ValidationError

from ..factories import PersonaFactory
from kawaz.core.personas.models import Persona
from kawaz.core.personas.models import Persona, PersonaManager


class PersonaManagerTestCase(TestCase):
def test_manager_is_assigned(self):
"""Persona.objectsでPersonaManagerが返る"""
self.assertTrue(isinstance(Persona.objects, PersonaManager))

def test_retired(self):
"""PersonaManager.retiredで退会済みのユーザーのみが返る"""
active_user = PersonaFactory(is_active=True)
retired_user = PersonaFactory(is_active=False)
retired = Persona.objects.retired()
self.assertEqual(len(retired), 1)
self.assertEqual(retired[0], retired_user)
self.assertNotIn(active_user, retired)


class PersonaModelTestCase(TestCase):
Expand Down
12 changes: 9 additions & 3 deletions src/kawaz/core/personas/tests/test_perms/test_persona.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
from permission import add_permission_logic
from permission import remove_permission_logic
from ..factories import PersonaFactory
from ...perms import AdamPermissionLogic
from ...perms import SeelePermissionLogic
from ...perms import NervPermissionLogic
from ...perms import ChildrenPermissionLogic
from ...perms import KawazAuthorPermissionLogic
from ..models import PersonaTestArticle as Article
Expand Down Expand Up @@ -94,6 +91,15 @@ def test_assign_role_permission(self):
self._test_permission('wille', 'assign_role', neg=True)
self._test_permission('anonymous', 'assign_role', neg=True)

def test_view_retired_permission(self):
"""チルドレン以上のみガフの部屋閲覧権限を持つ"""
self._test_permission('adam', 'view_retired')
self._test_permission('seele', 'view_retired')
self._test_permission('nerv', 'view_retired')
self._test_permission('children', 'view_retired')
self._test_permission('wille', 'view_retired', neg=True)
self._test_permission('anonymous', 'view_retired', neg=True)


class ChildrenPermissionLogicTestCase(TestCase):
roles = ('adam', 'seele', 'nerv', 'children', 'wille', 'anonymous')
Expand Down
27 changes: 26 additions & 1 deletion src/kawaz/core/personas/tests/test_views/test_persona.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,6 @@ def test_non_seele_cannot_promote_to_seele(self):
r = self.client.post(url)
self.assertEqual(r.status_code, 404)


def test_seele_can_promote_to_seele(self):
"""ゼーレ以上はゼーレへの降格が可能"""
url = reverse('personas_persona_assign_seele')
Expand All @@ -415,3 +414,29 @@ def test_seele_can_promote_to_seele(self):
user = Persona.objects.get(pk=user.pk)
self.assertEqual(user.role, 'seele')


class PersonaRetiredViewTestCase(PersonaViewTestCaseBase):
def setUp(self):
super().setUp()
self.active_user = PersonaFactory(is_active=True)
self.retired_user = PersonaFactory(is_active=False)

def test_retired_url(self):
"""PersonaRetiredViewの逆引きができる"""
self.assertEqual(reverse('personas_persona_retired'), '/members/retired/')

def test_retired_view(self):
"""チルドレン以上はガフの部屋にアクセスして遺影を表示できる"""
for user in self.members:
self.prefer_login(user)
r = self.client.get('/members/retired/')
self.assertEqual(r.status_code, 200)
retired_users = r.context['object_list']
self.assertEqual(len(retired_users), 1)
self.assertEqual(retired_users[0], self.retired_user)

def test_retired_cannot_view_anonymous(self):
"""非ログインユーザーはガフの部屋を見れない"""
self.prefer_login(self.anonymous)
r = self.client.get('/members/retired/')
self.assertEqual(r.status_code, 302)
3 changes: 3 additions & 0 deletions src/kawaz/core/personas/urls.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.conf.urls import patterns, url, include
from .views import (PersonaDetailView,
PersonaListView,
PersonaRetiredView,
PersonaUpdateView,
PersonaAssignAdamView,
PersonaAssignSeeleView,
Expand All @@ -10,6 +11,8 @@
urlpatterns = patterns('',
url(r'^$',
PersonaListView.as_view(), name='personas_persona_list'),
url(r'^retired/$',
PersonaRetiredView.as_view(), name='personas_persona_retired'),
url(r'^my/update/$', PersonaUpdateView.as_view(),
name='personas_persona_update'),
url(r'^my/assign/adam/$', PersonaAssignAdamView.as_view(),
Expand Down
1 change: 1 addition & 0 deletions src/kawaz/core/personas/views/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from .persona import (PersonaDetailView,
PersonaListView,
PersonaRetiredView,
PersonaUpdateView,
PersonaAssignAdamView,
PersonaAssignSeeleView)
Expand Down
13 changes: 10 additions & 3 deletions src/kawaz/core/personas/views/persona.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
from django.contrib import messages
from django.http import (HttpResponseNotAllowed,
HttpResponseRedirect,
HttpResponseForbidden,
Http404)
from django.utils.translation import ugettext as _
from django.core.exceptions import ObjectDoesNotExist
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import UpdateView
from django.shortcuts import get_object_or_404
from django_filters.views import FilterView
from permission.decorators import permission_required
from ..forms import PersonaUpdateForm, PersonaRoleForm
from ..forms import PersonaUpdateForm
from ..models import Persona
from ..models import Service
from ..filters import PersonaFilter
Expand Down Expand Up @@ -72,6 +71,14 @@ def get_context_data(self, **kwargs):
return data


@permission_required('personas.view_retired_persona')
class PersonaRetiredView(ListView):
template_name = 'personas/persona_retired.html'

def get_queryset(self):
return Persona.objects.retired()


@permission_required('personas.change_persona')
class PersonaUpdateView(SuccessMessageMixin, UpdateView):
model = Persona
Expand Down
1 change: 1 addition & 0 deletions src/kawaz/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@
'large': (96, 96,),
'middle': (48, 48,),
'small': (24, 24,),
'grayscale': (96, 96, 'grayscale'),
}

# django-permission
Expand Down

0 comments on commit 36580b9

Please sign in to comment.