Changeset 22

Show
Ignore:
Timestamp:
2008年07月28日 01时08分10秒 (4 years ago)
Author:
jiangx
Message:

See #5: Add unittest for controllers

Location:
trunk
Files:
16 modified

Legend:

Unmodified
Added
Removed
  • trunk/pysvnmanager/config/svn.passwd.in

    r2 r22  
    77user2:giShzi.a1DcJg 
    88badboy:OY24/4nS/3Yg. 
     9蒋鑫:58EvOwQjOEvWc 
  • trunk/pysvnmanager/controllers/authz.py

    r21 r22  
    7676        select = d.get('select') 
    7777        repos = self.authz.get_repos(select) 
    78         if not repos: 
    79             return msg; 
    80  
    81         # get javascript code for top_form's role_selector 
    82         msg += 'id[0]="%s";' % '...' 
    83         msg += 'name[0]="%s";\n' % _("Please choose...") 
    84         total += 1; 
    85         for path in repos.path_list: 
    86             msg += 'id[%d]="%s";' % (total, path) 
    87             msg += 'name[%d]="%s";\n' % (total, path) 
     78 
     79        if repos: 
     80            # get javascript code for top_form's role_selector 
     81            msg += 'id[0]="%s";' % '...' 
     82            msg += 'name[0]="%s";\n' % _("Please choose...") 
    8883            total += 1; 
    89         msg += 'total=%d;\n' % total 
    90         msg += 'admin_users="%s";\n' % repos.admins 
    91         msg += 'revision="%s";\n' % self.authz.version 
     84            for path in repos.path_list: 
     85                msg += 'id[%d]="%s";' % (total, path) 
     86                msg += 'name[%d]="%s";\n' % (total, path) 
     87                total += 1; 
     88            msg += 'total=%d;\n' % total 
     89            msg += 'admin_users="%s";\n' % repos.admins 
     90            msg += 'revision="%s";\n' % self.authz.version 
    9291         
    9392        return msg 
     
    132131        path      = d.get('path') 
    133132        rules     = d.get('rules') 
     133        revision  = d.get('revision', self.authz.version) 
     134         
    134135        # mode1: new or edit repository 
    135136        mode1     = d.get('mode1') 
     137        if mode1 == "new": 
     138            isAddRepos = True 
     139        else: 
     140            isAddRepos = False 
     141         
    136142        # mode2: new or edit module 
    137143        mode2     = d.get('mode2') 
    138         revision  = d.get('revision', self.authz.version) 
    139          
     144        if mode2 == "new": 
     145            isAddModule = True 
     146        else: 
     147            isAddModule = False 
     148 
    140149        try: 
    141             if mode1 == "new": 
     150            if isAddRepos: 
    142151                repos = self.authz.add_repos(reposname) 
    143152            else: 
     
    147156             
    148157            if path: 
    149                 if mode2 == "new": 
    150                     module = self.authz.add_module(reposname, path) 
     158                if isAddModule: 
     159                    module = repos.add_module(path) 
    151160                else: 
    152                     module = self.authz.get_module(reposname, path) 
     161                    module = repos.get_module(path) 
    153162                if not module: 
    154163                    raise Exception, _("Module %s not exist.") % path 
     
    165174                self.authz.set_rules(reposname, path, rules); 
    166175            self.authz.save(revision) 
    167         except Exception, e: 
    168             msg = unicode(e) 
    169  
    170         log.info(_("User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)") % \ 
     176        except Exception, (e,): 
     177            msg = unicode(e).encode('utf-8') 
     178 
     179        log.info(_(u"User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)") % \ 
    171180                 {'user':session.get('user'), 'rev': revision, 'msg': msg} ) 
    172181         
     
    189198            self.authz.del_module(reposname, path); 
    190199            self.authz.save(revision) 
    191         except Exception, e: 
    192             msg = unicode(e) 
    193          
    194         log.info(_("User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)") % \ 
     200        except Exception, (e,): 
     201            msg = unicode(e).encode('utf-8') 
     202         
     203        log.info(_(u"User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)") % \ 
    195204                 {'user':session.get('user'), 'rev': revision, 'msg': msg} ) 
    196205 
  • trunk/pysvnmanager/controllers/role.py

    r21 r22  
    5252                    continue 
    5353                msg += 'id[%d]="%s";' % (members_count, uname) 
    54                 if uname[0] == '@': 
    55                     msg += 'name[%d]="%s";\n' % (members_count, _("Group:")+uname[1:]) 
    56                 else: 
    57                     msg += 'name[%d]="%s";\n' % (members_count, uname) 
     54                assert uname[0] == '@' 
     55                msg += 'name[%d]="%s";\n' % (members_count, _("Group:")+uname[1:]) 
    5856                members_count += 1; 
    5957            for uname in self.aliaslist: 
    6058                msg += 'id[%d]="%s";' % (members_count, uname) 
    61                 if uname[0] == '&': 
    62                     msg += 'name[%d]="%s";\n' % (members_count, _("Alias:")+uname[1:]) 
    63                 else: 
    64                     msg += 'name[%d]="%s";\n' % (members_count, uname) 
     59                assert uname[0] == '&' 
     60                msg += 'name[%d]="%s";\n' % (members_count, _("Alias:")+uname[1:]) 
    6561                members_count += 1; 
    6662            msg += 'members_count=%d;\n' % members_count 
     
    7369                for i in roleobj: 
    7470                    uname = i.uname 
    75                     if uname == '*' or uname[0] == '$': 
    76                         continue 
     71                    #if uname == '*' or uname[0] == '$': 
     72                    #    continue 
    7773                    msg += 'id[%d]="%s";' % (members_count, uname) 
    7874                    if uname[0] == '@': 
     
    116112            self.authz.set_group(rolename, member_list, autodrop=autodrop) 
    117113            self.authz.save(revision) 
    118         except Exception, e: 
     114        except Exception, (e,): 
    119115            msg = unicode(e) 
    120116 
     
    136132                self.authz.del_group(rolename) 
    137133                self.authz.save(revision) 
    138             except Exception, e: 
     134            except Exception, (e,): 
    139135                msg = unicode(e) 
    140136 
    141         log.info(_("User %(user)s delete group: %(grp)s. (rev:%(rev)s,%(msg)s)") % \ 
     137        log.info(_(u"User %(user)s delete group: %(grp)s. (rev:%(rev)s,%(msg)s)") % \ 
    142138                 {'user':session.get('user'), 'grp': rolename, 'rev': revision, 'msg': msg} ) 
    143139 
     
    156152            self.authz.add_alias(aliasname, username) 
    157153            self.authz.save(revision) 
    158         except Exception, e: 
     154        except Exception, (e,): 
    159155            msg = unicode(e) 
    160156 
    161         log.info(_("User %(user)s changed alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \ 
     157        log.info(_(u"User %(user)s changed alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \ 
    162158                 {'user':session.get('user'), 'alias': aliasname, 'rev': revision, 'msg': msg} ) 
    163159         
     
    176172                self.authz.del_alias(aliasname) 
    177173                self.authz.save(revision) 
    178             except Exception, e: 
     174            except Exception, (e,): 
    179175                msg = unicode(e) 
    180176 
    181         log.info(_("User %(user)s delete alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \ 
     177        log.info(_(u"User %(user)s delete alias: %(alias)s. (rev:%(rev)s,%(msg)s)") % \ 
    182178                 {'user':session.get('user'), 'alias': aliasname, 'rev': revision, 'msg': msg} ) 
    183179 
  • trunk/pysvnmanager/controllers/security.py

    r9 r22  
    2121        auth_passed = False 
    2222        # Both fields filled? 
    23         username = str(request.params.get('username')) 
    24         password = str(request.params.get('password')) 
     23        username = request.params.get('username') 
     24        password = request.params.get('password') 
    2525 
    2626        for auth in cfg.auth: 
  • trunk/pysvnmanager/i18n/en/LC_MESSAGES/pysvnmanager.po

    r20 r22  
    1010"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 
    1111"POT-Creation-Date: 2008-07-03 22:14+0800\n" 
    12 "PO-Revision-Date: 2008-07-26 11:16+0800\n" 
     12"PO-Revision-Date: 2008-07-27 13:21+0800\n" 
    1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 
    1414"Language-Team: en <LL@li.org>\n" 
     
    1919"Generated-By: Babel 0.9.2\n" 
    2020 
    21 #: pysvnmanager/controllers/authz.py:33 
     21#: pysvnmanager/controllers/authz.py:31 
    2222#: pysvnmanager/templates/authz/index.mako:159 
    2323#: pysvnmanager/templates/check/index.mako:10 
     
    2525msgstr "" 
    2626 
    27 #: pysvnmanager/controllers/authz.py:34 
     27#: pysvnmanager/controllers/authz.py:32 
    2828#: pysvnmanager/templates/authz/index.mako:161 
    2929#: pysvnmanager/templates/check/index.mako:11 
     
    3131msgstr "" 
    3232 
    33 #: pysvnmanager/controllers/authz.py:35 
     33#: pysvnmanager/controllers/authz.py:33 
    3434#: pysvnmanager/templates/authz/index.mako:163 
    3535#: pysvnmanager/templates/check/index.mako:12 
     
    3737msgstr "" 
    3838 
    39 #: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:55 
     39#: pysvnmanager/controllers/authz.py:38 pysvnmanager/controllers/role.py:55 
    4040#: pysvnmanager/controllers/role.py:79 
    4141#: pysvnmanager/templates/authz/index.mako:155 
     
    4848msgstr "" 
    4949 
    50 #: pysvnmanager/controllers/authz.py:47 pysvnmanager/controllers/role.py:62 
     50#: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:62 
    5151#: pysvnmanager/controllers/role.py:81 
    5252#: pysvnmanager/templates/authz/index.mako:157 
     
    5959msgstr "" 
    6060 
    61 #: pysvnmanager/controllers/authz.py:67 pysvnmanager/controllers/authz.py:91 
    62 #: pysvnmanager/controllers/check.py:93 pysvnmanager/controllers/role.py:48 
     61#: pysvnmanager/controllers/authz.py:59 pysvnmanager/controllers/authz.py:83 
     62#: pysvnmanager/controllers/check.py:91 pysvnmanager/controllers/role.py:48 
    6363#: pysvnmanager/templates/check/index.mako:9 
    6464#: pysvnmanager/templates/check/index.mako:23 
     
    6868msgstr "" 
    6969 
    70 #: pysvnmanager/controllers/authz.py:155 
     70#: pysvnmanager/controllers/authz.py:146 
    7171#, python-format 
    7272msgid "Repository %s not exist." 
    7373msgstr "" 
    7474 
    75 #: pysvnmanager/controllers/authz.py:163 
     75#: pysvnmanager/controllers/authz.py:154 
    7676#, python-format 
    7777msgid "Module %s not exist." 
    7878msgstr "" 
    7979 
    80 #: pysvnmanager/controllers/authz.py:169 
     80#: pysvnmanager/controllers/authz.py:160 
    8181msgid "You can not delete yourself from admin list." 
    8282msgstr "" 
    8383 
    84 #: pysvnmanager/controllers/authz.py:179 
     84#: pysvnmanager/controllers/authz.py:170 
    8585#, python-format 
    8686msgid "User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)" 
    8787msgstr "" 
    8888 
    89 #: pysvnmanager/controllers/authz.py:203 
     89#: pysvnmanager/controllers/authz.py:194 
    9090#, python-format 
    9191msgid "User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)" 
    9292msgstr "" 
    9393 
    94 #: pysvnmanager/controllers/check.py:70 
    95 #: pysvnmanager/templates/auth_failed.mako:4 
     94#: pysvnmanager/controllers/check.py:68 
     95#: pysvnmanager/templates/auth_failed.mako:3 
    9696msgid "Permission denied." 
    9797msgstr "" 
     
    132132msgstr "" 
    133133 
    134 #: pysvnmanager/model/svnauthz.py:58 
     134#: pysvnmanager/model/svnauthz.py:59 
    135135msgid "Name is not given." 
    136136msgstr "" 
    137137 
    138 #: pysvnmanager/model/svnauthz.py:60 
     138#: pysvnmanager/model/svnauthz.py:61 
    139139msgid "Name is not string." 
    140140msgstr "" 
    141141 
    142 #: pysvnmanager/model/svnauthz.py:64 
     142#: pysvnmanager/model/svnauthz.py:65 
    143143#, python-format 
    144144msgid "Name (%s) contains invalid characters." 
    145145msgstr "" 
    146146 
    147 #: pysvnmanager/model/svnauthz.py:222 
    148 msgid "Aliasname is not provided." 
    149 msgstr "" 
    150  
    151 #: pysvnmanager/model/svnauthz.py:224 
    152 msgid "Aliasname should not begin with &." 
    153 msgstr "" 
    154  
    155 #: pysvnmanager/model/svnauthz.py:397 
    156 msgid "Group name is not provided." 
    157 msgstr "" 
    158  
    159 #: pysvnmanager/model/svnauthz.py:399 
    160 msgid "Group name should not begin with @." 
    161 msgstr "" 
    162  
    163 #: pysvnmanager/model/svnauthz.py:469 
     147#: pysvnmanager/model/svnauthz.py:473 
    164148#, python-format 
    165149msgid "Recursive group membership for %s" 
    166150msgstr "" 
    167151 
    168 #: pysvnmanager/model/svnauthz.py:561 
     152#: pysvnmanager/model/svnauthz.py:567 
    169153#, python-format 
    170154msgid "Not a valid username: %s" 
    171155msgstr "" 
    172156 
    173 #: pysvnmanager/model/svnauthz.py:686 
     157#: pysvnmanager/model/svnauthz.py:684 
    174158#, python-format 
    175159msgid "Group %s is referenced by group %s." 
    176160msgstr "" 
    177161 
    178 #: pysvnmanager/model/svnauthz.py:1229 
     162#: pysvnmanager/model/svnauthz.py:1224 
    179163msgid "Update failed! You are working on a out-of-date revision." 
    180164msgstr "" 
    181165 
    182 #: pysvnmanager/model/svnauthz.py:1461 pysvnmanager/model/svnauthz.py:1468 
    183 #: pysvnmanager/model/svnauthz.py:1472 
     166#: pysvnmanager/model/svnauthz.py:1458 pysvnmanager/model/svnauthz.py:1465 
     167#: pysvnmanager/model/svnauthz.py:1469 
    184168#, python-format 
    185169msgid "Unknown rule format: %s" 
    186170msgstr "" 
    187171 
    188 #: pysvnmanager/model/svnauthz.py:1486 
     172#: pysvnmanager/model/svnauthz.py:1483 
    189173#, python-format 
    190174msgid "No module exist for %s:%s" 
    191175msgstr "" 
    192176 
    193 #: pysvnmanager/model/svnauthz.py:1597 
     177#: pysvnmanager/model/svnauthz.py:1592 
    194178#, python-format 
    195179msgid "Alias %s is referenced by group %s." 
    196180msgstr "" 
    197181 
    198 #: pysvnmanager/model/svnauthz.py:1609 
     182#: pysvnmanager/model/svnauthz.py:1604 
    199183#, python-format 
    200184msgid "%s is referenced by [%s]." 
    201185msgstr "" 
    202186 
    203 #: pysvnmanager/model/svnauthz.py:1746 
     187#: pysvnmanager/model/svnauthz.py:1741 
    204188#, python-format 
    205189msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 
    206190msgstr "" 
    207191 
    208 #: pysvnmanager/model/svnauthz.py:1748 
     192#: pysvnmanager/model/svnauthz.py:1743 
    209193#, python-format 
    210194msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 
    211195msgstr "" 
    212196 
    213 #: pysvnmanager/model/svnauthz.py:1750 
     197#: pysvnmanager/model/svnauthz.py:1745 
    214198#, python-format 
    215199msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 
    216200msgstr "" 
    217201 
    218 #: pysvnmanager/model/svnauthz.py:1788 
     202#: pysvnmanager/model/svnauthz.py:1783 
    219203#, python-format 
    220204msgid "" 
     
    228212msgstr "" 
    229213 
    230 #: pysvnmanager/model/svnauthz.py:1807 
     214#: pysvnmanager/model/svnauthz.py:1802 
    231215#, python-format 
    232216msgid "" 
     
    457441msgstr "" 
    458442 
     443#: pysvnmanager/templates/role/index.mako:420 
     444msgid "Update group failed:" 
     445msgstr "" 
     446 
     447#: pysvnmanager/templates/role/index.mako:427 
     448msgid "Update group successfully." 
     449msgstr "" 
     450 
    459451#: pysvnmanager/templates/role/index.mako:448 
    460452msgid "Are you sure to delete group:" 
    461453msgstr "" 
    462454 
     455#: pysvnmanager/templates/role/index.mako:471 
     456msgid "Delete group failed:" 
     457msgstr "" 
     458 
     459#: pysvnmanager/templates/role/index.mako:478 
     460msgid "Delete group successfully." 
     461msgstr "" 
     462 
     463#: pysvnmanager/templates/role/index.mako:512 
     464msgid "Update alias failed:" 
     465msgstr "" 
     466 
     467#: pysvnmanager/templates/role/index.mako:519 
     468msgid "Update alias successfully." 
     469msgstr "" 
     470 
    463471#: pysvnmanager/templates/role/index.mako:539 
    464472msgid "Are you sure to delete alias:" 
    465473msgstr "" 
    466474 
     475#: pysvnmanager/templates/role/index.mako:562 
     476msgid "Delete alias failed:" 
     477msgstr "" 
     478 
     479#: pysvnmanager/templates/role/index.mako:569 
     480msgid "Delete alias successfully." 
     481msgstr "" 
     482 
    467483#: pysvnmanager/templates/role/index.mako:645 
    468484msgid "Select a role name:" 
     
    501517msgstr "" 
    502518 
    503 #~ msgid "Name contains invalid characters." 
     519#~ msgid "Aliasname is not provided." 
    504520#~ msgstr "" 
    505521 
    506 #~ msgid "Not a valide username: %s" 
     522#~ msgid "Aliasname should not begin with &." 
    507523#~ msgstr "" 
    508524 
    509 #~ msgid "Alias %s is used by rules." 
     525#~ msgid "Group name is not provided." 
    510526#~ msgstr "" 
    511527 
     528#~ msgid "Group name should not begin with @." 
     529#~ msgstr "" 
     530 
  • trunk/pysvnmanager/i18n/pysvnmanager.pot

    r20 r22  
    99"Project-Id-Version: pySvnManager 0.1.2\n" 
    1010"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 
    11 "POT-Creation-Date: 2008-07-26 11:15+0800\n" 
     11"POT-Creation-Date: 2008-07-27 13:21+0800\n" 
    1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
    1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 
     
    1818"Generated-By: Babel 0.9.2\n" 
    1919 
    20 #: pysvnmanager/controllers/authz.py:33 pysvnmanager/templates/authz/index.mako:159 
     20#: pysvnmanager/controllers/authz.py:31 pysvnmanager/templates/authz/index.mako:159 
    2121#: pysvnmanager/templates/check/index.mako:10 
    2222msgid "All users(with anon)" 
    2323msgstr "" 
    2424 
    25 #: pysvnmanager/controllers/authz.py:34 pysvnmanager/templates/authz/index.mako:161 
     25#: pysvnmanager/controllers/authz.py:32 pysvnmanager/templates/authz/index.mako:161 
    2626#: pysvnmanager/templates/check/index.mako:11 
    2727msgid "Known users" 
    2828msgstr "" 
    2929 
    30 #: pysvnmanager/controllers/authz.py:35 pysvnmanager/templates/authz/index.mako:163 
     30#: pysvnmanager/controllers/authz.py:33 pysvnmanager/templates/authz/index.mako:163 
    3131#: pysvnmanager/templates/check/index.mako:12 
    3232msgid "Anonymous" 
    3333msgstr "" 
    3434 
    35 #: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:55 
     35#: pysvnmanager/controllers/authz.py:38 pysvnmanager/controllers/role.py:55 
    3636#: pysvnmanager/controllers/role.py:79 pysvnmanager/templates/authz/index.mako:155 
    3737#: pysvnmanager/templates/check/index.mako:17 
     
    4343msgstr "" 
    4444 
    45 #: pysvnmanager/controllers/authz.py:47 pysvnmanager/controllers/role.py:62 
     45#: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:62 
    4646#: pysvnmanager/controllers/role.py:81 pysvnmanager/templates/authz/index.mako:157 
    4747#: pysvnmanager/templates/check/index.mako:19 
     
    5353msgstr "" 
    5454 
    55 #: pysvnmanager/controllers/authz.py:67 pysvnmanager/controllers/authz.py:91 
    56 #: pysvnmanager/controllers/check.py:93 pysvnmanager/controllers/role.py:48 
     55#: pysvnmanager/controllers/authz.py:59 pysvnmanager/controllers/authz.py:83 
     56#: pysvnmanager/controllers/check.py:91 pysvnmanager/controllers/role.py:48 
    5757#: pysvnmanager/templates/check/index.mako:9 
    5858#: pysvnmanager/templates/check/index.mako:23 
     
    6262msgstr "" 
    6363 
    64 #: pysvnmanager/controllers/authz.py:155 
     64#: pysvnmanager/controllers/authz.py:146 
    6565#, python-format 
    6666msgid "Repository %s not exist." 
    6767msgstr "" 
    6868 
    69 #: pysvnmanager/controllers/authz.py:163 
     69#: pysvnmanager/controllers/authz.py:154 
    7070#, python-format 
    7171msgid "Module %s not exist." 
    7272msgstr "" 
    7373 
    74 #: pysvnmanager/controllers/authz.py:169 
     74#: pysvnmanager/controllers/authz.py:160 
    7575msgid "You can not delete yourself from admin list." 
    7676msgstr "" 
    7777 
    78 #: pysvnmanager/controllers/authz.py:179 
     78#: pysvnmanager/controllers/authz.py:170 
    7979#, python-format 
    8080msgid "User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)" 
    8181msgstr "" 
    8282 
    83 #: pysvnmanager/controllers/authz.py:203 
     83#: pysvnmanager/controllers/authz.py:194 
    8484#, python-format 
    8585msgid "User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)" 
    8686msgstr "" 
    8787 
    88 #: pysvnmanager/controllers/check.py:70 pysvnmanager/templates/auth_failed.mako:4 
     88#: pysvnmanager/controllers/check.py:68 pysvnmanager/templates/auth_failed.mako:3 
    8989msgid "Permission denied." 
    9090msgstr "" 
     
    125125msgstr "" 
    126126 
    127 #: pysvnmanager/model/svnauthz.py:58 
     127#: pysvnmanager/model/svnauthz.py:59 
    128128msgid "Name is not given." 
    129129msgstr "" 
    130130 
    131 #: pysvnmanager/model/svnauthz.py:60 
     131#: pysvnmanager/model/svnauthz.py:61 
    132132msgid "Name is not string." 
    133133msgstr "" 
    134134 
    135 #: pysvnmanager/model/svnauthz.py:64 
     135#: pysvnmanager/model/svnauthz.py:65 
    136136#, python-format 
    137137msgid "Name (%s) contains invalid characters." 
    138138msgstr "" 
    139139 
    140 #: pysvnmanager/model/svnauthz.py:222 
    141 msgid "Aliasname is not provided." 
    142 msgstr "" 
    143  
    144 #: pysvnmanager/model/svnauthz.py:224 
    145 msgid "Aliasname should not begin with &." 
    146 msgstr "" 
    147  
    148 #: pysvnmanager/model/svnauthz.py:397 
    149 msgid "Group name is not provided." 
    150 msgstr "" 
    151  
    152 #: pysvnmanager/model/svnauthz.py:399 
    153 msgid "Group name should not begin with @." 
    154 msgstr "" 
    155  
    156 #: pysvnmanager/model/svnauthz.py:469 
     140#: pysvnmanager/model/svnauthz.py:473 
    157141#, python-format 
    158142msgid "Recursive group membership for %s" 
    159143msgstr "" 
    160144 
    161 #: pysvnmanager/model/svnauthz.py:561 
     145#: pysvnmanager/model/svnauthz.py:567 
    162146#, python-format 
    163147msgid "Not a valid username: %s" 
    164148msgstr "" 
    165149 
    166 #: pysvnmanager/model/svnauthz.py:686 
     150#: pysvnmanager/model/svnauthz.py:684 
    167151#, python-format 
    168152msgid "Group %s is referenced by group %s." 
    169153msgstr "" 
    170154 
    171 #: pysvnmanager/model/svnauthz.py:1229 
     155#: pysvnmanager/model/svnauthz.py:1224 
    172156msgid "Update failed! You are working on a out-of-date revision." 
    173157msgstr "" 
    174158 
    175 #: pysvnmanager/model/svnauthz.py:1461 pysvnmanager/model/svnauthz.py:1468 
    176 #: pysvnmanager/model/svnauthz.py:1472 
     159#: pysvnmanager/model/svnauthz.py:1458 pysvnmanager/model/svnauthz.py:1465 
     160#: pysvnmanager/model/svnauthz.py:1469 
    177161#, python-format 
    178162msgid "Unknown rule format: %s" 
    179163msgstr "" 
    180164 
    181 #: pysvnmanager/model/svnauthz.py:1486 
     165#: pysvnmanager/model/svnauthz.py:1483 
    182166#, python-format 
    183167msgid "No module exist for %s:%s" 
    184168msgstr "" 
    185169 
    186 #: pysvnmanager/model/svnauthz.py:1597 
     170#: pysvnmanager/model/svnauthz.py:1592 
    187171#, python-format 
    188172msgid "Alias %s is referenced by group %s." 
    189173msgstr "" 
    190174 
    191 #: pysvnmanager/model/svnauthz.py:1609 
     175#: pysvnmanager/model/svnauthz.py:1604 
    192176#, python-format 
    193177msgid "%s is referenced by [%s]." 
    194178msgstr "" 
    195179 
    196 #: pysvnmanager/model/svnauthz.py:1746 
     180#: pysvnmanager/model/svnauthz.py:1741 
    197181#, python-format 
    198182msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 
    199183msgstr "" 
    200184 
    201 #: pysvnmanager/model/svnauthz.py:1748 
     185#: pysvnmanager/model/svnauthz.py:1743 
    202186#, python-format 
    203187msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 
    204188msgstr "" 
    205189 
    206 #: pysvnmanager/model/svnauthz.py:1750 
     190#: pysvnmanager/model/svnauthz.py:1745 
    207191#, python-format 
    208192msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 
    209193msgstr "" 
    210194 
    211 #: pysvnmanager/model/svnauthz.py:1788 
     195#: pysvnmanager/model/svnauthz.py:1783 
    212196#, python-format 
    213197msgid "" 
     
    221205msgstr "" 
    222206 
    223 #: pysvnmanager/model/svnauthz.py:1807 
     207#: pysvnmanager/model/svnauthz.py:1802 
    224208#, python-format 
    225209msgid "" 
     
    449433msgstr "" 
    450434 
     435#: pysvnmanager/templates/role/index.mako:420 
     436msgid "Update group failed:" 
     437msgstr "" 
     438 
     439#: pysvnmanager/templates/role/index.mako:427 
     440msgid "Update group successfully." 
     441msgstr "" 
     442 
    451443#: pysvnmanager/templates/role/index.mako:448 
    452444msgid "Are you sure to delete group:" 
    453445msgstr "" 
    454446 
     447#: pysvnmanager/templates/role/index.mako:471 
     448msgid "Delete group failed:" 
     449msgstr "" 
     450 
     451#: pysvnmanager/templates/role/index.mako:478 
     452msgid "Delete group successfully." 
     453msgstr "" 
     454 
     455#: pysvnmanager/templates/role/index.mako:512 
     456msgid "Update alias failed:" 
     457msgstr "" 
     458 
     459#: pysvnmanager/templates/role/index.mako:519 
     460msgid "Update alias successfully." 
     461msgstr "" 
     462 
    455463#: pysvnmanager/templates/role/index.mako:539 
    456464msgid "Are you sure to delete alias:" 
    457465msgstr "" 
    458466 
     467#: pysvnmanager/templates/role/index.mako:562 
     468msgid "Delete alias failed:" 
     469msgstr "" 
     470 
     471#: pysvnmanager/templates/role/index.mako:569 
     472msgid "Delete alias successfully." 
     473msgstr "" 
     474 
    459475#: pysvnmanager/templates/role/index.mako:645 
    460476msgid "Select a role name:" 
  • trunk/pysvnmanager/i18n/zh/LC_MESSAGES/pysvnmanager.po

    r20 r22  
    1212"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" 
    1313"POT-Creation-Date: 2008-07-03 22:14+0800\n" 
    14 "PO-Revision-Date: 2008-07-26 11:19+0800\n" 
     14"PO-Revision-Date: 2008-07-27 13:23+0800\n" 
    1515"Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n" 
    1616"Language-Team:  <zh@li.org>\n" 
     
    2222"X-Generator: KBabel 1.11.4\n" 
    2323 
    24 #: pysvnmanager/controllers/authz.py:33 
     24#: pysvnmanager/controllers/authz.py:31 
    2525#: pysvnmanager/templates/authz/index.mako:159 
    2626#: pysvnmanager/templates/check/index.mako:10 
     
    2828msgstr "所有用户(含匿名)" 
    2929 
    30 #: pysvnmanager/controllers/authz.py:34 
     30#: pysvnmanager/controllers/authz.py:32 
    3131#: pysvnmanager/templates/authz/index.mako:161 
    3232#: pysvnmanager/templates/check/index.mako:11 
     
    3434msgstr "注册用户" 
    3535 
    36 #: pysvnmanager/controllers/authz.py:35 
     36#: pysvnmanager/controllers/authz.py:33 
    3737#: pysvnmanager/templates/authz/index.mako:163 
    3838#: pysvnmanager/templates/check/index.mako:12 
     
    4040msgstr "匿名用户" 
    4141 
    42 #: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:55 
     42#: pysvnmanager/controllers/authz.py:38 pysvnmanager/controllers/role.py:55 
    4343#: pysvnmanager/controllers/role.py:79 
    4444#: pysvnmanager/templates/authz/index.mako:155 
     
    5151msgstr "团队:" 
    5252 
    53 #: pysvnmanager/controllers/authz.py:47 pysvnmanager/controllers/role.py:62 
     53#: pysvnmanager/controllers/authz.py:41 pysvnmanager/controllers/role.py:62 
    5454#: pysvnmanager/controllers/role.py:81 
    5555#: pysvnmanager/templates/authz/index.mako:157 
     
    6262msgstr "别名:" 
    6363 
    64 #: pysvnmanager/controllers/authz.py:67 pysvnmanager/controllers/authz.py:91 
    65 #: pysvnmanager/controllers/check.py:93 pysvnmanager/controllers/role.py:48 
     64#: pysvnmanager/controllers/authz.py:59 pysvnmanager/controllers/authz.py:83 
     65#: pysvnmanager/controllers/check.py:91 pysvnmanager/controllers/role.py:48 
    6666#: pysvnmanager/templates/check/index.mako:9 
    6767#: pysvnmanager/templates/check/index.mako:23 
     
    7171msgstr "请选择..." 
    7272 
    73 #: pysvnmanager/controllers/authz.py:155 
     73#: pysvnmanager/controllers/authz.py:146 
    7474#, python-format 
    7575msgid "Repository %s not exist." 
    7676msgstr "版本库 %s 不存在。" 
    7777 
    78 #: pysvnmanager/controllers/authz.py:163 
     78#: pysvnmanager/controllers/authz.py:154 
    7979#, python-format 
    8080msgid "Module %s not exist." 
    8181msgstr "模组 %s 不存在。" 
    8282 
    83 #: pysvnmanager/controllers/authz.py:169 
     83#: pysvnmanager/controllers/authz.py:160 
    8484msgid "You can not delete yourself from admin list." 
    8585msgstr "您不能将自己从管理员列表中删除。" 
    8686 
    87 #: pysvnmanager/controllers/authz.py:179 
     87#: pysvnmanager/controllers/authz.py:170 
    8888#, python-format 
    8989msgid "User %(user)s changed authz rules. (rev:%(rev)s,%(msg)s)" 
    9090msgstr "用户 %(user)s 修改了授权策略。(rev:%(rev)s,%(msg)s)" 
    9191 
    92 #: pysvnmanager/controllers/authz.py:203 
     92#: pysvnmanager/controllers/authz.py:194 
    9393#, python-format 
    9494msgid "User %(user)s delete authz rules. (rev:%(rev)s,%(msg)s)" 
    9595msgstr "用户 %(user)s 删除了授权策略。(rev:%(rev)s,%(msg)s)" 
    9696 
    97 #: pysvnmanager/controllers/check.py:70 
    98 #: pysvnmanager/templates/auth_failed.mako:4 
     97#: pysvnmanager/controllers/check.py:68 
     98#: pysvnmanager/templates/auth_failed.mako:3 
    9999msgid "Permission denied." 
    100100msgstr "没有权限。" 
     
    135135msgstr "用户 %s 登出" 
    136136 
    137 #: pysvnmanager/model/svnauthz.py:58 
     137#: pysvnmanager/model/svnauthz.py:59 
    138138msgid "Name is not given." 
    139139msgstr "未能提供名称。" 
    140140 
    141 #: pysvnmanager/model/svnauthz.py:60 
     141#: pysvnmanager/model/svnauthz.py:61 
    142142msgid "Name is not string." 
    143143msgstr "名称不是字符串" 
    144144 
    145 #: pysvnmanager/model/svnauthz.py:64 
    146 #, python-format 
    147 #| msgid "Name contains invalid characters." 
     145#: pysvnmanager/model/svnauthz.py:65 
     146#, python-format 
    148147msgid "Name (%s) contains invalid characters." 
    149148msgstr "名称(%s)中包含非法字符。" 
    150149 
    151 #: pysvnmanager/model/svnauthz.py:222 
    152 msgid "Aliasname is not provided." 
    153 msgstr "未能提供别名。" 
    154  
    155 #: pysvnmanager/model/svnauthz.py:224 
    156 msgid "Aliasname should not begin with &." 
    157 msgstr "别名的首字符不能是 &。" 
    158  
    159 #: pysvnmanager/model/svnauthz.py:397 
    160 msgid "Group name is not provided." 
    161 msgstr "未能提供团队名称。" 
    162  
    163 #: pysvnmanager/model/svnauthz.py:399 
    164 msgid "Group name should not begin with @." 
    165 msgstr "团队名称的首字符不能是 @。" 
    166  
    167 #: pysvnmanager/model/svnauthz.py:469 
     150#: pysvnmanager/model/svnauthz.py:473 
    168151#, python-format 
    169152msgid "Recursive group membership for %s" 
    170153msgstr "%s 出现了循环组引用。" 
    171154 
    172 #: pysvnmanager/model/svnauthz.py:561 
    173 #, python-format 
    174 #| msgid "Not a valide username: %s" 
     155#: pysvnmanager/model/svnauthz.py:567 
     156#, python-format 
    175157msgid "Not a valid username: %s" 
    176158msgstr "非法用户名: %s" 
    177159 
    178 #: pysvnmanager/model/svnauthz.py:686 
     160#: pysvnmanager/model/svnauthz.py:684 
    179161#, python-format 
    180162msgid "Group %s is referenced by group %s." 
    181163msgstr "用户组 %s 被组 %s 引用。" 
    182164 
    183 #: pysvnmanager/model/svnauthz.py:1229 
     165#: pysvnmanager/model/svnauthz.py:1224 
    184166msgid "Update failed! You are working on a out-of-date revision." 
    185167msgstr "更新失败!您的更改是基于一个过期的版本,请先刷新再更改。" 
    186168 
    187 #: pysvnmanager/model/svnauthz.py:1461 pysvnmanager/model/svnauthz.py:1468 
    188 #: pysvnmanager/model/svnauthz.py:1472 
     169#: pysvnmanager/model/svnauthz.py:1458 pysvnmanager/model/svnauthz.py:1465 
     170#: pysvnmanager/model/svnauthz.py:1469 
    189171#, python-format 
    190172msgid "Unknown rule format: %s" 
    191173msgstr "未知策略格式: %s" 
    192174 
    193 #: pysvnmanager/model/svnauthz.py:1486 
     175#: pysvnmanager/model/svnauthz.py:1483 
    194176#, python-format 
    195177msgid "No module exist for %s:%s" 
    196178msgstr "模块不存在: %s:%s" 
    197179 
    198 #: pysvnmanager/model/svnauthz.py:1597 
     180#: pysvnmanager/model/svnauthz.py:1592 
    199181#, python-format 
    200182msgid "Alias %s is referenced by group %s." 
    201183msgstr "别名 %s 为用户组 %s 引用。" 
    202184 
    203 #: pysvnmanager/model/svnauthz.py:1609 
     185#: pysvnmanager/model/svnauthz.py:1604 
    204186#, python-format 
    205187msgid "%s is referenced by [%s]." 
    206188msgstr "%s 在 [%s] 中被引用。" 
    207189 
    208 #: pysvnmanager/model/svnauthz.py:1746 
     190#: pysvnmanager/model/svnauthz.py:1741 
    209191#, python-format 
    210192msgid "User %(username)s has Full (RW) rights for module %(repos)s:%(path)s" 
    211193msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 具有完全权限 (RW)" 
    212194 
    213 #: pysvnmanager/model/svnauthz.py:1748 
     195#: pysvnmanager/model/svnauthz.py:1743 
    214196#, python-format 
    215197msgid "User %(username)s has ReadOnly (RO) rights for module %(repos)s:%(path)s" 
    216198msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 具有只读权限 (RO)" 
    217199 
    218 #: pysvnmanager/model/svnauthz.py:1750 
     200#: pysvnmanager/model/svnauthz.py:1745 
    219201#, python-format 
    220202msgid "User %(username)s can *NOT* access to module %(repos)s:%(path)s" 
    221203msgstr "用户 %(username)s 对模组 %(repos)s:%(path)s 没有访问权限 (XX)" 
    222204 
    223 #: pysvnmanager/model/svnauthz.py:1788 
     205#: pysvnmanager/model/svnauthz.py:1783 
    224206#, python-format 
    225207msgid "" 
     
    240222"\n" 
    241223 
    242 #: pysvnmanager/model/svnauthz.py:1807 
     224#: pysvnmanager/model/svnauthz.py:1802 
    243225#, python-format 
    244226msgid "" 
     
    482464msgstr "角色管理" 
    483465 
     466#: pysvnmanager/templates/role/index.mako:420 
     467#| msgid "Update ACL failed:" 
     468msgid "Update group failed:" 
     469msgstr "更新用户组失败:" 
     470 
     471#: pysvnmanager/templates/role/index.mako:427 
     472#| msgid "Update ACL successfully." 
     473msgid "Update group successfully." 
     474msgstr "成功更新用户组。" 
     475 
    484476#: pysvnmanager/templates/role/index.mako:448 
    485477msgid "Are you sure to delete group:" 
    486478msgstr "您确认要删除用户组:" 
    487479 
     480#: pysvnmanager/templates/role/index.mako:471 
     481#| msgid "Update ACL failed:" 
     482msgid "Delete group failed:" 
     483msgstr "更新用户组失败:" 
     484 
     485#: pysvnmanager/templates/role/index.mako:478 
     486#| msgid "Update ACL successfully." 
     487msgid "Delete group successfully." 
     488msgstr "成功删除用户组。" 
     489 
     490#: pysvnmanager/templates/role/index.mako:512 
     491#| msgid "Update ACL failed:" 
     492msgid "Update alias failed:" 
     493msgstr "更新别名失败:" 
     494 
     495#: pysvnmanager/templates/role/index.mako:519 
     496#| msgid "Update ACL successfully." 
     497msgid "Update alias successfully." 
     498msgstr "成功更新别名。" 
     499 
    488500#: pysvnmanager/templates/role/index.mako:539 
    489501msgid "Are you sure to delete alias:" 
    490502msgstr "您确认要删除别名:" 
    491503 
     504#: pysvnmanager/templates/role/index.mako:562 
     505#| msgid "Update ACL failed:" 
     506msgid "Delete alias failed:" 
     507msgstr "删除别名失败:" 
     508 
     509#: pysvnmanager/templates/role/index.mako:569 
     510#| msgid "Update ACL successfully." 
     511msgid "Delete alias successfully." 
     512msgstr "成功删除别名。" 
     513 
    492514#: pysvnmanager/templates/role/index.mako:645 
    493515msgid "Select a role name:" 
  • trunk/pysvnmanager/model/auth/http.py

    r21 r22  
    55def htpasswd_login(username, password, config): 
    66    authn_file = getattr(config, 'authn_file', '') 
     7    if isinstance(username, str): 
     8        username = unicode(username, 'utf-8') 
    79 
    810    if authn_file: 
     
    1012        for line in pwdfile: 
    1113            user, pwdhash = line.strip().split(':',1) 
    12             if username == user: 
     14            if username == unicode(user,'utf-8'): 
    1315                if pwdhash == crypt(password, pwdhash[:2]): 
    1416                    return True 
  • trunk/pysvnmanager/model/svnauthz.py

    r21 r22  
    629629        for alias in sorted(self.alias_list): 
    630630            buff += unicode(alias) 
    631             buff += '\n' 
     631            buff += u'\n' 
    632632        return buff 
    633633 
     
    690690 
    691691    def __str__(self): 
    692         buff = "[groups]\n" 
     692        buff = u"[groups]\n" 
    693693        for group in sorted(self.group_list): 
    694694            if group.name[0] != '$' and group.name != '*': 
    695695                buff += unicode(group) 
    696                 buff += '\n' 
     696                buff += u'\n' 
    697697        return buff 
    698698 
     
    753753 
    754754    def __str__(self): 
    755         rstr = '' 
     755        rstr = u'' 
    756756        rbit = self.__rights 
    757757        if rbit & RIGHTS_R: 
    758             rstr += 'r' 
     758            rstr += u'r' 
    759759        if rbit & RIGHTS_W: 
    760             rstr += 'w' 
    761         return "%s = %s" % (self.userobj.uname, rstr) 
     760            rstr += u'w' 
     761        return u"%s = %s" % (self.userobj.uname, rstr) 
    762762 
    763763    def __cmp__(self, obj): 
     
    835835    def __str__(self): 
    836836        if not self.__rule_list: 
    837             return '' 
     837            return u'' 
    838838        if self.repos == '/' or not self.repos: 
    839             buff = "[%s]\n" % self.path 
    840         else: 
    841             buff = "[%s:%s]\n" % (self.repos, self.path) 
     839            buff = u"[%s]\n" % self.path 
     840        else: 
     841            buff = u"[%s:%s]\n" % (self.repos, self.path) 
    842842        for rule in sorted(self.__rule_list): 
    843843            tmp = unicode(rule) 
    844844            if tmp: 
    845845                buff += tmp 
    846                 buff += '\n' 
     846                buff += u'\n' 
    847847        return buff 
    848848 
     
    10241024 
    10251025    def __str__(self): 
    1026         buff = '' 
     1026        buff = u'' 
    10271027        for i in sorted(self.module_list): 
    10281028            tmp = unicode(i) 
    10291029            if tmp: 
    10301030                buff += tmp 
    1031                 buff += '\n' 
     1031                buff += u'\n' 
    10321032        return buff 
    10331033 
     
    11011101 
    11021102    def __str__(self): 
    1103         buff = '' 
     1103        buff = u'' 
    11041104        for repos in sorted(self.repos_list): 
    11051105            tmp = unicode(repos) 
     
    12421242        buff += self.compose_version() 
    12431243        buff += self.compose_acl() 
    1244         buff += '\n' 
     1244        buff += u'\n' 
    12451245        buff += unicode(self.__grouplist) 
    1246         buff += '\n' 
     1246        buff += u'\n' 
    12471247        buff += unicode(self.__aliaslist) 
    1248         buff += '\n' 
     1248        buff += u'\n' 
    12491249        buff += unicode(self.__reposlist) 
    12501250        return buff 
     
    13261326        buff = "" 
    13271327        if self.__version: 
    1328             buff = "# version : %s\n" % self.__version 
     1328            buff = u"# version : %s\n" % self.__version 
    13291329        return buff 
    13301330 
    13311331    def compose_acl(self): 
    1332         buff = "" 
     1332        buff = u"" 
    13331333        for repos in self.__reposlist: 
    13341334            admins = repos.admins 
     
    15741574        if isinstance(user, basestring): 
    15751575            user = self.userlist.get_or_set(user) 
    1576         alias.user = user 
     1576        if user: 
     1577            alias.user = user 
    15771578        return alias 
    15781579 
  • trunk/pysvnmanager/templates/role/index.mako

    r2 r22  
    418418        if (message) 
    419419        { 
    420                 message = '${"Update group failed:"}' + message; 
     420                message = '${_("Update group failed:")}' + message; 
    421421                alert(message); 
    422422                document.getElementById('result').innerHTML = message; 
     
    425425        else 
    426426        { 
    427                 message = '${"Update group successfully."}'; 
     427                message = '${_("Update group successfully.")}'; 
    428428                document.getElementById('result').innerHTML = message; 
    429429                alert(message); 
     
    469469        if (message) 
    470470        { 
    471                 message = '${"Delete group failed:"}' + message; 
     471                message = '${_("Delete group failed:")}' + message; 
    472472                alert(message); 
    473473                document.getElementById('result').innerHTML = message; 
     
    476476        else 
    477477        { 
    478                 message = '${"Delete group successfully."}'; 
     478                message = '${_("Delete group successfully.")}'; 
    479479                document.getElementById('result').innerHTML = message; 
    480480                alert(message); 
     
    510510        if (message) 
    511511        { 
    512                 message = '${"Update alias failed:"}' + message; 
     512                message = '${_("Update alias failed:")}' + message; 
    513513                alert(message); 
    514514                document.getElementById('result').innerHTML = message; 
     
    517517        else 
    518518        { 
    519                 message = '${"Update alias successfully."}'; 
     519                message = '${_("Update alias successfully.")}'; 
    520520                document.getElementById('result').innerHTML = message; 
    521521                alert(message); 
     
    560560        if (message) 
    561561        { 
    562                 message = '${"Delete alias failed:"}' + message; 
     562                message = '${_("Delete alias failed:")}' + message; 
    563563                alert(message); 
    564564                document.getElementById('result').innerHTML = message; 
     
    567567        else 
    568568        { 
    569                 message = '${"Delete alias successfully."}'; 
     569                message = '${_("Delete alias successfully.")}'; 
    570570                document.getElementById('result').innerHTML = message; 
    571571                alert(message); 
  • trunk/pysvnmanager/tests/__init__.py

    r8 r22  
    3939 
    4040    def __init__(self, *args, **kwargs): 
     41        self.authz_file = os.path.dirname(__file__) + '/../../config/svn.access.test' 
    4142        wsgiapp = loadapp('config:test.ini', relative_to=conf_dir) 
    4243        self.app = paste.fixture.TestApp(wsgiapp) 
     
    4546    def rollback(self): 
    4647        src = os.path.dirname(__file__) + '/../config/svn.access.in' 
    47         dest = os.path.dirname(__file__) + '/../../config/svn.access.test' 
     48        dest = self.authz_file 
    4849        copyfile(src, dest) 
    49  
     50         
     51    def load_authz(self): 
     52        from pysvnmanager.model import svnauthz 
     53        return svnauthz.SvnAuthz(self.authz_file) 
     54         
    5055    def login(self, username, password=""): 
    5156        res = self.app.get(url_for(controller='security')) 
  • trunk/pysvnmanager/tests/functional/test_authz.py

    r21 r22  
    143143 
    144144 
    145     def test_save_authz(self): 
    146         # authn test 
    147         res = self.app.get(url_for(controller='authz', action='save_authz')) 
    148         assert res.status == 302 
    149         self.assertEqual(res.header('location'), '/security') 
    150  
    151         # authz test 
    152         self.login('nobody') 
    153         res = self.app.get(url_for(controller='authz', action='save_authz')) 
    154         assert res.status == 200, res.status 
    155         self.assert_('Permission denied.' in res.body, res.body) 
    156          
    157         # Login as superuser 
    158         self.login('root') 
    159         params = {'reposname':'/', 'admins':''} 
    160         res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    161         assert res.status == 200 
    162         assert "You can not delete yourself from admin list." == res.body, res.body 
    163         self.rollback() 
    164          
    165         params = {'reposname':'/', 'admins':'root, @some'} 
    166         res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    167         assert res.status == 200 
    168         assert "" == res.body, res.body 
    169         self.rollback() 
    170  
    171         self.login('jiangxin') 
    172         params = {'reposname':'/', 'admins':'&admin'} 
    173         res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    174         assert res.status == 200 
    175         assert "" == res.body, res.body 
    176         self.rollback() 
    177          
    178         self.login('jiangxin') 
    179         params = {'reposname':'/', 'admins':'root'} 
    180         res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    181         assert res.status == 200 
    182         assert "You can not delete yourself from admin list." == res.body, res.body 
    183         self.rollback() 
    184  
    185         self.login('root') 
    186         params = {'reposname':'/repos1', 'admins':'user1'} 
    187         res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    188         assert res.status == 200 
    189         assert "" == res.body, res.body 
    190         self.rollback() 
    191      
    192         self.login('root') 
    193         params = {'reposname':'/repos1', 'admins':'user1, root'} 
    194         res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    195         assert res.status == 200 
    196         assert "" == res.body, res.body 
    197         self.rollback() 
    198      
    199         self.login('admin1') 
    200         params = {'reposname':'/repos1', 'admins':'user1, root'} 
    201         res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    202         assert res.status == 200 
    203         assert "You can not delete yourself from admin list." == res.body, res.body 
    204  
    205         self.login('admin1') 
    206         params = {'reposname':'/repos1', 'admins':'admin1, admin2'} 
    207         res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
    208         assert res.status == 200 
    209         assert "" == res.body, res.body 
    210         self.rollback() 
    211      
     145    def test_set_repos_admin(self): 
     146        # authn test 
     147        try: 
     148            res = self.app.get(url_for(controller='authz', action='save_authz')) 
     149            assert res.status == 302 
     150            self.assertEqual(res.header('location'), '/security') 
     151 
     152            # authz test 
     153            self.login('nobody') 
     154            res = self.app.get(url_for(controller='authz', action='save_authz')) 
     155            assert res.status == 200, res.status 
     156            self.assert_('Permission denied.' in res.body, res.body) 
     157             
     158            # Login as superuser 
     159            self.login('root') 
     160            params = {'reposname':'/', 'admins':''} 
     161            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     162            assert res.status == 200 
     163            assert "You can not delete yourself from admin list." == res.body, res.body 
     164        finally: 
     165            self.rollback() 
     166             
     167        try: 
     168            params = {'reposname':'/', 'admins':'root, @some'} 
     169            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     170            assert res.status == 200 
     171            assert "" == res.body, res.body 
     172        finally: 
     173            self.rollback() 
     174 
     175        try: 
     176            self.login('jiangxin') 
     177            params = {'reposname':'/', 'admins':'&admin'} 
     178            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     179            assert res.status == 200 
     180            assert "" == res.body, res.body 
     181        finally: 
     182            self.rollback() 
     183             
     184        try: 
     185            self.login('jiangxin') 
     186            params = {'reposname':'/', 'admins':'root'} 
     187            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     188            assert res.status == 200 
     189            assert "You can not delete yourself from admin list." == res.body, res.body 
     190        finally: 
     191            self.rollback() 
     192 
     193        try: 
     194            self.login('root') 
     195            params = {'reposname':'/repos1', 'admins':'user1'} 
     196            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     197            assert res.status == 200 
     198            assert "" == res.body, res.body 
     199        finally: 
     200            self.rollback() 
     201         
     202        try: 
     203            self.login('root') 
     204            params = {'reposname':'/repos1', 'admins':'user1, root'} 
     205            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     206            assert res.status == 200 
     207            assert "" == res.body, res.body 
     208        finally: 
     209            self.rollback() 
     210         
     211        try: 
     212            self.login('admin1') 
     213            params = {'reposname':'/repos1', 'admins':'user1, root'} 
     214            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     215            assert res.status == 200 
     216            assert "You can not delete yourself from admin list." == res.body, res.body 
     217 
     218            self.login('admin1') 
     219            params = {'reposname':'/repos1', 'admins':'admin1, admin2'} 
     220            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     221            assert res.status == 200 
     222            assert "" == res.body, res.body 
     223        finally: 
     224            self.rollback() 
     225 
     226    def test_set_rules(self): 
     227        # Modify rules for repos 
     228        try: 
     229            authz = self.load_authz() 
     230            module1 = authz.get_module('repos1', u'trunk/src') 
     231            self.assert_(module1 != None, type(module1)) 
     232            self.assert_(unicode(module1)=='[repos1:/trunk/src]\nuser1 = \n', unicode(module1).encode('utf-8')) 
     233 
     234            self.login('root') 
     235            params = {'reposname':'/repos1', 'path':'/trunk/src', 'admins':'蒋鑫', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'edit', 'mode2':'edit' } 
     236            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     237            assert res.status == 200 
     238            assert "" == res.body, res.body 
     239             
     240            authz = self.load_authz() 
     241            module1 = authz.get_module('repos1', u'trunk/src') 
     242            self.assert_(module1 != None, type(module1)) 
     243            self.assert_(unicode(module1)==u'[repos1:/trunk/src]\n&别名1 = r\n* = \n@管理员 = rw\nuser2 = r\n', unicode(module1).encode('utf-8')) 
     244             
     245            # Test login using chinese username 
     246            self.login('蒋鑫') 
     247            params = {'reposname':'/repos1', 'path':'/trunk/src', 'admins':'其他', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'edit', 'mode2':'edit' } 
     248            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     249            assert res.status == 200, res.headers 
     250            assert "You can not delete yourself from admin list." in res.body, res.body 
     251        finally: 
     252            self.rollback() 
     253 
     254        # Add New Repos 
     255        try: 
     256            authz = self.load_authz() 
     257            repos1 = authz.get_repos('reposX') 
     258            self.assert_(repos1 == None, type(repos1)) 
     259 
     260            self.login('root') 
     261            params = {'reposname':'reposX', 'admins':'蒋鑫', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'new', 'mode2':'new' } 
     262            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     263            assert res.status == 200 
     264            assert "" == res.body, res.body 
     265         
     266            authz = self.load_authz() 
     267            repos1 = authz.get_repos('reposX') 
     268            self.assert_(repos1 != None, type(repos1)) 
     269            self.assert_(unicode(repos1)==u'', unicode(repos1).encode('utf-8')) 
     270            self.assert_(repos1.admins==u'蒋鑫', repos1.admins.encode('utf-8')) 
     271        finally: 
     272            self.rollback() 
     273 
     274        # Add New Repos with Module/Rules 
     275        try: 
     276            authz = self.load_authz() 
     277            repos1 = authz.get_repos('reposX') 
     278            self.assert_(repos1 == None, type(repos1)) 
     279 
     280            self.login('root') 
     281            params = {'reposname':'reposX', 'admins':'蒋鑫', 'path':'/项目a', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'new', 'mode2':'new' } 
     282            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     283            assert res.status == 200 
     284            assert "" == res.body, res.body 
     285         
     286            authz = self.load_authz() 
     287            repos1 = authz.get_repos('reposX') 
     288            self.assert_(unicode(repos1)==u'[reposX:/项目a]\n&别名1 = r\n* = \n@管理员 = rw\nuser2 = r\n\n', unicode(repos1).encode('utf-8')) 
     289            self.assert_(repos1.admins==u'蒋鑫', repos1.admins.encode('utf-8')) 
     290        finally: 
     291            self.rollback() 
     292         
     293        # Test Repos/Module not exist Exception 
     294        try: 
     295            self.login('root') 
     296            params = {'reposname':'reposX', 'path':'/trunk/src', 'admins':'蒋鑫', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'edit', 'mode2':'edit' } 
     297            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     298            assert res.status == 200 
     299            assert "Repository reposX not exist." == res.body, res.body 
     300        finally: 
     301            self.rollback() 
     302         
     303        # Test Repos/Module not exist Exception 
     304        try: 
     305            self.login('root') 
     306            params = {'reposname':'repos1', 'path':'/trunk/myproject', 'admins':'蒋鑫', 'rules':'@管理员=rw\n&别名1=r\n*=\nuser2=r', 'mode1':'edit', 'mode2':'edit' } 
     307            res = self.app.get(url_for(controller='authz', action='save_authz'), params) 
     308            assert res.status == 200 
     309            assert "Module /trunk/myproject not exist." == res.body, res.body 
     310        finally: 
     311            self.rollback() 
     312         
     313         
    212314    def test_delete_authz(self): 
    213315        # authn test 
     
    221323        assert res.status == 200, res.status 
    222324        self.assert_('Permission denied.' in res.body, res.body) 
     325 
     326        authz = self.load_authz() 
     327        module1 = authz.get_module('document', u'/trunk/行政部') 
     328        self.assert_(module1 != None, type(module1)) 
     329  
     330        self.login('root') 
     331        params = {'reposname':'document', 'path':'/trunk/行政部'} 
     332        res = self.app.get(url_for(controller='authz', action='delete_authz'), params) 
     333 
     334        authz = self.load_authz() 
     335        module1 = authz.get_module('document', u'/trunk/行政部') 
     336        self.assert_(module1 == None, type(module1))         
     337         
     338        try: 
     339            self.login('root') 
     340            params = {'reposname':'document', 'path':'/trunk/行政部', 'revision':'123'} 
     341            res = self.app.get(url_for(controller='authz', action='delete_authz'), params) 
     342            assert res.status == 200 
     343            assert "Update failed! You are working on a out-of-date revision." in res.body, res.body 
     344        finally: 
     345            self.rollback() 
  • trunk/pysvnmanager/tests/functional/test_check.py

    r21 r22  
    6363        assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user1 =</div>''' in res.body, res.body 
    6464 
    65         params['userinput'] = 'select' 
    66         params['reposinput'] = 'select' 
    67         params['pathinput'] = 'select' 
    68         params['userselector'] = 'user1' 
    69         params['reposselector'] = 'reposX' 
    70         params['pathselector'] = '/trunk/src/test' 
    71         res = self.app.get(url_for(controller='check', action='access_map'), params) 
    72         assert '''<div id='acl_path_msg'>[reposX:/trunk/src/test] user1 = r</div>''' in res.body, res.body 
    73  
    74         params['userinput'] = 'manual' 
    75         params['reposinput'] = 'manual' 
    76         params['pathinput'] = 'manual' 
    77         params['username'] = 'user2' 
    78         params['reposname'] = 'repos1' 
    79         params['pathname'] = '/trunk/src/test' 
     65        params = { 
     66                  'userinput':'select',  
     67                  'reposinput':'select',  
     68                  'pathinput':'select', 
     69                  'userselector':'user1', 
     70                  'reposselector':'reposX', 
     71                  'pathselector':'/trunk/src/test', 
     72                  'abbr':'False', 
     73                  } 
     74        res = self.app.get(url_for(controller='check', action='access_map'), params) 
     75        assert '''<div id='acl_path_msg'>User user1 has ReadOnly (RO) rights for module reposX:/trunk/src/test</div><pre> 
     76================================================== 
     77Access map on 'reposX' for user 'user1' 
     78================================================== 
     79  * Writable: 
     80     
     81---------------------------------------- 
     82  * Readable: 
     83    /branches 
     84    /tags 
     85    /trunk/src 
     86---------------------------------------- 
     87  * Denied: 
     88    / 
     89    /trunk 
     90---------------------------------------- 
     91''' in res.body, res.body 
     92 
     93        params = { 
     94                  'userinput':'manual',  
     95                  'reposinput':'manual',  
     96                  'pathinput':'manual', 
     97                  'username':'user2', 
     98                  'reposname':'repos1', 
     99                  'pathname':'/trunk/src/test', 
     100                  'abbr':'1', 
     101                  } 
    80102        res = self.app.get(url_for(controller='check', action='access_map'), params) 
    81103        assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user2 = r</div>''' in res.body, res.body 
    82104 
    83         params['userinput'] = 'select' 
    84         params['reposinput'] = 'select' 
    85         params['pathinput'] = 'manual' 
    86         params['userselector'] = 'user2' 
    87         params['reposselector'] = 'reposX' 
    88         params['pathname'] = '/trunk/' 
     105        params = { 
     106                  'userinput':'select',  
     107                  'reposinput':'select',  
     108                  'pathinput':'manual', 
     109                  'userselector':'user2', 
     110                  'reposselector':'reposX', 
     111                  'pathname':'/trunk/', 
     112                  'abbr':'1', 
     113                  } 
    89114        res = self.app.get(url_for(controller='check', action='access_map'), params) 
    90115        assert '''<div id='acl_path_msg'>[reposX:/trunk] user2 =</div>''' in res.body, res.body 
    91116 
    92         params['userinput'] = 'select' 
    93         params['reposinput'] = 'select' 
    94         params['pathinput'] = 'select' 
    95         params['userselector'] = 'user3' 
    96         params['reposselector'] = 'repos1' 
    97         params['pathselector'] = '/trunk' 
     117        params = { 
     118                  'userinput':'select',  
     119                  'reposinput':'select',  
     120                  'pathinput':'select', 
     121                  'userselector':'user3', 
     122                  'reposselector':'repos1', 
     123                  'pathselector':'/trunk', 
     124                  'abbr':'1', 
     125                  } 
    98126        res = self.app.get(url_for(controller='check', action='access_map'), params) 
    99127        assert '''<div id='acl_path_msg'>[repos1:/trunk] user3 =</div>''' in res.body, res.body 
    100128 
    101         params['userselector'] = 'user4' 
    102         params['reposselector'] = 'repos1' 
    103         params['pathselector'] = '/trunk' 
     129        params = { 
     130                  'userinput':'select',  
     131                  'reposinput':'select',  
     132                  'pathinput':'select', 
     133                  'userselector':'user4', 
     134                  'reposselector':'repos1', 
     135                  'pathselector':'/trunk', 
     136                  'abbr':'1', 
     137                  } 
    104138        res = self.app.get(url_for(controller='check', action='access_map'), params) 
    105139        assert '''<div id='acl_path_msg'>[repos1:/trunk] user4 = r</div>''' in res.body, res.body 
    106140 
    107         params['userselector'] = 'user4' 
    108         params['reposselector'] = 'reposX' 
    109         params['pathselector'] = '/trunk' 
     141        params = { 
     142                  'userinput':'select',  
     143                  'reposinput':'select',  
     144                  'pathinput':'select', 
     145                  'userselector':'user4', 
     146                  'reposselector':'reposX', 
     147                  'pathselector':'/trunk', 
     148                  'abbr':'1', 
     149                  } 
    110150        res = self.app.get(url_for(controller='check', action='access_map'), params) 
    111151        assert '''<div id='acl_path_msg'>[reposX:/trunk] user4 = r</div>''' in res.body, res.body 
    112152 
    113         params['userselector'] = 'user5' 
    114         params['reposselector'] = 'reposX' 
    115         params['pathselector'] = '/trunk' 
     153        params = { 
     154                  'userinput':'select',  
     155                  'reposinput':'select',  
     156                  'pathinput':'select', 
     157                  'userselector':'user5', 
     158                  'reposselector':'reposX', 
     159                  'pathselector':'/trunk', 
     160                  'abbr':'1', 
     161                  } 
    116162        res = self.app.get(url_for(controller='check', action='access_map'), params) 
    117163        assert '''<div id='acl_path_msg'>[reposX:/trunk] user5 =</div>''' in res.body, res.body 
    118164 
     165        # Repos = * 
     166        self.login('admin2') 
     167        params = { 
     168                  'userinput':'select',  
     169                  'userselector':'user1', 
     170                  'reposinput':'select',  
     171                  'reposselector':'*', 
     172                  'pathinput':'select', 
     173                  'pathselector':'/trunk/src/test', 
     174                  'abbr':'True', 
     175                  } 
     176        res = self.app.get(url_for(controller='check', action='access_map'), params) 
     177        assert res.status == 200, res.status 
     178        assert '''<div id='acl_path_msg'>[repos1:/trunk/src/test] user1 =<br> 
     179[repos2:/trunk/src/test] user1 = r</div><pre> 
     180user1 => [repos1] 
     181---------------------------------------- 
     182RW:  
     183RO: /branches, /tags, /trunk 
     184XX: /, /trunk/src 
     185 
     186 
     187 
     188user1 => [repos2] 
     189---------------------------------------- 
     190RW: /, /trunk 
     191RO: /branches, /tags, /trunk/src 
     192XX:  
     193 
     194</pre>''' in res.body, repr(res.body) 
     195 
     196        # permision deny test 
     197        self.login('admin2') 
     198        params = { 
     199                  'userinput':'select',  
     200                  'reposinput':'select',  
     201                  'pathinput':'select', 
     202                  'userselector':'user1', 
     203                  'reposselector':'repos3', 
     204                  'pathselector':'/trunk/src/test', 
     205                  'abbr':'True', 
     206                  } 
     207        res = self.app.get(url_for(controller='check', action='access_map'), params) 
     208        assert res.status == 200 
     209        assert 'Permission denied.' in res.body, res.body 
    119210 
    120211    def test_authz_path(self): 
  • trunk/pysvnmanager/tests/functional/test_role.py

    r21 r22  
    7676""" == res.body, res.body 
    7777 
     78        params = {'role':'@group1',} 
     79        res = self.app.get(url_for(controller='role', action='get_role_info'), params) 
     80        assert res.status == 200 
     81        assert """id[0]="@group2";name[0]="Group:group2"; 
     82id[1]="@group3";name[1]="Group:group3"; 
     83id[2]="user1";name[2]="user1"; 
     84id[3]="user11";name[3]="user11"; 
     85id[4]="user12";name[4]="user12"; 
     86members_count=5; 
     87revision="0.2.1"; 
     88""" == res.body, res.body 
     89 
    7890        params = {'role':'@group3',} 
    7991        res = self.app.get(url_for(controller='role', action='get_role_info'), params) 
     
    105117        self.assert_('Permission denied.' in res.body, res.body) 
    106118 
     119        # Change group members, autodrop=no 
     120        try: 
     121            authz = self.load_authz() 
     122            userobj = authz.get_userobj('@group3') 
     123            self.assert_(unicode(userobj) == u'group3 = user3, user31, user32', unicode(userobj).encode('utf-8')) 
     124 
     125            self.login('root') 
     126            params = {'rolename':'group3', 'members':'蒋鑫, user3,@group1', 'autodrop':'no', } 
     127            res = self.app.get(url_for(controller='role', action='save_group'), params) 
     128            assert res.status == 200 
     129            assert "Recursive group membership for @group1" in res.body, res.body 
     130         
     131            authz = self.load_authz() 
     132            userobj = authz.get_userobj('@group3') 
     133            self.assert_(unicode(userobj) == u'group3 = user3, user31, user32', unicode(userobj).encode('utf-8')) 
     134        finally: 
     135            self.rollback() 
     136 
     137        # Change group members, autodrop=yes 
     138        try: 
     139            authz = self.load_authz() 
     140            userobj = authz.get_userobj('@group3') 
     141            self.assert_(unicode(userobj) == u'group3 = user3, user31, user32', unicode(userobj).encode('utf-8')) 
     142 
     143            self.login('root') 
     144            params = {'rolename':'group3', 'members':'蒋鑫, user3,@group1', 'autodrop':'yes', } 
     145            res = self.app.get(url_for(controller='role', action='save_group'), params) 
     146            assert res.status == 200 
     147            assert "" == res.body, res.body 
     148         
     149            authz = self.load_authz() 
     150            userobj = authz.get_userobj('@group3') 
     151            self.assert_(unicode(userobj) == u'group3 = user3, 蒋鑫', unicode(userobj).encode('utf-8')) 
     152        finally: 
     153            self.rollback() 
     154 
     155        # Add New Group 
     156        try: 
     157            authz = self.load_authz() 
     158            userobj = authz.get_userobj('@管理员组') 
     159            self.assert_(userobj == None) 
     160 
     161            self.login('root') 
     162            params = {'rolename':'管理员组', 'members':'蒋鑫, user3,@group1' } 
     163            res = self.app.get(url_for(controller='role', action='save_group'), params) 
     164            assert res.status == 200 
     165            assert "" == res.body, res.body 
     166         
     167            authz = self.load_authz() 
     168            userobj = authz.get_userobj('@管理员组') 
     169            self.assert_(unicode(userobj) == u'管理员组 = @group1, user3, 蒋鑫', unicode(userobj).encode('utf-8')) 
     170        finally: 
     171            self.rollback() 
     172 
     173        # Add New Group, out-of-date 
     174        try: 
     175            authz = self.load_authz() 
     176            userobj = authz.get_userobj('@管理员组') 
     177            self.assert_(userobj == None) 
     178 
     179            self.login('root') 
     180            params = {'rolename':'管理员组', 'members':'蒋鑫, user3,@group1', 'revision':'' } 
     181            res = self.app.get(url_for(controller='role', action='save_group'), params) 
     182            assert res.status == 200 
     183            assert "Update failed! You are working on a out-of-date revision." in res.body, res.body 
     184         
     185            authz = self.load_authz() 
     186            userobj = authz.get_userobj('@管理员组') 
     187            self.assert_(userobj == None) 
     188        finally: 
     189            self.rollback() 
     190             
    107191    def test_delete_group(self): 
    108192        # authn test 
     
    117201        self.assert_('Permission denied.' in res.body, res.body) 
    118202 
     203        # Delete group failed, ref by other group. 
     204        try: 
     205            authz = self.load_authz() 
     206            userobj = authz.get_userobj('@group3') 
     207            self.assert_(unicode(userobj) == u'group3 = user3, user31, user32', unicode(userobj).encode('utf-8')) 
     208 
     209            self.login('root') 
     210            params = {'role':'group3',} 
     211            res = self.app.get(url_for(controller='role', action='delete_group'), params) 
     212            assert res.status == 200 
     213            assert "Group group3 is referenced by group @group1." in res.body, res.body 
     214        finally: 
     215            self.rollback() 
     216 
     217        # Delete group failed, ref by rules. 
     218        try: 
     219            authz = self.load_authz() 
     220            userobj = authz.get_userobj('@dev') 
     221            self.assert_(unicode(userobj) == u'dev = dev1, dev2, dev3', unicode(userobj).encode('utf-8')) 
     222 
     223            self.login('root') 
     224            params = {'role':'@dev',} 
     225            res = self.app.get(url_for(controller='role', action='delete_group'), params) 
     226            assert res.status == 200 
     227            assert "@dev is referenced by [/:/trunk]." in res.body, res.body 
     228         
     229            authz = self.load_authz() 
     230            userobj = authz.get_userobj('@dev') 
     231            self.assert_(unicode(userobj) == u'dev = dev1, dev2, dev3', unicode(userobj).encode('utf-8')) 
     232        finally: 
     233            self.rollback() 
     234 
     235        # Delete group successful. 
     236        try: 
     237            authz = self.load_authz() 
     238            userobj = authz.get_userobj('@all') 
     239            self.assert_(unicode(userobj) == 'all = @admin, @dev, @test', unicode(userobj).encode('utf-8')) 
     240 
     241            self.login('root') 
     242            params = {'role':'all',} 
     243            res = self.app.get(url_for(controller='role', action='delete_group'), params) 
     244            assert res.status == 200 
     245            assert "" == res.body, res.body 
     246         
     247            authz = self.load_authz() 
     248            userobj = authz.get_userobj('@all') 
     249            self.assert_(userobj==None) 
     250        finally: 
     251            self.rollback() 
     252 
    119253    def test_save_alias(self): 
    120254        # authn test 
     
    129263        self.assert_('Permission denied.' in res.body, res.body) 
    130264 
     265        # Change alias successfully 
     266        try: 
     267            authz = self.load_authz() 
     268            userobj = authz.get_userobj('&admin') 
     269            self.assert_(unicode(userobj) == u'admin = jiangxin', unicode(userobj).encode('utf-8')) 
     270 
     271            self.login('root') 
     272            params = {'aliasname':'admin', 'username':'蒋鑫',} 
     273            res = self.app.get(url_for(controller='role', action='save_alias'), params) 
     274            assert res.status == 200 
     275            assert "" == res.body, res.body 
     276         
     277            authz = self.load_authz() 
     278            userobj = authz.get_userobj('&admin') 
     279            self.assert_(unicode(userobj) == u'admin = 蒋鑫', unicode(userobj).encode('utf-8')) 
     280        finally: 
     281            self.rollback() 
     282             
     283        # Add new alias successfully 
     284        try: 
     285            authz = self.load_authz() 
     286            userobj = authz.get_userobj('&管理员') 
     287            self.assert_(userobj == None) 
     288 
     289            self.login('root') 
     290            params = {'aliasname':'管理员', 'username':'蒋鑫',} 
     291            res = self.app.get(url_for(controller='role', action='save_alias'), params) 
     292            assert res.status == 200 
     293            assert "" == res.body, res.body 
     294         
     295            authz = self.load_authz() 
     296            userobj = authz.get_userobj('&管理员') 
     297            self.assert_(unicode(userobj) == u'管理员 = 蒋鑫', unicode(userobj).encode('utf-8')) 
     298        finally: 
     299            self.rollback() 
     300             
     301        # Change alias failed, out-of-date 
     302        try: 
     303            authz = self.load_authz() 
     304            userobj = authz.get_userobj('&admin') 
     305            self.assert_(unicode(userobj) == u'admin = jiangxin', unicode(userobj).encode('utf-8')) 
     306 
     307            self.login('root') 
     308            params = {'aliasname':'admin', 'username':'蒋鑫', 'revision':'123'} 
     309            res = self.app.get(url_for(controller='role', action='save_alias'), params) 
     310            assert res.status == 200 
     311            assert "Update failed! You are working on a out-of-date revision." in res.body, res.body 
     312         
     313            authz = self.load_authz() 
     314            userobj = authz.get_userobj('&admin') 
     315            self.assert_(unicode(userobj) == u'admin = jiangxin', unicode(userobj).encode('utf-8')) 
     316        finally: 
     317            self.rollback() 
     318             
     319             
    131320    def test_delete_alias(self): 
    132321        # authn test 
     
    140329        assert res.status == 200, res.status 
    141330        self.assert_('Permission denied.' in res.body, res.body) 
     331 
     332        # Delete alias successfully 
     333        try: 
     334            authz = self.load_authz() 
     335            userobj = authz.get_userobj('&tm') 
     336            self.assert_(unicode(userobj) == u'tm = test1', unicode(userobj).encode('utf-8')) 
     337 
     338            self.login('root') 
     339            params = {'aliasname':'tm'} 
     340            res = self.app.get(url_for(controller='role', action='delete_alias'), params) 
     341            assert res.status == 200 
     342            assert "" == res.body, res.body 
     343         
     344            authz = self.load_authz() 
     345            userobj = authz.get_userobj('&tm') 
     346            self.assert_(userobj == None) 
     347        finally: 
     348            self.rollback() 
     349             
     350        # Delete alias failed. out of date 
     351        try: 
     352            authz = self.load_authz() 
     353            userobj = authz.get_userobj('&tm') 
     354            self.assert_(unicode(userobj) == u'tm = test1', unicode(userobj).encode('utf-8')) 
     355 
     356            self.login('root') 
     357            params = {'aliasname':'tm', 'revision':''} 
     358            res = self.app.get(url_for(controller='role', action='delete_alias'), params) 
     359            assert res.status == 200 
     360            assert "Update failed! You are working on a out-of-date revision." in res.body, res.body 
     361         
     362            authz = self.load_authz() 
     363            userobj = authz.get_userobj('&tm') 
     364            self.assert_(unicode(userobj) == u'tm = test1', unicode(userobj).encode('utf-8')) 
     365        finally: 
     366            self.rollback() 
     367             
     368 
     369        # Delete alias failed. refenced by rules. 
     370        try: 
     371            authz = self.load_authz() 
     372            userobj = authz.get_userobj('&pm') 
     373            self.assert_(unicode(userobj) == u'pm = dev1', unicode(userobj).encode('utf-8')) 
     374 
     375            self.login('root') 
     376            params = {'aliasname':'pm', 'revision':''} 
     377            res = self.app.get(url_for(controller='role', action='delete_alias'), params) 
     378            assert res.status == 200 
     379            assert "&pm is referenced by [/:/trunk]." in res.body, res.body 
     380         
     381            authz = self.load_authz() 
     382            userobj = authz.get_userobj('&pm') 
     383            self.assert_(unicode(userobj) == u'pm = dev1', unicode(userobj).encode('utf-8')) 
     384        finally: 
     385            self.rollback() 
  • trunk/pysvnmanager/tests/test_models.py

    r21 r22  
    331331 
    332332    def testModule(self): 
     333        module = self.authz.get_module(u'版本库1', u'/项目1') 
     334        self.assert_(module.fullname==u'版本库1:/项目1', module.fullname.encode('utf8')) 
     335        self.assert_(unicode(module)==u'[版本库1:/项目1]\n* = \n@组1 = rw\n用户3 = r\n', unicode(module).encode('utf8')) 
     336 
    333337        module = Module('/', '/trunk') 
    334338        self.assert_(module.path == '/trunk') 
     
    397401 
    398402    def testRepos(self): 
     403        repos1 = self.authz.get_repos(u'版本库1') 
     404        self.assert_(repos1.name==u'版本库1', repos1.name.encode('utf8')) 
     405 
    399406        user1=User('user1') 
    400407        user2=User('user2') 
  • trunk/test.ini

    r10 r22  
    4747 
    4848# Login test: user account and password 
    49 test_users = {'root':'guess', 'jiangxin':'guess', 'nobody':'guess', 'admin1':'guess', 'admin2':'guess'} 
     49test_users = {'root':'guess', 'jiangxin':'guess', 'nobody':'guess', 'admin1':'guess', 'admin2':'guess', '蒋鑫':'guess'} 
    5050 
    5151# authn_file: a .htpasswd style password file, used for pysvnmanager authentication.