Skip to content

Commit

Permalink
Added tests, cleanup code
Browse files Browse the repository at this point in the history
  • Loading branch information
kroman0 committed Oct 17, 2013
1 parent 4f5e2e7 commit 814b438
Show file tree
Hide file tree
Showing 4 changed files with 186 additions and 68 deletions.
12 changes: 2 additions & 10 deletions quintagroup/plonetabs/browser/configure.zcml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser">

<include file="resources.zcml" />

<browser:page
name="plonetabs-controlpanel"
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
Expand All @@ -21,12 +21,4 @@
layer="quintagroup.plonetabs.interfaces.IPloneTabsProductLayer"
/>

<browser:page
name="plonetabs-mode"
for="*"
class=".plonetabs.PloneTabsMode"
permission="zope.Public"
layer="quintagroup.plonetabs.interfaces.IPloneTabsProductLayer"
/>

</configure>
64 changes: 27 additions & 37 deletions quintagroup/plonetabs/browser/plonetabs.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,19 @@
"description": "description",
"available_expr": "condition",
"visible": "visible"}
GENERATED_TABS_FIELDS = {
'disable_folder_sections': [
_(u"Generated tabs switched on."),
_(u"Generated tabs switched off.")
],
'disable_nonfolderish_sections': [
_(u"Generated tabs for items other than folders switched on."),
_(u"Generated tabs for items other than folders switched off.")
]
}

bad_id = re.compile(r'[^a-zA-Z0-9-_~,.$\(\)# @]').search

cookie_name = 'ploneTabsMode'


class PloneTabsControlPanel():

Expand All @@ -59,7 +67,6 @@ class PloneTabsControlPanel():
actionslist_template = ViewPageTemplateFile("templates/actionslist.pt")
autogenerated_template = ViewPageTemplateFile("templates/autogenerated.pt")
autogenerated_list = ViewPageTemplateFile("templates/autogeneratedlist.pt")
link_template = ViewPageTemplateFile("templates/changemodelink.pt")

# custom templates used to update page sections
sections_template = ViewPageTemplateFile("templates/sections.pt")
Expand All @@ -84,13 +91,6 @@ def __call__(self):
if submitted:
postback = self.submitted_postback(form, errors)

mode = self.request.get(cookie_name, False)
if mode in ('plain', 'rich'):
# set cookie to remember the choice
expires = (DateTime() + 365).toZone('GMT').rfc822()
self.request.response.setCookie(cookie_name, mode, path='/',
expires=expires)

if ajaxback:
self.request.response.setHeader("Content-type", "application/json")
return json.dumps(ajaxback)
Expand Down Expand Up @@ -195,19 +195,20 @@ def manage_ajax_toggleGeneratedTabs(self, form):
checked = form['generated_tabs']
field = form['field']

if not errors:
if field in GENERATED_TABS_FIELDS:
if checked == 'true':
self.setSiteProperties(**{field: False})
message = self.translate(_(u"Generated tabs switched on."))
message = self.translate(GENERATED_TABS_FIELDS[field][0])
else:
self.setSiteProperties(**{field: True})
message = self.translate(_(u"Generated tabs switched off."))
message = self.translate(GENERATED_TABS_FIELDS[field][1])
content = self.getGeneratedTabs()
resp_dict['content'] = content
resp_dict['status_code'] = 200
resp_dict['status_message'] = message
else:
resp_dict['status_message'] = errors
resp_dict['status_message'] = self.translate(
_("Invalid property name."))
resp_dict['status_code'] = 500
return resp_dict

Expand All @@ -227,8 +228,9 @@ def manage_ajax_toggleRootsVisibility(self, form):
obj_id = id[len("roottabs_"):]

if obj_id not in portal.objectIds():
errors.append(
"Object with %s id doesn't exist in portal root." % obj_id)
errors.append(self.translate(
_("Object with '${id}' id doesn't exist in portal root.",
mapping={'id': obj_id})))

checked = True if checked == 'true' else False

Expand Down Expand Up @@ -410,25 +412,25 @@ def manage_ajax_moveAction(self, form):

def manage_ajax_changeCategory(self, form):
resp_dict = {}
errors = []

"""Change action category to manage"""
cat_name = form['category']
# update actions list
resp_dict['actionslist'] = self.getActionsList(category=cat_name)
# update autogenerated sections
resp_dict['section'] = self.getAutoGenereatedSection(cat_name)
# and title
resp_dict['title'] = self.translate(self.getPageTitle(cat_name))

if not errors:
if cat_name in self.portal_actions.objectIds():
# update actions list
resp_dict['actionslist'] = self.getActionsList(category=cat_name)
# update autogenerated sections
resp_dict['section'] = self.getAutoGenereatedSection(cat_name)
# and title
resp_dict['title'] = self.translate(self.getPageTitle(cat_name))
resp_dict['status_code'] = 200
resp_dict['status_message'] = self.translate(
_("Category changed successfully."))
else:
resp_dict['status_code'] = 500
resp_dict['status_message'] = self.translate(
_("There was error while changed category"))
_(u"'${cat_name}' action category does not exist.",
mapping={'cat_name': cat_name}))

return resp_dict

Expand Down Expand Up @@ -1026,15 +1028,3 @@ def moveAction(self, id, cat_name, steps=0):
category.moveObjectsDown([id, ], abs(steps))
return True
return False


class PloneTabsMode(BrowserView):

def __call__(self):
mode = self.request.get(cookie_name, False)
if mode in ('plain', 'rich'):
return mode
mode = self.request.cookies.get(cookie_name, False)
if mode in ('plain', 'rich'):
return mode
return 'rich'
177 changes: 157 additions & 20 deletions quintagroup/plonetabs/tests/test_controlpanel.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,150 @@ def afterSetUp(self):
self.tool = getToolByName(self.portal, 'portal_actions')

def test_renderPanel(self):
form = self.panel.request.form
response = self.panel()
self.assertTrue('Portal Tabs Configuration' in response)
form['form.submitted'] = True
response = self.panel()
self.assertTrue('Portal Tabs Configuration' in response)
form['ajax_request'] = True
response = self.panel()
self.assertTrue('Portal Tabs Configuration' in response)
form['category'] = 'site_actions'
form['edit_cancel'] = 'Cancel'
form['orig_id'] = 'contact'
response = self.panel()
self.assertTrue('"status_code": 200' in response)

def test_ajax_toggleRootsVisibility(self):
form = {
'orig_id': 'roottabs_invalid',
'roottabs_visible': 'Visibillity',
'visibility': 'false'
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], ["Object with 'invalid' id doesn't exist in portal root."])
form['orig_id'] = 'roottabs_news'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], "'news' object was excluded from navigation.")
form['visibility'] = 'true'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], "'news' object was included into navigation.")

def test_ajax_toggleGeneratedTabs(self):
form = {
'field': 'invalid_property',
'generated_tabs': 'false'
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], "Invalid property name.")
form = {
'field': 'disable_folder_sections',
'generated_tabs': 'false'
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], "Generated tabs switched off.")
form['generated_tabs'] = 'true'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], "Generated tabs switched on.")
form = {
'field': 'disable_nonfolderish_sections',
'generated_tabs': 'false'
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], "Generated tabs for items other than folders switched off.")
form['generated_tabs'] = 'true'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], "Generated tabs for items other than folders switched on.")

def test_ajax_changeCategory(self):
form = {
'category': 'site_actions0',
'category_change': 'Change'
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], u"'site_actions0' action category does not exist.")
form['category'] = 'site_actions'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], u"Category changed successfully.")

def test_ajax_cancelEditting(self):
form = {
'category': 'site_actions',
'edit_cancel': 'Cancel',
'orig_id': 'contact0',
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], [u"No 'contact0' action in 'site_actions' category."])
form['orig_id'] = 'contact'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], u"Changes discarded.")

def test_ajax_saveAction(self):
form = {
'available_expr_contact': '',
'category': 'site_actions',
'description_contact': '',
'edit_save': 'Save',
'icon_expr_contact': '',
'id_contact': 'sitemap',
'orig_id': 'contact',
'title_contact': 'Contact',
'url_expr_contact': 'string:${globals_view/navigationRootUrl}/contact-info',
'visible_contact': 1
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], u"Please correct the indicated errors.")
self.assertEquals(response['content'], {'id': u"The id 'sitemap' is invalid - it is already in use."})
form['id_contact'] = 'contact'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], u"'contact' action successfully updated.")

def test_ajax_deleteAction(self):
form = {
'category': 'site_actions',
'edit_delete': 'Delete',
'orig_id': 'contact0'
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], [u"No 'contact0' action in 'site_actions' category."])
form['orig_id'] = 'contact'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], u"'contact' action deleted.")

def test_ajax_moveAction(self):
form = {
'actions': 'tabslist_sitemap&tabslist_accessibility&tabslist_contact&tabslist_plone_setup',
'category': 'site_actions',
'edit_moveact': 'Move Action'
}
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], u"There was error while sorting, or list not changed")
form['actions'] = 'tabslist_contact&tabslist_sitemap&tabslist_accessibility&tabslist_plone_setup'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], u"Actions successfully sorted.")

def test_ajax_addAction(self):
form = {
'add_add': 'Add',
'available_expr': '',
'category': 'site_actions',
'description': '',
Expand All @@ -41,39 +180,37 @@ def test_ajax_addAction(self):
'url_expr': '',
'visible': 1,
}
response = self.panel.manage_ajax_addAction(form)
self.assertEquals(response, {
'content': {
'id': u'Empty or invalid id specified',
'title': u'Empty or invalid title specified'
},
'status_code': 500,
'status_message': u'Please correct the indicated errors.'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], u'Please correct the indicated errors.')
self.assertEquals(response['content'], {
'id': u'Empty or invalid id specified',
'title': u'Empty or invalid title specified'
})
form['id'] = 'action_id'
form['title'] = 'action title'
response = self.panel.manage_ajax_addAction(form)
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], u"'action_id' action successfully added.")

def test_ajax_toggleActionsVisibility(self):
form = {
'category': 'site_actions',
'orig_id': 'contact',
'orig_id': 'contact0',
'tabslist_visible': 'Set visibillity',
'visibility': 'false'
}
response = self.panel.manage_ajax_toggleActionsVisibility(form)
self.assertEquals(response, {
'status_code': 200,
'status_message': u"'contact' action is now invisible."
})
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 500)
self.assertEquals(response['status_message'], [u"No 'contact0' action in 'site_actions' category."])
form['orig_id'] = 'contact'
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], u"'contact' action is now invisible.")
form['visibility'] = 'true'
response = self.panel.manage_ajax_toggleActionsVisibility(form)
self.assertEquals(response, {
'status_code': 200,
'status_message': u"'contact' action is now visible."
})
response = self.panel.ajax_postback(form)
self.assertEquals(response['status_code'], 200)
self.assertEquals(response['status_message'], u"'contact' action is now visible.")

def test_redirect(self):
response = self.portal.REQUEST.RESPONSE
Expand Down
1 change: 0 additions & 1 deletion travis.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,3 @@ extends = https://raw.github.com/collective/buildout.plonetest/master/travis-4.x
package-name = quintagroup.plonetabs
package-extras = [tests]
parts += createcoverage coverage-sh
package-min-coverage = 75

0 comments on commit 814b438

Please sign in to comment.