Changeset 3437 in products for quintagroup.plonetabs/trunk


Ignore:
Timestamp:
Apr 20, 2012 10:04:56 AM (12 years ago)
Author:
potar
Message:

Merged tests branch

Location:
quintagroup.plonetabs/trunk
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.plonetabs/trunk

    • Property svn:mergeinfo
      •  

        old new  
        11/quintagroup.plonetabs/branches/plone4:3076-3243 
         2/quintagroup.plonetabs/branches/tests:3394-3436 
  • quintagroup.plonetabs/trunk/docs/HISTORY.txt

    r3382 r3437  
    22========= 
    33 
     40.7.1-dev (unreleased) 
     5---------------------- 
     6* Updated code according with pep8, pylint, pyflakes 
     7  [potar] 
     8 
     9* Fixed tests and compatibility with Plone 3  (added plone detecting) 
     10  [potar] 
     11 
     12* Added plone.browserlayer to install_requires (setup.py) 
     13  [potar] 
     14 
    4150.7 - (12-03-2012) 
    5 ------------------- 
     16------------------ 
    617* Updated permissions. Starting from Plone 4.1 it is necessary 
    718  to import permissions.zcml from Products.CMFCore. 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/Extensions/Install.py

    r865 r3437  
    1414) 
    1515 
     16 
    1617def install(self, reinstall=False): 
    1718    """Install a set of products (which themselves may either use Install.py 
    1819    or GenericSetup extension profiles for their configuration) and then 
    1920    install a set of extension profiles. 
    20      
     21 
    2122    One of the extension profiles we install is that of this product. This 
    2223    works because an Install.py installation script (such as this one) takes 
    23     precedence over extension profiles for the same product in  
    24     portal_quickinstaller.  
    25      
     24    precedence over extension profiles for the same product in 
     25    portal_quickinstaller. 
     26 
    2627    We do this because it is not possible to install other products during 
    2728    the execution of an extension profile (i.e. we cannot do this during 
    2829    the importVarious step for this profile). 
    2930    """ 
    30      
     31 
    3132    portal_quickinstaller = getToolByName(self, 'portal_quickinstaller') 
    3233    portal_setup = getToolByName(self, 'portal_setup') 
     
    3940            portal_quickinstaller.installProduct(product) 
    4041            transaction.savepoint() 
    41      
     42 
    4243    for extension_id in EXTENSION_PROFILES: 
    43         portal_setup.runAllImportStepsFromProfile('profile-%s' % extension_id, purge_old=False) 
     44        portal_setup.runAllImportStepsFromProfile('profile-%s' % extension_id, 
     45                                                  purge_old=False) 
    4446        product_name = extension_id.split(':')[0] 
    4547        portal_quickinstaller.notifyInstalled(product_name) 
    4648        transaction.savepoint() 
    4749 
     50 
    4851def uninstall(self): 
    4952    portal_setup = getToolByName(self, 'portal_setup') 
    5053    for extension_id in UNINSTALL_PROFILES: 
    51         portal_setup.runAllImportStepsFromProfile('profile-%s' % extension_id, purge_old=False) 
    52         product_name = extension_id.split(':')[0] 
     54        portal_setup.runAllImportStepsFromProfile('profile-%s' % extension_id, 
     55                                                  purge_old=False) 
    5356        transaction.savepoint() 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/Extensions/__init__.py

    r865 r3437  
    1 # 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/__init__.py

    r873 r3437  
    33messageFactory = MessageFactory('quintagroup.plonetabs') 
    44 
     5 
    56def initialize(context): 
    67    pass 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/__init__.py

    r43 r3437  
    1 # I'm a package 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/interfaces.py

    r775 r3437  
    11from zope.interface import Interface, Attribute 
     2 
    23 
    34class IPloneTabsControlPanel(Interface): 
    45    """Configlet for managing portal_actions, quintagroup.plonetabs""" 
    5      
     6 
    67    prefix = Attribute('prefix', 'Prefix to apply on edit forms') 
    78    sufix = Attribute('sufix', 'Sufix to apply on edit forms') 
    8      
     9 
    910    def getPageTitle(category='portal_tabs'): 
    1011        """Return Title for configlet page for given category""" 
    11      
     12 
    1213    def hasActions(category="portal_tabs"): 
    1314        """Whether there are actions in portal_actions with given category""" 
    14      
     15 
    1516    def getPortalActions(category="portal_tabs"): 
    1617        """Return portal actions with given category""" 
    17      
     18 
    1819    def isGeneratedTabs(): 
    1920        """Whether disable_folder_section field is turned off""" 
    20      
     21 
    2122    def isNotFoldersGenerated(): 
    2223        """Whether disable_nonfolderish_sections field is turned off""" 
    23      
     24 
    2425    def getActionsList(category="portal_tabs"): 
    2526        """Return html code for actions list with given category""" 
    26      
     27 
    2728    def getAutoGenereatedSection(cat_name, errors): 
    2829        """Return html code for all autogenerated section""" 
    29      
     30 
    3031    def getGeneratedTabs(): 
    3132        """Return html code for autogenerated tabs""" 
    32      
     33 
    3334    def getRootTabs(): 
    3435        """Return portal root elements""" 
    35      
     36 
    3637    def getCategories(): 
    3738        """Return list of categories contained in portal_actions tool""" 
    38      
     39 
    3940    def portal_tabs(): 
    4041        """See global-sections viewlet""" 
    41      
     42 
    4243    def selected_portal_tab(): 
    4344        """See global-sections viewlet""" 
    44      
     45 
    4546    def test(condition, ifTrue, ifFalse): 
    4647        """Instead of test function in skins page templates""" 
    47      
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/browser/plonetabs.py

    r3244 r3437  
    2424from Products.statusmessages.interfaces import IStatusMessage 
    2525 
    26 from quintagroup.plonetabs.config import * 
     26from quintagroup.plonetabs.config import PROPERTY_SHEET, FIELD_NAME 
    2727from quintagroup.plonetabs import messageFactory as _ 
    2828from interfaces import IPloneTabsControlPanel 
     
    3939cookie_name = 'ploneTabsMode' 
    4040 
     41 
    4142class PloneTabsControlPanel(PloneKSSView): 
    4243 
     
    6061        postback = True 
    6162        errors = {} 
    62         context = aq_inner(self.context) 
    6363 
    6464        form = self.request.form 
    65         action = form.get("action", "") 
    6665        submitted = form.get('form.submitted', False) 
    6766 
     
    148147            IStatusMessage(self.request).addStatusMessage( 
    149148                _(u"'${id}' action successfully added.", 
    150                   mapping={'id':action.id}), type="info") 
     149                  mapping={'id': action.id}), type="info") 
    151150            self.redirect(search="category=%s" % cat_name) 
    152151            return False 
     
    179178        else: 
    180179            errs.update(self.processErrors(errors, 
    181                 sufix='_%s' % id)) # add edit form sufix to error ids 
     180                sufix='_%s' % id))  # add edit form sufix to error ids 
    182181            IStatusMessage(self.request).addStatusMessage( 
    183182                _(u"Please correct the indicated errors."), type="error") 
     
    214213            self.moveAction(id, cat_name, steps=1) 
    215214            IStatusMessage(self.request).addStatusMessage( 
    216                 _(u"'${id}' action moved up.", mapping={'id': id}), type="info") 
     215               _(u"'${id}' action moved up.", mapping={'id': id}), type="info") 
    217216            self.redirect(search="category=%s" % cat_name) 
    218217            return False 
     
    247246        """Redirect to @@plonetabs-controlpanel configlet""" 
    248247        if not url: 
    249             portal_url =  getMultiAdapter((self.context, self.request), 
     248            portal_url = getMultiAdapter((self.context, self.request), 
    250249                name=u"plone_portal_state").portal_url() 
    251250            url = '%s/%s' % (portal_url, "@@plonetabs-controlpanel") 
     
    302301        """See interface""" 
    303302        tool = getToolByName(self.context, "portal_actions") 
    304         return len(tool.listActions(categories=[category,])) > 0 
     303        return len(tool.listActions(categories=[category, ])) > 0 
    305304 
    306305    def getPortalActions(self, category="portal_tabs"): 
     
    322321        site_properties = getToolByName(self.context, 
    323322                                        "portal_properties").site_properties 
    324         return not site_properties.getProperty("disable_folder_sections", False) 
     323        return not site_properties.getProperty("disable_folder_sections", 
     324                                               False) 
    325325 
    326326    def isNotFoldersGenerated(self): 
     
    364364        query = {} 
    365365        rootPath = getNavigationRoot(context) 
    366         query['path'] = {'query' : rootPath, 'depth' : 1} 
     366        query['path'] = {'query': rootPath, 'depth': 1} 
    367367        query['portal_type'] = utils.typesToList(context) 
    368368 
     
    388388        excludedIds = {} 
    389389        for id in idsNotToList: 
    390             excludedIds[id]=1 
     390            excludedIds[id] = 1 
    391391 
    392392        rawresult = portal_catalog.searchResults(**query) 
     
    396396            if not excludedIds.has_key(item.getId): 
    397397                id, item_url = get_view_url(item) 
    398                 data = {'name'       : utils.pretty_title_or_id(context, item), 
    399                         'id'         : id, 
    400                         'url'        : item_url, 
     398                data = {'name': utils.pretty_title_or_id(context, item), 
     399                        'id': id, 
     400                        'url': item_url, 
    401401                        'description': item.Description, 
    402                         'exclude_from_nav' : item.exclude_from_nav} 
     402                        'exclude_from_nav': item.exclude_from_nav} 
    403403                result.append(data) 
    404404 
     
    426426    def portal_tabs(self): 
    427427        """See global-sections viewlet""" 
    428         actions = context_state = getMultiAdapter((self.context, self.request), 
    429             name=u"plone_context_state").actions() 
     428        actions = getMultiAdapter((self.context, self.request), 
     429                                   name=u'plone_context_state').actions() 
     430        actions_tabs = [] 
     431        try: 
     432            # Plone 4 and higher 
     433            import plone.app.upgrade 
     434            plone.app.upgrade  # pyflakes 
     435        except ImportError: 
     436            actions_tabs = actions 
     437        if not actions_tabs and 'portal_tabs' in actions: 
     438            actions_tabs = actions['portal_tabs'] 
     439 
    430440        portal_tabs_view = getMultiAdapter((self.context, self.request), 
    431441            name="portal_tabs_view") 
    432         if 'portal_tabs' in actions: 
    433             actions_tabs = actions['portal_tabs'] 
    434         else: 
    435             actions_tabs = [] 
    436442        return portal_tabs_view.topLevelTabs(actions=actions_tabs) 
    437443 
     
    513519        ksscore = self.getCommandSet("core") 
    514520        content = self.getGeneratedTabs() 
    515         ksscore.replaceInnerHTML(ksscore.getHtmlIdSelector('roottabs'), content) 
     521        ksscore.replaceInnerHTML(ksscore.getHtmlIdSelector('roottabs'), 
     522                                 content) 
    516523 
    517524        # update global-sections viewlet 
     
    531538 
    532539        if obj_id not in portal.objectIds(): 
    533             raise KSSExplicitError, \ 
    534                   _(u"Object with '${id}' id doesn't exist in portal root.", 
    535                     mapping={'id': obj_id}) 
     540            raise KSSExplicitError("Object with %s id doesn't" +\ 
     541                                   " exist in portal root." % obj_id) 
    536542 
    537543        if checked == '1': 
     
    548554                value="invisible") 
    549555            message = _(u"'${id}' object was included into navigation.", 
    550                         mapping={'id':obj_id}) 
     556                        mapping={'id': obj_id}) 
    551557        else: 
    552558            ksscore.addClass(ksscore.getHtmlIdSelector(id), value="invisible") 
    553559            message = _(u"'${id}' object was excluded from navigation.", 
    554                         mapping={'id':obj_id}) 
     560                        mapping={'id': obj_id}) 
    555561 
    556562        # update global-sections viewlet 
     
    574580                value="invisible") 
    575581            message = _(u"'${id}' action is now visible.", 
    576                         mapping={'id':act_id}) 
     582                        mapping={'id': act_id}) 
    577583        else: 
    578584            ksscore.addClass(ksscore.getHtmlIdSelector(id), value="invisible") 
    579585            message = _(u"'${id}' action is now invisible.", 
    580                         mapping={'id':act_id}) 
     586                        mapping={'id': act_id}) 
    581587        self.updatePage(cat_name) 
    582588 
     
    602608        # issue portal status message 
    603609        self.kss_issueMessage(_(u"'${id}' action successfully removed.", 
    604                                 mapping={'id':act_id})) 
     610                                mapping={'id': act_id})) 
    605611 
    606612    @kssaction 
     
    615621        # if not errors find (or create) category and set action to it 
    616622        ksscore = self.getCommandSet('core') 
    617         kssplone = self.getCommandSet('plone') 
    618623        if not errors: 
    619624            action = self.addAction(cat_name, data) 
     
    621626            # update client 
    622627            # add one more action to actions list 
    623             content = self.getActionsList(category=cat_name, tabs=[action,]) 
    624             ksscore.insertHTMLAsLastChild(ksscore.getHtmlIdSelector('tabslist'), 
    625                  content) 
     628            content = self.getActionsList(category=cat_name, tabs=[action, ]) 
     629            ksscore.insertHTMLAsLastChild( 
     630                                         ksscore.getHtmlIdSelector('tabslist'), 
     631                                         content) 
    626632 
    627633            # update reorder controls 
     
    646652 
    647653            message = _(u"'${id}' action successfully added.", 
    648                         mapping={'id':action.id}) 
     654                        mapping={'id': action.id}) 
    649655            msgtype = "info" 
    650656 
     
    655661            if errors.has_key('id') or errors.has_key('available_expr'): 
    656662                self.kss_toggleCollapsible( 
    657                     ksscore.getCssSelector('form[name=addaction_form] ' 
    658                                            '.headerAdvanced'), collapse='false') 
     663                   ksscore.getCssSelector('form[name=addaction_form] ' 
     664                                          '.headerAdvanced'), collapse='false') 
    659665 
    660666            message = _(u"Please correct the indicated errors.") 
     
    678684        # collapse advanced section 
    679685        self.kss_toggleCollapsible( 
    680             ksscore.getCssSelector('form[name=addaction_form] .headerAdvanced'), 
    681             collapse='true') 
     686           ksscore.getCssSelector('form[name=addaction_form] .headerAdvanced'), 
     687                                  collapse='true') 
    682688 
    683689        # reset form inputs 
     
    705711        # update client 
    706712        ksscore = self.getCommandSet("core") 
    707         content = self.getActionsList(category=cat_name, tabs=[action_info,]) 
     713        content = self.getActionsList(category=cat_name, tabs=[action_info, ]) 
    708714        ksscore.replaceHTML(ksscore.getHtmlIdSelector(id), content) 
    709715 
     
    722728        # update client 
    723729        ksscore = self.getCommandSet("core") 
    724         content = self.getActionsList(category=cat_name, tabs=[action,]) 
     730        content = self.getActionsList(category=cat_name, tabs=[action, ]) 
    725731        ksscore.replaceHTML(ksscore.getHtmlIdSelector(id), content) 
    726732 
     
    743749        html_id = '%s%s%s' % (self.prefix, id, self.sufix) 
    744750        ksscore = self.getCommandSet('core') 
    745         kssplone = self.getCommandSet('plone') 
    746751        if not errors: 
    747752            action = self.updateAction(id, cat_name, data) 
     
    749754            # update client 
    750755            # replace action item with updated one 
    751             content = self.getActionsList(category=cat_name, tabs=[action,]) 
     756            content = self.getActionsList(category=cat_name, tabs=[action, ]) 
    752757            ksscore.replaceHTML(ksscore.getHtmlIdSelector(html_id), content) 
    753758 
    754759            message = _(u"'${id}' action successfully updated.", 
    755                         mapping={'id':action.id}) 
     760                        mapping={'id': action.id}) 
    756761            msgtype = "info" 
    757762 
     
    820825    def copyAction(self, action): 
    821826        """Copy action to dictionary""" 
    822         action_info = {'description':action.description} 
     827        action_info = {'description': action.description} 
    823828        for attr in ACTION_ATTRS: 
    824829            action_info[attr] = getattr(action, attr) 
     
    842847            chooser.checkName(data['id'], self.context) 
    843848        except Exception, e: 
    844             errors['id'] = self._formatError(e, **{'id':data['id']}) 
     849            errors['id'] = self._formatError(e, **{'id': data['id']}) 
    845850 
    846851        # validate action name 
     
    968973            category = self.getActionCategory(cat_name) 
    969974        except Exception: 
    970             raise KSSExplicitError, \ 
    971                   _(u"'${cat_name}' action category does not exist.", 
    972                     mapping={'cat_name': cat_name}) 
     975            raise KSSExplicitError(u"%s action category does not exist." %\ 
     976                                   cat_name) 
    973977 
    974978        # extract action id from given list item id on client 
     
    978982            action = category[action_id] 
    979983        except Exception: 
    980             raise KSSExplicitError, \ 
    981                   _(u"No '${id}' action in '${cat_name}' category.", 
    982                     mapping={'id': action_id, 'cat_name': cat_name}) 
     984            raise KSSExplicitError("No %s action in %s category." %\ 
     985                                              (action_id, cat_name)) 
    983986 
    984987        return (action_id, category, action) 
     
    10011004                '.error-container' % (id, UI_ATTRS.get(name, name))) 
    10021005        else: 
    1003             field_selector = ksscore.getCssSelector('form[name=addaction_form] ' 
     1006            field_selector = ksscore.getCssSelector('form' +\ 
     1007                '[name=addaction_form] ' 
    10041008                '.field-%s' % UI_ATTRS.get(name, name)) 
    10051009            field_error_selector = ksscore.getCssSelector('form[name=' 
     
    10231027                                           selector) 
    10241028        if collapsed is not None: 
    1025             data = command.addParam('collapsed', collapsed) 
     1029            command.addParam('collapsed', collapsed) 
    10261030        if expanded is not None: 
    1027             data = command.addParam('expanded', expanded) 
     1031            command.addParam('expanded', expanded) 
    10281032        if collapse is not None: 
    1029             data = command.addParam('collapse', collapse) 
     1033            command.addParam('collapse', collapse) 
    10301034 
    10311035    def kss_resetForm(self, selector): 
    10321036        """KSS Server command to reset form on client""" 
    1033         command = self.commands.addCommand('plonetabs-resetForm', selector) 
    10341037 
    10351038    def kss_blur(self, selector): 
    10361039        """KSS Server command to remove focus from input""" 
    1037         command = self.commands.addCommand('plonetabs-blur', selector) 
     1040        self.commands.addCommand('plonetabs-blur', selector) 
    10381041 
    10391042    def kss_replaceOrInsert(self, selector, parentSelector, html, 
     
    10441047        command = self.commands.addCommand('plonetabs-replaceOrInsert', 
    10451048            selector) 
    1046         data = command.addParam('selector', parentSelector) 
    1047         data = command.addHtmlParam('html', html) 
    1048         data = command.addParam('withKssSetup', withKssSetup) 
     1049        command.addParam('selector', parentSelector) 
     1050        command.addHtmlParam('html', html) 
     1051        command.addParam('withKssSetup', withKssSetup) 
    10491052        if alternativeHTML: 
    1050             data = command.addHtmlParam('alternativeHTML', alternativeHTML) 
     1053            command.addHtmlParam('alternativeHTML', alternativeHTML) 
    10511054        if selectorType: 
    1052             data = command.addParam('selectorType', selectorType) 
     1055            command.addParam('selectorType', selectorType) 
    10531056        if position: 
    1054             data = command.addParam('position', position) 
     1057            command.addParam('position', position) 
    10551058        if positionSelector: 
    1056             data = command.addParam('positionSelector', positionSelector) 
     1059            command.addParam('positionSelector', positionSelector) 
    10571060        if positionSelectorType: 
    1058             data = command.addParam('positionSelectorType', 
    1059                                     positionSelectorType) 
     1061            command.addParam('positionSelectorType', 
     1062                              positionSelectorType) 
    10601063 
    10611064    def kss_issueMessage(self, message, msgtype="info"): 
    10621065        """"Issues portal status message and removes it afte 10 seconds""" 
    10631066        ksscore = self.getCommandSet('core') 
    1064         self.getCommandSet('plone').issuePortalMessage(message, msgtype=msgtype) 
     1067        self.getCommandSet('plone').issuePortalMessage(message, 
     1068                                                       msgtype=msgtype) 
    10651069        self.kss_timeout( 
    10661070            ksscore.getHtmlIdSelector('kssPortalMessage'), 
     
    10711075    def kss_timeout(self, selector, **kw): 
    10721076        """KSS Server command to execute plonetabs-timeout client action""" 
    1073         command = self.commands.addCommand('plonetabs-timeout', selector, **kw) 
     1077        self.commands.addCommand('plonetabs-timeout', selector, **kw) 
    10741078 
    10751079    def renderViewlet(self, manager, name): 
     
    11171121        """Delete action with given id from given category""" 
    11181122        category = self.getActionCategory(cat_name) 
    1119         category.manage_delObjects(ids=[id,]) 
     1123        category.manage_delObjects(ids=[id, ]) 
    11201124        return True 
    11211125 
     
    11251129            category = self.getActionCategory(cat_name) 
    11261130            if steps > 0: 
    1127                 category.moveObjectsUp([id,], steps) 
     1131                category.moveObjectsUp([id, ], steps) 
    11281132            else: 
    1129                 category.moveObjectsDown([id,], abs(steps)) 
     1133                category.moveObjectsDown([id, ], abs(steps)) 
    11301134            return True 
    11311135        return False 
     
    11701174        #ksszope = self.getCommandSet("zope") 
    11711175        #ksszope.refreshViewlet( 
    1172             #self.getCommandSet("core").getHtmlIdSelector("portal-siteactions"), 
    1173             #"plone.portalheader", 
    1174             #"plone.site_actions") 
     1176           #self.getCommandSet("core").getHtmlIdSelector("portal-siteactions"), 
     1177           #"plone.portalheader", 
     1178           #"plone.site_actions") 
    11751179 
    11761180    def updateUserPageSection(self): 
     
    11831187            "plone.personal_bar") 
    11841188 
     1189 
    11851190class PloneTabsMode(BrowserView): 
    11861191 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/config.py

    r478 r3437  
    11PROPERTY_SHEET = "tabs_properties" 
    2 FIELD_NAME     = "titles" 
     2FIELD_NAME = "titles" 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/interfaces.py

    r815 r3437  
    11from zope.interface import Interface 
     2 
    23 
    34class IPloneTabsProductLayer(Interface): 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/plugins/__init__.py

    r43 r3437  
    1 # I'm a package 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/setuphandlers.py

    r865 r3437  
    11from Products.CMFCore.utils import getToolByName 
     2 
    23 
    34def cleanUpControlPanel(portal, out): 
     
    78        out.append('plonetabs configlet unregistered.') 
    89 
     10 
    911def uninstall(context): 
    1012    # Only run step if a flag file is present (e.g. not an extension profile) 
     
    1315    out = [] 
    1416    site = context.getSite() 
    15      
     17 
    1618    cleanUpControlPanel(site, out) 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/__init__.py

    r756 r3437  
    1 # 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/base.py

    r865 r3437  
    11try: 
    22    from zope.annotation.interfaces import IAnnotations 
     3    IAnnotations  # pyflakes 
    34except ImportError: 
    45    from zope.app.annotation.interfaces import IAnnotations 
    5  
    66from plone.browserlayer.layer import mark_layer 
    77 
    88from  Testing import ZopeTestCase as ztc 
    99from  Products.Five import zcml 
    10 from  Products.Five import fiveconfigure 
    1110from Products.CMFCore.utils import getToolByName 
    12 from Products.CMFCore.interfaces import IAction, IActionCategory 
    1311from Products.CMFCore.ActionInformation import Action, ActionCategory 
    1412from  Products.PloneTestCase import PloneTestCase as ptc 
     
    1816 
    1917#ztc.installProduct('Zope2Product') 
     18 
    2019 
    2120@onsetup 
     
    2726 
    2827setup_package() 
     28if ptc.PLONE30: 
     29    ptc.setupPloneSite(products=["plone.browserlayer"]) 
    2930ptc.setupPloneSite(products=['quintagroup.plonetabs']) 
    3031 
    3132_marker = object() 
    3233 
     34 
    3335class PloneTabsTestCase(ptc.PloneTestCase): 
    3436    """Common test base class""" 
    35      
     37 
    3638    def afterSetUp(self): 
    3739        # due to some reason plone.browserlayer is not marking REQUEST 
    3840        # with installed products layer interfaces 
    39         # so I'm doing it manually here  
     41        # so I'm doing it manually here 
    4042        class DummyEvent(object): 
    4143            def __init__(self, request): 
    4244                self.request = request 
    4345        mark_layer(self.portal, DummyEvent(self.portal.REQUEST)) 
    44      
     46 
    4547    def purgeCache(self, request): 
    4648        annotations = IAnnotations(request) 
     
    4850        if cache is not _marker: 
    4951            del annotations['plone.memoize'] 
    50      
     52 
    5153    def purgeActions(self): 
    5254        for obj in self.tool.objectValues(): 
     
    5658            #elif IActionCategory.providedBy(obj): 
    5759                #obj.manage_delObjects(ids=obj.objectIds()) 
    58      
     60 
    5961    def setupActions(self, parent, kids=PORTAL_ACTIONS): 
    6062        ids = parent.objectIds() 
     
    6870                if child.get('children', {}): 
    6971                    self.setupActions(getattr(parent, id), child['children']) 
    70      
     72 
    7173    def purgeContent(self): 
    7274        ids = [obj.id for obj in self.portal.listFolderContents()] 
    7375        self.portal.manage_delObjects(ids=ids) 
    74      
     76 
    7577    def setupContent(self, parent, kids=PORTAL_CONTENT): 
    7678        ids = parent.objectIds() 
     
    8082            if child.get('children', {}) and id in ids: 
    8183                self.setupContent(getattr(parent, id), child['children']) 
    82      
     84 
    8385    def _createType(self, container, portal_type, id, **kwargs): 
    8486        """Helper method to create content objects""" 
    8587        ttool = getToolByName(container, 'portal_types') 
    86         portal_catalog =  getToolByName(container, 'portal_catalog') 
    87      
     88        portal_catalog = getToolByName(container, 'portal_catalog') 
     89 
    8890        fti = ttool.getTypeInfo(portal_type) 
    8991        fti.constructInstance(container, id, **kwargs) 
    9092        obj = getattr(container.aq_inner.aq_explicit, id) 
    91      
     93 
    9294        # publish and reindex 
    9395        #self._publish_item(portal, obj) 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/ecmaunits/__init__.py

    r884 r3437  
    1 # 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/ecmaunits/ecmaview.py

    r884 r3437  
    22from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile 
    33from kss.core.tests.ecmaview import EcmaView as base 
     4 
    45 
    56def absolute_dir(path): 
     
    78    return os.path.abspath(os.path.join(here, path)) 
    89 
     10 
    911class EcmaView(base): 
    1012    '''quintagroup.plonetabs js test view 
    11      
     13 
    1214    This allows the runner.html to be used on this view. 
    1315 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/selenium/__init__.py

    r818 r3437  
    1 # 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/selenium/zopeconfig.py

    r818 r3437  
    44    KSSSeleniumTestCase 
    55 
    6 from plone.app.kss.demo.zopeconfig import PloneSiteLayer, \ 
    7     LoggedInManagerLayer, LoggedInUserLayer, IResource 
     6from plone.app.kss.demo.zopeconfig import LoggedInManagerLayer, IResource 
    87 
    98 
     
    1413# for your own programs, or otherwise you will need to change 
    1514# it later. The test suite creation interface will change in 
    16 # the next kss.demo versions. The plugin class (PloneDemos)  
    17 # will change in the next major KSS (and possibly Plone) version.  
     15# the next kss.demo versions. The plugin class (PloneDemos) 
     16# will change in the next major KSS (and possibly Plone) version. 
    1817# This configuration file will be kept up-to-date to these changes. 
    1918# 
     
    2625    teardown = KSSSeleniumTestCase('uninstall-tabs.html') 
    2726 
     27 
    2828class PloneTabsSeleniumKssTests(object): 
    2929    implements(IResource) 
     
    3333    selenium_tests = ( 
    3434        KSSSeleniumTestSuite( 
    35             tests = KSSSeleniumTestDirectory('selenium_tests/run_as_testmanager'), 
    36             layer = PortalTabsLayer, 
    37             component = 'quintagroup.plonetabs', 
    38             application = 'quintagroup.plonetabs', 
     35            tests=KSSSeleniumTestDirectory('selenium_tests/' +\ 
     36                                           'run_as_testmanager'), 
     37            layer=PortalTabsLayer, 
     38            component='quintagroup.plonetabs', 
     39            application='quintagroup.plonetabs', 
    3940        ), 
    4041    ) 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/test_controlpanel.py

    r917 r3437  
    66 
    77from Products.CMFCore.utils import getToolByName 
    8 from Products.CMFCore.ActionInformation import Action, ActionCategory 
     8from Products.CMFCore.ActionInformation import Action 
    99 
    1010from quintagroup.plonetabs import messageFactory as _ 
    1111from quintagroup.plonetabs.browser.interfaces import IPloneTabsControlPanel 
    12 from quintagroup.plonetabs.browser.plonetabs import PloneTabsControlPanel as ptp 
     12from quintagroup.plonetabs.browser.plonetabs \ 
     13                                      import PloneTabsControlPanel as ptp 
    1314from quintagroup.plonetabs.tests.base import PloneTabsTestCase 
    1415from quintagroup.plonetabs.tests.data import PORTAL_ACTIONS 
    1516 
     17 
    1618class TestControlPanelHelperMethods(PloneTabsTestCase): 
    1719    """Test here configlet helper methods""" 
    18      
    1920    def afterSetUp(self): 
    2021        super(TestControlPanelHelperMethods, self).afterSetUp() 
     
    2526        self.panel = panel.__of__(self.portal) 
    2627        self.tool = getToolByName(self.portal, 'portal_actions') 
    27      
     28 
    2829    def test_redirect(self): 
    2930        response = self.portal.REQUEST.RESPONSE 
    3031        method = self.panel.redirect 
    31         portal_url =  getMultiAdapter((self.portal, self.portal.REQUEST), 
     32        portal_url = getMultiAdapter((self.portal, self.portal.REQUEST), 
    3233                                      name=u"plone_portal_state").portal_url() 
    3334        url = '%s/@@plonetabs-controlpanel' % portal_url 
     
    3536        self.assertEquals(response.headers.get('location', ''), url, 
    3637            'Redirect method is not working properly.') 
    37          
     38 
    3839        # check query string and anchor hash 
    3940        method('http://quintagroup.com', 'q=test', 'hash_code') 
     
    4142            'http://quintagroup.com?q=test#hash_code', 
    4243            'Redirect method is not working properly.') 
    43      
     44 
    4445    def test_fixExpression(self): 
    4546        method = self.panel.fixExpression 
    4647        self.assertEquals(method('/slash'), 'string:${portal_url}/slash') 
    47         self.assertEquals(method('https://test.com'), 'string:https://test.com') 
     48        self.assertEquals(method('https://test.com'), 
     49                                 'string:https://test.com') 
    4850        self.assertEquals(method('python:True'), 'python:True') 
    4951        self.assertEquals(method('hello'), 'string:${object_url}/hello') 
    50      
     52 
    5153    def test_copyAction(self): 
    5254        data = PORTAL_ACTIONS[0][1]['children'][0][1] 
     
    5557        self.assertEquals(len(info.keys()), 6) 
    5658        self.assertEquals(info['description'], 'The most important place') 
    57      
     59 
    5860    def test_validateActionFields(self): 
    5961        method = self.panel.validateActionFields 
     
    6365        self.assertEquals(errors, {}, 
    6466            'There should be no errors for valid data.') 
    65          
    66         bad_data = {'id':'', 
     67 
     68        bad_data = {'id': '', 
    6769                    'title': ' ', 
    6870                    'available_expr': 'bad_type:test', 
    6971                    'url_expr': 'bad_type:test'} 
    70          
     72 
    7173        # Revert PloneTestCase's optimization 
    7274        # because this breaks our test 
     75        from Products.CMFCore.Expression import getEngine 
     76        from Products.CMFCore.Expression import Expression 
     77 
    7378        def __init__(self, text): 
    7479            self.text = text 
    7580            if text.strip(): 
    7681                self._v_compiled = getEngine().compile(text) 
    77         from Products.CMFCore.Expression import Expression 
     82 
    7883        optimized__init__ = Expression.__init__ 
    7984        Expression.__init__ = __init__ 
     
    8186        # rollback our patch 
    8287        Expression.__init__ = optimized__init__ 
    83          
     88 
    8489        self.assertEquals(len(errors.keys()), 4, 
    8590            'validateActionFields method is not working properly.') 
    86      
     91        #### pyflakes.scripts.pyflakes ends. 
     92 
    8793    def test_processErrors(self): 
    8894        method = self.panel.processErrors 
    89         errors = {'error':'error message'} 
     95        errors = {'error': 'error message'} 
    9096        self.assertEquals(method(errors), errors, 
    9197            'processErrors method is not working properly.') 
     
    9399            {'pre_error_post': 'error message'}, 
    94100            'processErrors method is not working properly.') 
    95      
     101 
    96102    def test_parseEditForm(self): 
    97103        method = self.panel.parseEditForm 
     
    110116                             'visible': True}), 
    111117            'parseEditForm method is not working properly.') 
    112          
     118 
    113119        del form['orig_id'] 
    114120        self.failUnlessRaises(KeyError, method, form) 
    115      
     121 
    116122    def test_parseAddForm(self): 
    117123        method = self.panel.parseAddForm 
     
    129135                             'available_expr': 'expr2'}), 
    130136            'parseAddForm method is not working properly.') 
    131          
     137 
    132138        del form['id'] 
    133139        self.failUnlessRaises(KeyError, method, form) 
    134      
     140 
    135141    def test_getActionCategory(self): 
    136142        method = self.panel.getActionCategory 
    137143        self.purgeActions() 
    138144        self.failUnlessRaises(KeyError, method, 'portal_tabs') 
    139          
     145 
    140146        self.setupActions(self.tool) 
    141147        self.assertEquals(method('portal_tabs').id, 'portal_tabs', 
    142148            'getActionCategory is not working properly.') 
    143      
     149 
    144150    def test_getOrCreateCategory(self): 
    145151        method = self.panel.getOrCreateCategory 
     
    147153        self.assertEquals(method('portal_tabs').id, 'portal_tabs', 
    148154            'getOrCreateCategory is not working properly.') 
    149      
     155 
    150156    def test_setSiteProperties(self): 
    151157        self.panel.setSiteProperties(title='Test Title') 
     
    153159        self.assertEquals(sp.getProperty('title'), 'Test Title', 
    154160            'setSiteProperties method is not working properly.') 
    155      
     161 
    156162    def test_renderViewlet(self): 
    157163        # register test viewlet and it's manager 
     
    161167        from zope.publisher.interfaces.browser import IDefaultBrowserLayer 
    162168        from zope.publisher.interfaces.browser import IBrowserView 
     169 
    163170        class TestViewlet(ViewletBase): 
    164171            def __of__(self, obj): 
    165172                return self 
     173 
    166174            def render(self): 
    167175                return 'test viewlet' 
     176 
    168177        provideAdapter( 
    169178            TestViewlet, 
     
    176185            IViewletManager, 
    177186            name=u'test_manager') 
    178          
     187 
    179188        self.assertEquals( 
    180189            self.panel.renderViewlet('test_manager', 'test_viewlet'), 
    181190            'test viewlet', 
    182191            'renderViewlet method is not workig properly') 
    183      
     192 
    184193    def test_addAction(self): 
    185194        self.purgeActions() 
    186         self.panel.addAction('new_category', {'id':'id1', 'title':'Test'}) 
     195        self.panel.addAction('new_category', {'id': 'id1', 'title': 'Test'}) 
    187196        self.failUnless('id1' in self.tool.new_category.objectIds(), 
    188197            'addAction method is not workig properly') 
    189      
     198 
    190199    def test_updateAction(self): 
    191200        method = self.panel.updateAction 
    192          
    193         self.purgeActions() 
    194         self.failUnlessRaises(KeyError, method, 'id1', 'cat1', {'id':'new'}) 
    195          
     201 
     202        self.purgeActions() 
     203        self.failUnlessRaises(KeyError, method, 'id1', 'cat1', {'id': 'new'}) 
     204 
    196205        self.setupActions(self.tool) 
    197206        # we need to commit transaction because 
     
    199208        import transaction 
    200209        transaction.savepoint() 
    201         method('home', 'portal_tabs', {'id':'new_home'}) 
     210        method('home', 'portal_tabs', {'id': 'new_home'}) 
    202211        self.failUnless('new_home' in self.tool.portal_tabs.objectIds(), 
    203212            'updateAction method is not workig properly') 
    204      
     213 
    205214    def test_deleteAction(self): 
    206215        self.purgeActions() 
     
    209218        self.failIf('home' in self.tool.portal_tabs.objectIds(), 
    210219             'deleteAction method is not workig properly') 
    211      
     220 
    212221    def test_moveAction(self): 
    213222        self.purgeActions() 
     
    223232class TestControlPanelAPIMethods(PloneTabsTestCase): 
    224233    """Test here interface methods of control panel class""" 
    225      
     234 
    226235    def afterSetUp(self): 
    227236        super(TestControlPanelAPIMethods, self).afterSetUp() 
     
    232241        self.panel = panel.__of__(self.portal) 
    233242        self.tool = getToolByName(self.portal, 'portal_actions') 
    234      
     243 
    235244    def test_interface(self): 
    236245        self.failUnless(IPloneTabsControlPanel.implementedBy(ptp), 
     
    238247        self.failUnless(verifyClass(IPloneTabsControlPanel, ptp), 
    239248            'PloneTabs control panel does not implement required interface.') 
    240      
     249 
    241250    def test_getPageTitle(self): 
    242251        self.assertEquals(self.panel.getPageTitle(), 
     
    247256              mapping={'cat_name': 'notexists'}), 
    248257            'getPageTitle method is broken') 
    249      
     258 
    250259    def test_hasActions(self): 
    251260        method = self.panel.hasActions 
     
    254263        self.failIf(method(), 
    255264            'There should be no portal_tab actions in portal') 
    256          
     265 
    257266        # setup our own actions 
    258267        self.setupActions(self.tool) 
    259268        self.failUnless(method(), 
    260269            'There should be portal_tab actions in portal') 
    261      
     270 
    262271    def test_getPortalActions(self): 
    263272        method = self.panel.getPortalActions 
     
    266275        self.assertEquals(len(method()), 0, 
    267276            'There should be no actions in portal_tabs category.') 
    268          
     277 
    269278        # setup our own actions 
    270279        self.setupActions(self.tool) 
    271280        self.assertEquals(len(method()), 2, 
    272281            'There should be 2 actions in portal_tabs category.') 
    273          
     282 
    274283        # marginal arguments 
    275284        self.assertEquals(len(method('notexistent_category')), 0, 
    276285            'There should be no actions for not existed category.') 
    277      
     286 
    278287    def test_isGeneratedTabs(self): 
    279288        method = self.panel.isGeneratedTabs 
     
    282291        sp.manage_changeProperties(disable_folder_sections=True) 
    283292        self.failIf(method(), 'But folder sections are disabled...') 
    284      
     293 
    285294    def test_isNotFoldersGenerated(self): 
    286295        method = self.panel.isNotFoldersGenerated 
     
    289298        sp.manage_changeProperties(disable_nonfolderish_sections=True) 
    290299        self.failIf(method(), 'But non folderish sections are disabled...') 
    291      
     300 
    292301    def test_getActionsList(self): 
    293302        method = self.panel.getActionsList 
     
    299308        self.failUnless('class="editform"' in method(), 
    300309            'There are no actions in actions list template.') 
    301      
     310 
    302311    def test_getAutoGenereatedSection(self): 
    303312        method = self.panel.getAutoGenereatedSection 
     
    308317            'There should be form in autogenerated tabs template ' 
    309318            'for portal_tabs category.') 
    310      
     319 
    311320    def test_getGeneratedTabs(self): 
    312321        self.panel.getGeneratedTabs() 
     
    316325            'Mon, 26 Jul 1996 05:00:00 GMT', 
    317326            'Expiration header is not set properly.') 
    318      
     327 
    319328    def test_getRootTabs(self): 
    320329        method = self.panel.getRootTabs 
     
    323332        self.assertEquals(len(method()), 0, 
    324333            'There should be no root elements for navigation.') 
    325          
     334 
    326335        # now add some testing content 
    327336        self.setupContent(self.portal) 
    328337        self.assertEquals(len(method()), 2, 
    329338            'There should be 2 elements in portal root for navigation.') 
    330          
     339 
    331340        # now switch off autogeneration 
    332341        sp = getToolByName(self.portal, 'portal_properties').site_properties 
     
    335344            'There should be no root elements for navigation when ' 
    336345            'tabs autogeneration is switched off.') 
    337      
     346 
    338347    def test_getCategories(self): 
    339348        method = self.panel.getCategories 
     
    342351        self.assertEquals(len(method()), 0, 
    343352            'There should be no categories in portal_actions tool.') 
    344          
     353 
    345354        # now setup actions 
    346355        self.setupActions(self.tool) 
    347356        self.assertEquals(method(), ['portal_tabs', 'new_category'], 
    348357            'There should be exactly 2 categories in portal_actions tool.') 
    349      
     358 
    350359    def test_portal_tabs(self): 
    351360        method = self.panel.portal_tabs 
     
    354363        self.assertEquals(len(method()), 0, 
    355364            'There should be no portal tabs.') 
    356          
     365 
    357366        # cleanup memoize cache 
    358367        # cause actions method of portal context state is caching it's 
    359368        # results in request and we have the same request for every call 
    360369        self.purgeCache(self.portal.REQUEST) 
    361          
     370 
    362371        # add actions 
    363372        self.setupActions(self.tool) 
    364373        self.assertEquals(len(method()), 2, 
    365374            'There should be 2 portal tabs.') 
    366          
     375 
    367376        # add content 
    368377        self.setupContent(self.portal) 
    369378        self.assertEquals(len(method()), 4, 
    370379            'There should be 4 portal tabs.') 
    371      
     380 
    372381    def test_selected_portal_tab(self): 
    373382        self.assertEquals(self.panel.selected_portal_tab(), 'index_html', 
     
    381390class TestControlPanelManageMethods(PloneTabsTestCase): 
    382391    """Test here management methods of control panel class""" 
    383      
     392 
    384393    def afterSetUp(self): 
    385394        super(TestControlPanelManageMethods, self).afterSetUp() 
     
    390399        self.panel = panel.__of__(self.portal) 
    391400        self.tool = getToolByName(self.portal, 'portal_actions') 
    392          
     401 
    393402        # purge standard set of actions and set our own testing ones 
    394403        self.purgeActions() 
    395404        self.setupActions(self.tool) 
    396      
     405 
    397406    def test_manage_setAutogeneration(self): 
    398407        self.setupContent(self.portal) 
     
    405414        self.failIf(sp.disable_folder_sections) 
    406415        self.failUnless(sp.disable_nonfolderish_sections) 
    407      
     416 
    408417    def test_manage_addAction(self): 
    409418        self.purgeActions() 
     
    418427        self.failIf(postback, 
    419428            'There should be redirect after successfull adding.') 
    420      
     429 
    421430    def test_manage_editAction(self): 
    422431        method = self.panel.manage_editAction 
     
    432441        import transaction 
    433442        transaction.savepoint() 
    434          
     443 
    435444        postback = method(form, {}) 
    436445        self.failUnless('id_new' in self.tool.portal_tabs.objectIds()) 
    437446        self.failIf(postback, 
    438447            'There should be redirect after successfull edition.') 
    439          
     448 
    440449        form['category'] = 'non_existent' 
    441450        self.failUnlessRaises(KeyError, method, form, {}) 
    442      
     451 
    443452    def test_manage_deleteAction(self): 
    444453        self.purgeActions() 
     
    453462        self.panel.manage_deleteAction(form, {}) 
    454463        self.failIf('home' in self.tool.portal_tabs.objectIds()) 
    455      
     464 
    456465    def test_manage_moveUpAction(self): 
    457466        self.purgeActions() 
     
    467476        self.assertEquals( 
    468477            self.tool.portal_tabs.getObjectPosition('quintagroup'), 0) 
    469      
     478 
    470479    def test_manage_moveDownAction(self): 
    471480        self.purgeActions() 
     
    487496    suite.addTest(unittest.makeSuite(TestControlPanelAPIMethods)) 
    488497    suite.addTest(unittest.makeSuite(TestControlPanelManageMethods)) 
    489      
     498 
    490499    # these tests are implemented as Selenium KSS Tests 
    491500    # using kss.demo package, and KSS plugins are tested by means of 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/test_erase.py

    r872 r3437  
    66from Testing import ZopeTestCase as ztc 
    77 
    8 from zope.component import getSiteManager 
     8from zope.app.component.hooks import setHooks, setSite 
    99 
    1010from plone.browserlayer.utils import registered_layers 
     
    1414 
    1515from quintagroup.plonetabs.tests.base import PloneTabsTestCase 
     16 
    1617 
    1718class TestErase(PloneTabsTestCase): 
     
    2324        @classmethod 
    2425        def setUp(cls): 
     26 
    2527            app = ztc.app() 
    2628            portal = app.plone 
     29 
     30            # change the active local site manager 
     31            setHooks() 
     32            setSite(portal) 
    2733 
    2834            # elevate permissions 
     
    3339            product_name = 'quintagroup.plonetabs' 
    3440            if tool.isProductInstalled(product_name): 
    35                 tool.uninstallProducts([product_name,]) 
     41                tool.uninstallProducts([product_name, ]) 
    3642 
    3743            # drop elevated perms 
     
    4349    def afterSetUp(self): 
    4450        self.loginAsPortalOwner() 
    45      
     51 
    4652    def test_actionIcons(self): 
    4753        tool = getToolByName(self.portal, 'portal_actionicons') 
     
    4955        self.failIf('plonetabs' in icon_ids, 
    5056            'There should be no plonetabs action icon after uninstall.') 
    51      
     57 
    5258    def test_controlPanel(self): 
    5359        tool = getToolByName(self.portal, 'portal_controlpanel') 
     
    5561        self.failIf('plonetabs' in action_ids, 
    5662            'There should be no plonetabs configlet after after uninstall.') 
    57      
     63 
    5864    def test_cssRegistry(self): 
    5965        tool = getToolByName(self.portal, 'portal_css') 
     
    6268            'There should be no ++resource++plonetabs.css stylesheets after' 
    6369            ' uninstall.') 
    64      
     70 
    6571    def test_jsRegistry(self): 
    6672        tool = getToolByName(self.portal, 'portal_javascripts') 
    67          
     73 
    6874        effects = tool.getResource('++resource++pt_effects.js') 
    6975        self.failUnless(effects is None, 
    7076            'There should be no ++resource++pt_effects.js script after' 
    7177            ' uninstall.') 
    72          
     78 
    7379        dad = tool.getResource('++resource++sa_dragdrop.js') 
    7480        self.failUnless(dad is None, 
     
    8692            'There should be no ++resource++plonetabsmode.kss sheets after' 
    8793            ' uninstall.') 
    88      
     94 
    8995    def test_propertiesTool(self): 
    9096        tool = getToolByName(self.portal, 'portal_properties') 
     
    99105            ' after uninstall.' 
    100106        ) 
    101      
     107 
    102108    def test_browserLayer(self): 
    103         sm = getSiteManager(self.portal) 
    104109        layers = [o.__name__ for o in registered_layers()] 
    105110        self.failIf('IPloneTabsProductLayer' in layers, 
    106111            'There should be no quintagroup.plonetabs layer after uninstall.') 
     112 
    107113 
    108114def test_suite(): 
  • quintagroup.plonetabs/trunk/quintagroup/plonetabs/tests/test_setup.py

    r872 r3437  
    11import unittest 
    2  
    3 from zope.component import getSiteManager 
    42 
    53from plone.browserlayer.utils import registered_layers 
     
    97from quintagroup.plonetabs.tests.base import PloneTabsTestCase 
    108 
     9 
    1110class TestSetup(PloneTabsTestCase): 
    12      
     11 
    1312    def afterSetUp(self): 
    1413        self.loginAsPortalOwner() 
    15      
     14 
    1615    def test_actionIcons(self): 
    1716        tool = getToolByName(self.portal, 'portal_actionicons') 
     
    1918        self.failUnless('plonetabs' in icon_ids, 
    2019            'There is no plonetabs action icon in actionicons tool.') 
    21      
     20 
    2221    def test_controlPanel(self): 
    2322        tool = getToolByName(self.portal, 'portal_controlpanel') 
     
    2524        self.failUnless('plonetabs' in action_ids, 
    2625            'There is no plonetabs action in control panel.') 
    27      
     26 
    2827    def test_cssRegistry(self): 
    2928        tool = getToolByName(self.portal, 'portal_css') 
     
    3130        self.failIf(css is None, 
    3231            'There is no ++resource++plonetabs.css stylesheets registered.') 
    33      
     32 
    3433    def test_jsRegistry(self): 
    3534        tool = getToolByName(self.portal, 'portal_javascripts') 
    36          
     35 
    3736        prototype = tool.getResource('++resource++prototype.js') 
    3837        self.failIf(prototype is None, 
     
    4039        self.failUnless(prototype._data['enabled'], 
    4140            '++resource++prototype.js script is disabled.') 
    42          
     41 
    4342        effects = tool.getResource('++resource++pt_effects.js') 
    4443        self.failIf(effects is None, 
    4544            'There is no ++resource++pt_effects.js script registered.') 
    46          
     45 
    4746        dad = tool.getResource('++resource++sa_dragdrop.js') 
    4847        self.failIf(dad is None, 
     
    5756        self.failIf(kss is None, 
    5857            'There is no ++resource++plonetabsmode.kss sheets registered.') 
    59      
     58 
    6059    def test_propertiesTool(self): 
    6160        tool = getToolByName(self.portal, 'portal_properties') 
     
    6867            'Site properties was not setup properly' 
    6968        ) 
    70      
     69 
    7170    def test_browserLayerRegistered(self): 
    72         sm = getSiteManager(self.portal) 
    7371        layers = [o.__name__ for o in registered_layers()] 
    7472        self.failUnless('IPloneTabsProductLayer' in layers, 
    7573            'There should be quintagroup.ploentabs browser layer registered.') 
     74 
    7675 
    7776def test_suite(): 
  • quintagroup.plonetabs/trunk/setup.py

    r3382 r3437  
    44from setuptools import setup, find_packages 
    55 
    6 version = '0.7' 
     6version = '0.7.1-dev' 
    77 
    88setup(name='quintagroup.plonetabs', 
     
    1212                       open(os.path.join("docs", "HISTORY.txt")).read(), 
    1313 
    14       # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers 
     14      # Get more strings from 
     15      # http://www.python.org/pypi?%3Aaction=list_classifiers 
    1516      classifiers=[ 
    1617        "Framework :: Plone", 
     
    2324      author='"Quintagroup": http://quintagroup.com/', 
    2425      author_email='support@quintagroup.com', 
    25       url='http://quintagroup.com/services/plone-development/products/plone-tabs', 
     26      url='http://quintagroup.com/' +\ 
     27          'services/plone-development/products/plone-tabs', 
    2628      license='GPL', 
    2729      packages=find_packages(exclude=['ez_setup']), 
     
    3133      install_requires=[ 
    3234          'setuptools', 
     35          'plone.browserlayer' 
    3336          # -*- Extra requirements: -*- 
    3437      ], 
Note: See TracChangeset for help on using the changeset viewer.