Changeset 2043

Show
Ignore:
Timestamp:
06/18/09 08:26:39 (9 months ago)
Author:
JensDiemer
Message:
  • bugfix in page_admin.check_permissions
  • update unittests
  • some code cleanup
Location:
branches/0.9/pylucid_project
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • branches/0.9/pylucid_project/pylucid_plugins/page_admin/views.py

    r2040 r2043  
    1616 
    1717EDIT_PERMISSIONS = ( 
    18     "pylucid.can_edit_page", 
    19     "pylucid.can_edit_pagemeta", 
     18    u'pylucid.change_pagecontent', 
     19    u'pylucid.change_pagemeta' 
    2020) 
    2121 
    2222 
    2323def check_permissions(request, permissions): 
     24    """ 
     25    TODO: Add a log entry, if user has not all permissions. 
     26    """ 
     27    assert isinstance(permissions, (list, tuple)) 
    2428    user = request.user 
    25     if user.has_perms(permissions): 
    26         return 
    2729     
    28     if settings.DEBUG: # Usefull?? 
    29         for permission in permissions: 
    30             if not user.has_perm(permission): 
    31                 warnings.warn("User %r has not the permission: %r" % (user, permission)) 
     30    if not user.is_authenticated(): 
     31        if settings.DEBUG: # Usefull?? 
     32            warnings.warn("Anonymous can't edit page.") 
     33        raise PermissionDenied 
     34         
     35    if not user.has_perms(permissions): 
     36        if settings.DEBUG: # Usefull?? 
     37            msg = "User %r has not all permissions: %r (existing permissions: %r)" % ( 
     38                user, permissions, user.get_all_permissions() 
     39            ) 
     40            warnings.warn(msg) 
     41        raise PermissionDenied() 
    3242     
    33     raise PermissionDenied 
    3443 
    3544 
  • branches/0.9/pylucid_project/settings.py

    r2038 r2043  
    7777 
    7878MIDDLEWARE_CLASSES = ( 
     79    # From http://code.google.com/p/django-tools/ 
    7980    'django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware', 
    8081     
  • branches/0.9/pylucid_project/tests/test_Design.py

    r2026 r2043  
    2525        self.test_css = EditableHtmlHeadFile.objects.get(filepath=pylucid_test_data.TEST_CSS_FILEPATH) 
    2626        self.test_js = EditableHtmlHeadFile.objects.get(filepath=pylucid_test_data.TEST_JS_FILEPATH) 
    27          
    28         # fake django HttpRequest object, needed in UpdateInfoBaseModel save() method 
    29         self.fake_request = pylucid_test_data.get_fake_request(usertype="superuser") 
    3027 
    3128    def _assert_headfiles(self, test_css_url, test_js_url): 
     
    5956            if not os.path.isfile(cachepath): 
    6057                os.makedirs(os.path.dirname(cachepath)) # Cache dir doesn't exist? 
    61                 headfile.save(self.fake_request) # The save method should create the cache file 
     58                headfile.save() # The save method should create the cache file 
    6259            # Check if file exist 
    6360            self.failUnless(os.path.isfile(cachepath), "Can't create cache file???") 
  • branches/0.9/pylucid_project/tests/test_PluginEditPage.py

    r2041 r2043  
    88from django.conf import settings 
    99from django.contrib.sites.models import Site 
     10from django.contrib.auth.models import Permission 
     11from django.contrib.contenttypes.models import ContentType 
    1012 
    1113from django_tools.unittest import unittest_base 
     
    1315from pylucid_project.tests.test_tools import pylucid_test_data 
    1416from pylucid_project.tests.test_tools import basetest 
    15 from pylucid.models import EditableHtmlHeadFile 
    16  
     17from pylucid.models import EditableHtmlHeadFile, PageMeta, PageContent 
    1718 
    1819EDIT_PAGE_URL = "/?page_admin=inline_edit" 
     
    5354         
    5455    def test_permissions_normal(self): 
    55         """ 
    56         A normal user must have explicit permissions to edit a page. 
     56        """ A normal user must have explicit permissions to edit a page. """ 
    5757         
    58         FIXME: Why can't i add permissions here??? They allways empty?!?! 
    59         """ 
    60         user = self.login(usertype="normal") 
    61         response = self.client.get(EDIT_PAGE_URL) 
    62         self.assertCanNotEdit(response) 
     58        def check_permissions(permissions, assertion): 
     59            user = self.login(usertype="normal") 
     60            user.user_permissions.clear() # Delete all existing permissions 
     61            for permission, model in permissions: 
     62                # Give the test user the permissions: 
     63                content_type=ContentType.objects.get_for_model(model) 
     64                perm = Permission.objects.get(content_type=content_type, codename=permission) 
     65                user.user_permissions.add(perm) 
     66             
     67            user = self.login(usertype="normal") # "reloading" user to purge user._perm_cache  
     68             
     69            # low level check permissions: 
     70            codenames = [u"pylucid.%s" % permission for permission,model in permissions] 
     71            self.failUnless(user.has_perms(codenames), 
     72                "Low level error, user has not permissions: %r, he has: %r" % ( 
     73                    codenames, user.get_all_permissions() 
     74                ) 
     75            ) 
     76            # Check if he can now edit the page: 
     77            response = self.client.get(EDIT_PAGE_URL) 
     78            assertion(response) 
    6379         
    64         # Give the test user the permissions: 
    65         from django.contrib.auth.models import Permission 
    66         for i in Permission.objects.all(): 
    67             print i.pk, i 
     80        # normal user has no permissions 
     81        check_permissions(permissions=[], assertion=self.assertCanNotEdit) 
    6882         
    69         print user 
    70         print user.get_all_permissions() 
    71         print user._perm_cache 
    72         user.user_permissions.add("pylucid.can_edit_pagecontent") 
    73         user.user_permissions.add("pylucid.can_edit_pagemeta") 
    74         user.save() 
    75         user = self.login(usertype="normal") 
    76         print user.get_all_permissions() 
    77         print user._perm_cache 
     83        # normal user has only one permission 
     84        check_permissions( 
     85            permissions=[("change_pagecontent", PageContent)], 
     86            assertion=self.assertCanNotEdit 
     87        ) 
     88        check_permissions( 
     89            permissions=[("change_pagemeta", PageMeta)], 
     90            assertion=self.assertCanNotEdit 
     91        ) 
    7892         
    79         self.failUnless(user.has_perms(["pylucid.can_edit_page", "pylucid.can_edit_pagemeta"]), "FIXME!!!") 
    80          
    81         settings.DEBUG = True 
    82         # Check if he can now edit the page: 
    83         response = self.client.get(EDIT_PAGE_URL) 
    84         self.assertCanEdit(response) 
     93        # normal user has all permission -> he can edit the page 
     94        check_permissions( 
     95            permissions=[("change_pagecontent", PageContent), ("change_pagemeta", PageMeta)], 
     96            assertion=self.assertCanEdit 
     97        ) 
     98 
    8599 
    86100 
     
    88102if __name__ == "__main__": 
    89103    # Run this unitest directly 
     104#    from django_tools.utils import info_print; info_print.redirect_stdout() 
    90105    unittest_base.direct_run(__file__) 
  • branches/0.9/pylucid_project/tests/test_tools/test_runner.py

    r2042 r2043  
    6161        except TypeError: 
    6262            raise TypeError("Test label '%s' wrong!" % module_name) 
     63 
    6364 
    6465def get_all_tests(verbosity=False): 
     
    9697    return test_suite 
    9798 
     99 
    98100def get_tests(test_labels, verbosity=False): 
    99101    """ 
     
    118120        return get_all_tests(verbosity) 
    119121 
     122 
    120123def setup_unittest_plugin(verbosity): 
    121124    if verbosity: 
     
    133136    # Add unittest template dir 
    134137    settings.TEMPLATE_DIRS += (os.path.join(UNITTEST_PLUGIN_DST_PATH, "templates"),) 
    135      
     138 
     139 
    136140def teardown_unittest_plugin(verbosity): 
    137141    if verbosity: 
    138142        print "remove unittest plugin symlink" 
    139143    os.remove(UNITTEST_PLUGIN_DST_PATH) 
    140          
     144 
     145 
    141146def run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[]): 
    142147    """ 
     
    189194    return len(result.failures) + len(result.errors) 
    190195 
     196 
    191197if __name__ == "__main__": 
    192198    # Run all unitest directly