From ebb948451b9d983c6cbe12f05284951168f3c61e Mon Sep 17 00:00:00 2001 From: Kazuhiko Shiozaki <kazuhiko@nexedi.com> Date: Wed, 14 Feb 2007 06:05:28 +0000 Subject: [PATCH] * add some tests for SelectionTool. * getSelectionNames(): return an empty list instead of an empty tupple if empty. fix a bug that raises an error without selection_data. * remove bogus docstrings. * add some docstrings. * fix typos. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@12678 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Form/SelectionTool.py | 58 ++++-------- .../SelectionTool_manageViewSelections.dtml | 2 +- .../ERP5Form/dtml/explainSelectionTool.dtml | 2 +- product/ERP5Form/tests/testSelectionTool.py | 91 +++++++++++++++++++ 4 files changed, 113 insertions(+), 40 deletions(-) create mode 100644 product/ERP5Form/tests/testSelectionTool.py diff --git a/product/ERP5Form/SelectionTool.py b/product/ERP5Form/SelectionTool.py index 822bd2caaf..acb1b6ae83 100644 --- a/product/ERP5Form/SelectionTool.py +++ b/product/ERP5Form/SelectionTool.py @@ -4,10 +4,10 @@ # Jean-Paul Smets-Solanes <jp@nexedi.com> # # WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential +# programmers who take the whole responsibility of assessing all potential # consequences resulting from its eventual inadequacies and bugs # End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software +# guarantees and support are strongly adviced to contract a Free Software # Service Company # # This program is Free Software; you can redistribute it and/or @@ -120,14 +120,17 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'getSelectionNames') def getSelectionNames(self, context=None, REQUEST=None): + """ + Returns the selection names + """ if context is None: context = self if not REQUEST: REQUEST = get_request() - if hasattr(self, 'selection_data'): - user_id = self.portal_membership.getAuthenticatedMember().getUserName() + if hasattr(self, 'selection_data'): + user_id = self.portal_membership.getAuthenticatedMember().getUserName() if user_id is not None and self.selection_data.has_key(user_id): return self.selection_data[user_id].keys() - return () + return [] security.declareProtected(ERP5Permissions.View, 'callSelectionFor') def callSelectionFor(self, selection_name, context=None, REQUEST=None): @@ -237,7 +240,7 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'setSelectionCheckedUidsFor') def setSelectionCheckedUidsFor(self, selection_name, checked_uids, REQUEST=None): """ - Sets the selection params for a given selection_name + Sets the checked uids for a given selection_name """ selection_object = self.getSelectionFor(selection_name, REQUEST) if selection_object: @@ -248,7 +251,7 @@ class SelectionTool( UniqueObject, SimpleItem ): def updateSelectionCheckedUidList(self, selection_name, listbox_uid, uids, REQUEST=None): """ - Sets the selection params for a given selection_name + Updates the checked uids for a given selection_name """ if listbox_uid is None: listbox_uid = [] @@ -260,7 +263,7 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'getSelectionCheckedUidsFor') def getSelectionCheckedUidsFor(self, selection_name, REQUEST=None): """ - Sets the selection params for a given selection_name + Returns the checked uids for a given selection_name """ selection_object = self.getSelectionFor(selection_name, REQUEST) if selection_object: @@ -272,7 +275,7 @@ class SelectionTool( UniqueObject, SimpleItem ): def checkAll(self, selection_name, listbox_uid=[], REQUEST=None, query_string=None, form_id=None): """ - Sets the selection params for a given selection_name + Check uids in a given listbox_uid list for a given selection_name """ selection_object = self.getSelectionFor(selection_name, REQUEST) if selection_object: @@ -293,7 +296,7 @@ class SelectionTool( UniqueObject, SimpleItem ): def uncheckAll(self, selection_name, listbox_uid=[], REQUEST=None, query_string=None, form_id=None): """ - Sets the selection params for a given selection_name + Uncheck uids in a given listbox_uid list for a given selection_name """ selection_object = self.getSelectionFor(selection_name, REQUEST) if selection_object: @@ -476,7 +479,7 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'viewLast') def viewLast(self, selection_index='', selection_name='', form_id='view', REQUEST=None): """ - Access first item in a selection + Access last item in a selection """ if not REQUEST: REQUEST = get_request() @@ -592,9 +595,6 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'setPage') def setPage(self, list_selection_name, listbox_uid, query_string=None, uids=None, REQUEST=None): - """ - Access the previous page of a list - """ if uids is None: uids = [] selection = self.getSelectionFor(list_selection_name, REQUEST) params = selection.getParams() @@ -701,9 +701,6 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'unfoldDomain') def unfoldDomain(self, REQUEST, form_id=None, query_string=None): - """ - Sets the root domain for the current selection - """ selection_name = REQUEST.list_selection_name selection = self.getSelectionFor(selection_name, REQUEST) domain_url = REQUEST.form.get('domain_url',None) @@ -719,9 +716,6 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'foldDomain') def foldDomain(self, REQUEST, form_id=None, query_string=None): - """ - Sets the root domain for the current selection - """ selection_name = REQUEST.list_selection_name selection = self.getSelectionFor(selection_name, REQUEST) domain_url = REQUEST.form.get('domain_url',None) @@ -737,9 +731,6 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'setReportRoot') def setReportRoot(self, REQUEST, form_id=None, query_string=None): - """ - Sets the root domain for the current selection - """ selection_name = REQUEST.list_selection_name selection = self.getSelectionFor(selection_name, REQUEST) root_url = REQUEST.form.get('report_root_url','portal_categories') @@ -751,11 +742,6 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'unfoldReport') def unfoldReport(self, REQUEST, form_id=None, query_string=None): - """ - Sets the root domain for the current selection - - report_list is a list of relative_url of category, domain, etc. - """ selection_name = REQUEST.list_selection_name selection = self.getSelectionFor(selection_name, REQUEST) report_url = REQUEST.form.get('report_url',None) @@ -768,9 +754,6 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'foldReport') def foldReport(self, REQUEST, form_id=None, query_string=None): - """ - Sets the root domain for the current selection - """ selection_name = REQUEST.list_selection_name selection = self.getSelectionFor(selection_name, REQUEST) report_url = REQUEST.form.get('report_url',None) @@ -799,7 +782,7 @@ class SelectionTool( UniqueObject, SimpleItem ): selection_name=None, redirect=0, form_id=None, query_string=None): """ - Toogle display of the listbox + Toggle display of the listbox """ request = REQUEST # XXX FIXME @@ -941,7 +924,7 @@ class SelectionTool( UniqueObject, SimpleItem ): def getPickle(self,**kw): """ we give many keywords and we will get the corresponding - pickle string and signature + pickle string """ #LOG('getPickle kw',0,kw) # XXX Remove DateTime, This is really bad, only use for zope 2.6 @@ -973,7 +956,7 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'getObjectFromPickle') def getObjectFromPickle(self,pickle_string): """ - we give a pickle string and a signature + get object from a pickle string """ object = None pickle_string = pickle_string.replace('@@@','\n') @@ -987,7 +970,7 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'getObjectFromPickleAndSignature') def getObjectFromPickleAndSignature(self,pickle_string,signature): """ - we give a pickle string and a signature + get object from a pickle string only when a signature maches """ cookie_password = self._getCookiePassword() object = None @@ -1010,7 +993,7 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'registerCookieInfo') def setCookieInfo(self,request,cookie_name,**kw): """ - regiter info directly in cookie + register info directly in cookie """ cookie_name = cookie_name + '_cookie' (pickle_string,signature) = self.getPickleAndSignature(**kw) @@ -1021,7 +1004,7 @@ class SelectionTool( UniqueObject, SimpleItem ): security.declareProtected(ERP5Permissions.View, 'registerCookieInfo') def getCookieInfo(self,request,cookie_name): """ - regiter info directly in cookie + get info directly from cookie """ cookie_name = cookie_name + '_cookie' object = None @@ -1363,4 +1346,3 @@ for property_id in candidate_method_id_list: security_property = getattr(SelectionTool, security_property_id, None) if security_property is not None: setattr(FolderMixIn, security_property_id, security_property) - diff --git a/product/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml b/product/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml index c5c782622e..67a990e1a1 100644 --- a/product/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml +++ b/product/ERP5Form/dtml/SelectionTool_manageViewSelections.dtml @@ -7,7 +7,7 @@ )"> <p class="form-help"> This page show the active selections for the current user. - It is only usefull for debug purposes. + It is only useful for debug purposes. </p> <table cellspacing="0" cellpadding="2" border="1"> diff --git a/product/ERP5Form/dtml/explainSelectionTool.dtml b/product/ERP5Form/dtml/explainSelectionTool.dtml index b89107c1aa..2de4ae8212 100644 --- a/product/ERP5Form/dtml/explainSelectionTool.dtml +++ b/product/ERP5Form/dtml/explainSelectionTool.dtml @@ -3,7 +3,7 @@ <h3> <code>portal_selection</code> Tool </h3> -<p> This tool allows to manage persistant selections for listbox in ERP5. +<p> This tool allows to manage persistent selections for listbox in ERP5. </p> <dtml-var manage_page_footer> diff --git a/product/ERP5Form/tests/testSelectionTool.py b/product/ERP5Form/tests/testSelectionTool.py new file mode 100644 index 0000000000..367b712f91 --- /dev/null +++ b/product/ERP5Form/tests/testSelectionTool.py @@ -0,0 +1,91 @@ +############################################################################## +# +# Copyright (c) 2007 Nexedi SARL and Contributors. All Rights Reserved. +# Kazuhiko <kazuhiko@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsibility of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# guarantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +import os, sys +if __name__ == '__main__': + execfile(os.path.join(sys.path[0], 'framework.py')) + +# Needed in order to have a log file inside the current folder +os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log') +os.environ['EVENT_LOG_SEVERITY'] = '-300' + +from AccessControl.SecurityManagement import newSecurityManager,\ + getSecurityManager +from zLOG import LOG +from DateTime import DateTime +from Testing import ZopeTestCase +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase +from Products.ERP5Form.Document.Preference import Priority +from Products.ERP5Form.Selection import Selection + + +class TestSelectionTool(ERP5TypeTestCase): + quiet = 1 + run_all_tests = 1 + + def getTitle(self): + return "SelectionTool" + + def getBusinessTemplateList(self): + # Use the same framework as the functional testing for convenience. + # This adds some specific portal types and skins. + return ('erp5_ui_test',) + + def afterSetUp(self): + uf = self.getPortal().acl_users + uf._doAddUser('manager', '', ['Manager', 'Assignor'], []) + user = uf.getUserById('manager').__of__(uf) + newSecurityManager(None, user) + self.portal_selections = self.getPortal().portal_selections + self.portal_selections.setSelectionFor('test_selection', Selection()) + self.portal_selections.setSelectionParamsFor('test_selection', {'key':'value'}) + + def testGetSelectionNames(self, quiet=quiet, run=run_all_test): + if not run: return + self.assertEquals(['test_selection'], + self.portal_selections.getSelectionNames()) + + def testGetSelectionFor(self, quiet=quiet, run=run_all_test): + if not run: return + selection = self.portal_selections.getSelectionFor('test_selection') + self.assert_(isinstance(selection, Selection)) + self.assertEquals('test_selection', selection.name) + + def testGetSelectionParamsFor(self, quiet=quiet, run=run_all_test): + if not run: return + self.assertEquals({'key':'value'}, + self.portal_selections.getSelectionParamsFor('test_selection')) + +if __name__ == '__main__': + framework() +else: + import unittest + def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestSelectionTool)) + return suite -- 2.30.9