예제 #1
0
 def setUp(self):
     super().setUp()
     self.users['administrator'] = PersonaFactory(username='******',
                                                  role='children')
     self.users['project_member'] = PersonaFactory(
         username='******', role='children')
     self.project = ProjectFactory()
     self.project.join(self.users['project_member'])
     self.product = ProductFactory(project=self.project)
     # Note:
     #   self.product.join で加えても良いが、内部で user.has_perm を呼ぶ
     #   ので django-permission により結果がキャッシュされ、今後のテスト
     #   結果に影響するため、直接 administrators.add を呼び出している
     self.product.administrators.add(self.users['administrator'])
예제 #2
0
 def setUp(self):
     super().setUp()
     self.users['administrator'] = PersonaFactory(
         username='******',
         role='children'
     )
     self.users['project_member'] = PersonaFactory(
         username='******',
         role='children'
     )
     self.project = ProjectFactory()
     self.project.join(self.users['project_member'])
     self.product = ProductFactory(project=self.project)
     # Note:
     #   self.product.join で加えても良いが、内部で user.has_perm を呼ぶ
     #   ので django-permission により結果がキャッシュされ、今後のテスト
     #   結果に影響するため、直接 administrators.add を呼び出している
     self.product.administrators.add(self.users['administrator'])
예제 #3
0
class ProductPermissionLogicTestCase(BasePermissionLogicTestCase):
    app_label = 'products'
    model_name = 'product'

    def setUp(self):
        super().setUp()
        self.users['administrator'] = PersonaFactory(username='******',
                                                     role='children')
        self.users['project_member'] = PersonaFactory(
            username='******', role='children')
        self.project = ProjectFactory()
        self.project.join(self.users['project_member'])
        self.product = ProductFactory(project=self.project)
        # Note:
        #   self.product.join で加えても良いが、内部で user.has_perm を呼ぶ
        #   ので django-permission により結果がキャッシュされ、今後のテスト
        #   結果に影響するため、直接 administrators.add を呼び出している
        self.product.administrators.add(self.users['administrator'])

    def test_add_permission(self):
        """
        ログインユーザー以上にモデルの追加権限がある
        """
        self._test('adam', 'add')
        self._test('seele', 'add')
        self._test('nerv', 'add')
        self._test('children', 'add')
        self._test('wille', 'add', neg=True)
        self._test('anonymous', 'add', neg=True)
        self._test('administrator', 'add')
        self._test('project_member', 'add')

    def test_change_permission(self):
        """
        ログインユーザー以上にモデルの変更権限がある
        """
        self._test('adam', 'change')
        self._test('seele', 'change')
        self._test('nerv', 'change')
        self._test('children', 'change')
        self._test('wille', 'change', neg=True)
        self._test('anonymous', 'change', neg=True)
        self._test('administrator', 'change')
        self._test('project_member', 'change')

    def test_change_permission_with_obj(self):
        """
        以下のユーザーがオブジェクトの変更権限を持つ
        - ネルフ以上のメンバー
        - Productの管理者
        - 関連プロジェクトのメンバー
        """
        self._test('adam', 'change', obj=self.product)
        self._test('seele', 'change', obj=self.product)
        self._test('nerv', 'change', obj=self.product)
        self._test('children', 'change', obj=self.product, neg=True)
        self._test('wille', 'change', obj=self.product, neg=True)
        self._test('anonymous', 'change', obj=self.product, neg=True)
        self._test('administrator', 'change', obj=self.product)
        self._test('project_member', 'change', obj=self.product)

    def test_delete_permission(self):
        """
        ログインユーザー以上にモデルの削除権限がある
        """
        self._test('adam', 'delete')
        self._test('seele', 'delete')
        self._test('nerv', 'delete')
        self._test('children', 'delete')
        self._test('wille', 'delete', neg=True)
        self._test('anonymous', 'delete', neg=True)
        self._test('administrator', 'delete')
        self._test('project_member', 'delete')

    def test_delete_permission_with_obj(self):
        """
        以下のユーザーがオブジェクトの削除権限を持つ
        - Productの管理者
        """
        self._test('adam', 'delete', obj=self.product)
        self._test('seele', 'delete', obj=self.product, neg=True)
        self._test('nerv', 'delete', obj=self.product, neg=True)
        self._test('children', 'delete', obj=self.product, neg=True)
        self._test('wille', 'delete', obj=self.product, neg=True)
        self._test('anonymous', 'delete', obj=self.product, neg=True)
        self._test('administrator', 'delete', obj=self.product)
        self._test('project_member', 'delete', obj=self.product, neg=True)

    def test_join_permission(self):
        """
        ログインユーザー以上にモデルの参加権限がある
        """
        self._test('adam', 'join')
        self._test('seele', 'join')
        self._test('nerv', 'join')
        self._test('children', 'join')
        self._test('wille', 'join', neg=True)
        self._test('anonymous', 'join', neg=True)
        self._test('administrator', 'join')
        self._test('project_member', 'join')

    def test_join_permission_with_obj(self):
        """
        ログインユーザー以上、かつ既に参加者じゃない人に参加する権限がある
        """
        self._test('adam', 'join', obj=self.product)
        self._test('seele', 'join', obj=self.product)
        self._test('nerv', 'join', obj=self.product)
        self._test('children', 'join', obj=self.product)
        self._test('wille', 'join', obj=self.product, neg=True)
        self._test('anonymous', 'join', obj=self.product, neg=True)
        self._test('administrator', 'join', obj=self.product, neg=True)
        self._test('project_member', 'join', obj=self.product)

    def test_quit_permission(self):
        """
        ログインユーザー以上にモデルの脱退権限がある
        """
        self._test('adam', 'quit')
        self._test('seele', 'quit')
        self._test('nerv', 'quit')
        self._test('children', 'quit')
        self._test('wille', 'quit', neg=True)
        self._test('anonymous', 'quit', neg=True)
        self._test('administrator', 'quit')
        self._test('project_member', 'quit')

    def test_quit_permission_with_obj(self):
        """
        最後ではない参加済みのユーザーのみがオブジェクトの脱退権限を持つ
        """
        self._test('adam', 'quit', obj=self.product)
        self._test('seele', 'quit', obj=self.product, neg=True)
        self._test('nerv', 'quit', obj=self.product, neg=True)
        self._test('children', 'quit', obj=self.product, neg=True)
        self._test('wille', 'quit', obj=self.product, neg=True)
        self._test('anonymous', 'quit', obj=self.product, neg=True)
        self._test('project_member', 'quit', obj=self.product, neg=True)

        # 最後の一人なので脱退できない
        self._test('administrator', 'quit', obj=self.product, neg=True)

        # もう一人参加者を増やす
        new_administrator = PersonaFactory()
        self.product.join(new_administrator)

        # django-permissionのキャッシュの問題で権限が更新されないので
        # オブジェクトを再度取得している
        self.users['administrator'] = Persona.objects.get(
            pk=self.users['administrator'].pk, )

        # 最後の一人になるので同じ人が脱退できるようになる
        self._test('administrator', 'quit', obj=self.product)
예제 #4
0
class ProductPermissionLogicTestCase(BasePermissionLogicTestCase):
    app_label = 'products'
    model_name = 'product'

    def setUp(self):
        super().setUp()
        self.users['administrator'] = PersonaFactory(
            username='******',
            role='children'
        )
        self.users['project_member'] = PersonaFactory(
            username='******',
            role='children'
        )
        self.project = ProjectFactory()
        self.project.join(self.users['project_member'])
        self.product = ProductFactory(project=self.project)
        # Note:
        #   self.product.join で加えても良いが、内部で user.has_perm を呼ぶ
        #   ので django-permission により結果がキャッシュされ、今後のテスト
        #   結果に影響するため、直接 administrators.add を呼び出している
        self.product.administrators.add(self.users['administrator'])

    def test_add_permission(self):
        """
        ログインユーザー以上にモデルの追加権限がある
        """
        self._test('adam', 'add')
        self._test('seele', 'add')
        self._test('nerv', 'add')
        self._test('children', 'add')
        self._test('wille', 'add', neg=True)
        self._test('anonymous', 'add', neg=True)
        self._test('administrator', 'add')
        self._test('project_member', 'add')

    def test_change_permission(self):
        """
        ログインユーザー以上にモデルの変更権限がある
        """
        self._test('adam', 'change')
        self._test('seele', 'change')
        self._test('nerv', 'change')
        self._test('children', 'change')
        self._test('wille', 'change', neg=True)
        self._test('anonymous', 'change', neg=True)
        self._test('administrator', 'change')
        self._test('project_member', 'change')

    def test_change_permission_with_obj(self):
        """
        以下のユーザーがオブジェクトの変更権限を持つ
        - ネルフ以上のメンバー
        - Productの管理者
        - 関連プロジェクトのメンバー
        """
        self._test('adam', 'change', obj=self.product)
        self._test('seele', 'change', obj=self.product)
        self._test('nerv', 'change', obj=self.product)
        self._test('children', 'change', obj=self.product, neg=True)
        self._test('wille', 'change', obj=self.product, neg=True)
        self._test('anonymous', 'change', obj=self.product, neg=True)
        self._test('administrator', 'change', obj=self.product)
        self._test('project_member', 'change', obj=self.product)

    def test_delete_permission(self):
        """
        ログインユーザー以上にモデルの削除権限がある
        """
        self._test('adam', 'delete')
        self._test('seele', 'delete')
        self._test('nerv', 'delete')
        self._test('children', 'delete')
        self._test('wille', 'delete', neg=True)
        self._test('anonymous', 'delete', neg=True)
        self._test('administrator', 'delete')
        self._test('project_member', 'delete')

    def test_delete_permission_with_obj(self):
        """
        以下のユーザーがオブジェクトの削除権限を持つ
        - Productの管理者
        """
        self._test('adam', 'delete', obj=self.product)
        self._test('seele', 'delete', obj=self.product, neg=True)
        self._test('nerv', 'delete', obj=self.product, neg=True)
        self._test('children', 'delete', obj=self.product, neg=True)
        self._test('wille', 'delete', obj=self.product, neg=True)
        self._test('anonymous', 'delete', obj=self.product, neg=True)
        self._test('administrator', 'delete', obj=self.product)
        self._test('project_member', 'delete', obj=self.product, neg=True)

    def test_join_permission(self):
        """
        ログインユーザー以上にモデルの参加権限がある
        """
        self._test('adam', 'join')
        self._test('seele', 'join')
        self._test('nerv', 'join')
        self._test('children', 'join')
        self._test('wille', 'join', neg=True)
        self._test('anonymous', 'join', neg=True)
        self._test('administrator', 'join')
        self._test('project_member', 'join')

    def test_join_permission_with_obj(self):
        """
        ログインユーザー以上、かつ既に参加者じゃない人に参加する権限がある
        """
        self._test('adam', 'join', obj=self.product)
        self._test('seele', 'join', obj=self.product)
        self._test('nerv', 'join', obj=self.product)
        self._test('children', 'join', obj=self.product)
        self._test('wille', 'join', obj=self.product, neg=True)
        self._test('anonymous', 'join', obj=self.product, neg=True)
        self._test('administrator', 'join', obj=self.product, neg=True)
        self._test('project_member', 'join', obj=self.product)

    def test_quit_permission(self):
        """
        ログインユーザー以上にモデルの脱退権限がある
        """
        self._test('adam', 'quit')
        self._test('seele', 'quit')
        self._test('nerv', 'quit')
        self._test('children', 'quit')
        self._test('wille', 'quit', neg=True)
        self._test('anonymous', 'quit', neg=True)
        self._test('administrator', 'quit')
        self._test('project_member', 'quit')

    def test_quit_permission_with_obj(self):
        """
        最後ではない参加済みのユーザーのみがオブジェクトの脱退権限を持つ
        """
        self._test('adam', 'quit', obj=self.product)
        self._test('seele', 'quit', obj=self.product, neg=True)
        self._test('nerv', 'quit', obj=self.product, neg=True)
        self._test('children', 'quit', obj=self.product, neg=True)
        self._test('wille', 'quit', obj=self.product, neg=True)
        self._test('anonymous', 'quit', obj=self.product, neg=True)
        self._test('project_member', 'quit', obj=self.product, neg=True)

        # 最後の一人なので脱退できない
        self._test('administrator', 'quit', obj=self.product, neg=True)

        # もう一人参加者を増やす
        new_administrator = PersonaFactory()
        self.product.join(new_administrator)

        # django-permissionのキャッシュの問題で権限が更新されないので
        # オブジェクトを再度取得している
        self.users['administrator'] = Persona.objects.get(
            pk=self.users['administrator'].pk,
        )

        # 最後の一人になるので同じ人が脱退できるようになる
        self._test('administrator', 'quit', obj=self.product)