src/cm/tests/test_security.py
author gibus
Wed, 11 Sep 2013 23:13:01 +0200
changeset 532 0bad3613f59d
parent 287 fc5ed157ebfe
child 590 e103299bccc0
child 606 52f3e090eed9
permissions -rw-r--r--
Reverse to YUI 3.0.0 since with YUI.3.10.3, comment content including words 'paragraph' or 'section' do not show up on Firefox, this is weird and has to be investigated.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
from django.test import TestCase
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
from django.test.client import Client
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
from django.core import management
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
from cm.models import *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
from cm.security import *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
from cm.tests.test_comment_positioning import create_comment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
class FalseRequest(object):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
    def __init__(self, user):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
        self.user = user
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
class SecurityTest(TestCase):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
    fixtures = ['roles_generic','test_content']
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
    def test_access_rights(self):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
        # anon user sees no text
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
        request = FalseRequest(None)                
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents: 0
diff changeset
    20
        self.assertEqual(get_texts_with_perm(request, 'can_view_text').count(), 2)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
        # user 1 sees all texts
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
        user1 = UserProfile.objects.get(id=1).user        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
        request = FalseRequest(user1)       
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents: 0
diff changeset
    25
        self.assertEqual(get_texts_with_perm(request, 'can_view_text').count(), 5)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
        
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents: 0
diff changeset
    27
        # user 2 sees only 4 texts
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        user2 = UserProfile.objects.get(id=2).user
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
        request = FalseRequest(user2)        
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents: 0
diff changeset
    30
        self.assertEqual(get_texts_with_perm(request, 'can_view_text').count(), 4)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents: 0
diff changeset
    32
        # user 4 manages only 2 texts (global manager but commentator on text 4
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        user4 = UserProfile.objects.get(id=4).user
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        request = FalseRequest(user4)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        self.assertEqual(get_texts_with_perm(request, 'can_manage_text').count(), 2)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
    def test_moderation_tricks_a_priori(self):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
        # text a priori moderated
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        # a new comment is unapproved -> owner can edit -> gets approved -> owner cannot edit it (unless moderator)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        user2 = UserProfile.objects.get(id=2).user
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        user3 = UserProfile.objects.get(id=3).user
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        text2 = Text.objects.get(id=2)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
        # user 3 is Commentator on text 2 (a priori mod)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        # user 2 is Editor on text 2 (a priori mod)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        c2 = create_comment(user=user2)        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        self.assertTrue(has_own_perm(FalseRequest(user2), "can_edit_comment" + "_own", text2, c2),'can edit own comment')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        c3 = create_comment(user=user3)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        self.assertTrue(has_own_perm(FalseRequest(user3), "can_edit_comment" + "_own", text2, c3),'can edit own comment')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        c2.state = 'approved'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        c2.save()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
        c3.state = 'approved'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
        c3.save()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        self.assertFalse(has_own_perm(FalseRequest(user3), "can_edit_comment" + "_own", text2, c3),'CANNOT edit own comment (there is a reply)')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        self.assertTrue(has_own_perm(FalseRequest(user2), "can_edit_comment" + "_own", text2, c2),"CAN edit own comment (is moderator)")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        self.assertTrue(has_perm(FalseRequest(user2), "can_edit_comment", text2),"CAN edit other comment (is moderator)")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
    def test_moderation_tricks_a_posteriori(self):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        # text a posteriori moderated
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
        # a new comment is approved -> owner can edit -> get a reply -> owner cannot edit it (unless moderator)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
        user2 = UserProfile.objects.get(id=2).user
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
        user3 = UserProfile.objects.get(id=3).user
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        text2 = Text.objects.get(id=2)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        text2.last_text_version.mod_posteriori = True
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
        text2.last_text_version.save()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
        # user 3 is Commentator on text 2 (a priori mod)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
        # user 2 is Editor on text 2 (a priori mod)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        c3 = create_comment(user=user3, state='approved')        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        self.assertTrue(has_own_perm(FalseRequest(user3), "can_edit_comment" + "_own", text2, c3),'CAN edit own comment (there is NO reply)')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
        # create a reply
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
        c2 = create_comment(user=user3, reply_to=c3, state='approved')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
        self.assertFalse(has_own_perm(FalseRequest(user3), "can_edit_comment" + "_own", text2, c3),'CANNOT edit own comment (there is a reply)')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
        self.assertTrue(has_perm(FalseRequest(user2), "can_edit_comment", text2),"CAN edit other's comment (moderator)")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80