{ "info": { "author": "B-Open Solutions srl", "author_email": "UNKNOWN", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License (GPL)" ], "description": "*********************************\nB-Open AT Content Types for Plone\n*********************************\n\n.. contents::\n\n- Home page: http://www.bopen.eu/open-source/bopen.atcontenttypes\n- Code repository: http://github.com/bopen/bopen.atcontenttypes\n\n\nDetailed Documentation\n**********************\n\nIntroduction\n============\n\nThis is a full-blown functional test. The emphasis here is on testing what\nthe user may input and see, and the system is largely tested as a black box.\nWe use PloneTestCase to set up this test as well, so we have a full Plone site\nto play with. We *can* inspect the state of the portal, e.g. using\nself.portal and self.folder, but it is often frowned upon since you are not\ntreating the system as a black box. Also, if you, for example, log in or set\nroles using calls like self.setRoles(), these are not reflected in the test\nbrowser, which runs as a separate session.\n\nBeing a doctest, we can tell a story here.\n\nFirst, we must perform some setup. We use the testbrowser that is shipped\nwith Five, as this provides proper Zope 2 integration. Most of the\ndocumentation, though, is in the underlying zope.testbrower package.\n\n >>> from Products.Five.testbrowser import Browser\n >>> browser = Browser()\n >>> portal_url = self.portal.absolute_url()\n\nThe following is useful when writing and debugging testbrowser tests. It lets\nus see all error messages in the error_log.\n\n >>> self.portal.error_log._ignored_exceptions = ()\n\nWith that in place, we can go to the portal front page and log in. We will\ndo this using the default user from PloneTestCase:\n\n >>> from Products.PloneTestCase.setup import portal_owner, default_password\n\nBecause add-on themes or products may remove or hide the login portlet, this test will use the login form that comes with plone.\n\n >>> browser.open(portal_url + '/login_form')\n >>> browser.getControl(name='__ac_name').value = portal_owner\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n\nHere, we set the value of the fields on the login form and then simulate a\nsubmit click. We then ensure that we get the friendly logged-in message:\n\n >>> \"You are now logged in\" in browser.contents\n True\n\nFinally, let's return to the front page of our site before continuing\n\n >>> browser.open(portal_url)\n\n-*- extra stuff goes here -*-\n\nThe RichFolder content type\n===============================\n\nIn this section we are tesing the RichFolder content type by performing\nbasic operations like adding, updadating and deleting RichFolder content\nitems.\n\nAdding a new RichFolder content item\n--------------------------------\n\nWe use the 'Add new' menu to add a new content item.\n\n >>> browser.getLink('Add new').click()\n\nThen we select the type of item we want to add. In this case we select\n'RichFolder' and click the 'Add' button to get to the add form.\n\n >>> browser.getControl('RichFolder').click()\n >>> browser.getControl(name='form.button.Add').click()\n >>> 'RichFolder' in browser.contents\n True\n\nNow we fill the form and submit it.\n\n >>> browser.getControl(name='title').value = 'RichFolder Sample'\n >>> browser.getControl('Save').click()\n >>> 'Changes saved' in browser.contents\n True\n\nAnd we are done! We added a new 'RichFolder' content item to the portal.\n\nUpdating an existing RichFolder content item\n---------------------------------------\n\nLet's click on the 'edit' tab and update the object attribute values.\n\n >>> browser.getLink('Edit').click()\n >>> browser.getControl(name='title').value = 'New RichFolder Sample'\n >>> browser.getControl('Save').click()\n\nWe check that the changes were applied.\n\n >>> 'Changes saved' in browser.contents\n True\n >>> 'New RichFolder Sample' in browser.contents\n True\n\nRemoving a/an RichFolder content item\n--------------------------------\n\nIf we go to the home page, we can see a tab with the 'New RichFolder\nSample' title in the global navigation tabs.\n\n >>> browser.open(portal_url)\n >>> 'New RichFolder Sample' in browser.contents\n True\n\nNow we are going to delete the 'New RichFolder Sample' object. First we\ngo to the contents tab and select the 'New RichFolder Sample' for\ndeletion.\n\n >>> browser.getLink('Contents').click()\n >>> browser.getControl('New RichFolder Sample').click()\n\nWe click on the 'Delete' button.\n\n >>> browser.getControl('Delete').click()\n >>> 'Item(s) deleted' in browser.contents\n True\n\nSo, if we go back to the home page, there is no longer a 'New RichFolder\nSample' tab.\n\n >>> browser.open(portal_url)\n >>> 'New RichFolder Sample' in browser.contents\n False\n\nAdding a new RichFolder content item as contributor\n------------------------------------------------\n\nNot only site managers are allowed to add RichFolder content items, but\nalso site contributors.\n\nLet's logout and then login as 'contributor', a portal member that has the\ncontributor role assigned.\n\n >>> browser.getLink('Log out').click()\n >>> browser.open(portal_url + '/login_form')\n >>> browser.getControl(name='__ac_name').value = 'contributor'\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n >>> browser.open(portal_url)\n\nWe use the 'Add new' menu to add a new content item.\n\n >>> browser.getLink('Add new').click()\n\nWe select 'RichFolder' and click the 'Add' button to get to the add form.\n\n >>> browser.getControl('RichFolder').click()\n >>> browser.getControl(name='form.button.Add').click()\n >>> 'RichFolder' in browser.contents\n True\n\nNow we fill the form and submit it.\n\n >>> browser.getControl(name='title').value = 'RichFolder Sample'\n >>> browser.getControl('Save').click()\n >>> 'Changes saved' in browser.contents\n True\n\nDone! We added a new RichFolder content item logged in as contributor.\n\nFinally, let's login back as manager.\n\n >>> browser.getLink('Log out').click()\n >>> browser.open(portal_url + '/login_form')\n >>> browser.getControl(name='__ac_name').value = portal_owner\n >>> browser.getControl(name='__ac_password').value = default_password\n >>> browser.getControl(name='submit').click()\n >>> browser.open(portal_url)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://www.bopen.eu/open-source/bopen.atcontenttypes", "keywords": "", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "bopen.atcontenttypes", "package_url": "https://pypi.org/project/bopen.atcontenttypes/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/bopen.atcontenttypes/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://www.bopen.eu/open-source/bopen.atcontenttypes" }, "release_url": "https://pypi.org/project/bopen.atcontenttypes/0.1/", "requires_dist": null, "requires_python": null, "summary": "B-Open AT Content Types for Plone", "version": "0.1" }, "last_serial": 786977, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "5b4b08f1b9f0d3ee474b6dd4ce8452ea", "sha256": "e23a5a64fbcf27e5b73439c8d2f5133b65dfae8faff058e505c35085f63e851a" }, "downloads": -1, "filename": "bopen.atcontenttypes-0.1-py2.4.egg", "has_sig": false, "md5_digest": "5b4b08f1b9f0d3ee474b6dd4ce8452ea", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 33415, "upload_time": "2010-09-07T18:46:27", "url": "https://files.pythonhosted.org/packages/15/29/6923d86de388dc2537149ede1e15ef39f93f9b6abdf748da6aff41e26336/bopen.atcontenttypes-0.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "e46acc4c40433cadd4168a52b199bdd1", "sha256": "da6db2ad7238718838014fe28393c6c65bb66bdbe9a8e68151ff10b18ee0b30c" }, "downloads": -1, "filename": "bopen.atcontenttypes-0.1-py2.6.egg", "has_sig": false, "md5_digest": "e46acc4c40433cadd4168a52b199bdd1", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 33401, "upload_time": "2010-09-07T18:47:20", "url": "https://files.pythonhosted.org/packages/d7/fc/59f7090084c4abf49c424d83e2d07d001ce6c1599b4592f2c4eb4b895236/bopen.atcontenttypes-0.1-py2.6.egg" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5b4b08f1b9f0d3ee474b6dd4ce8452ea", "sha256": "e23a5a64fbcf27e5b73439c8d2f5133b65dfae8faff058e505c35085f63e851a" }, "downloads": -1, "filename": "bopen.atcontenttypes-0.1-py2.4.egg", "has_sig": false, "md5_digest": "5b4b08f1b9f0d3ee474b6dd4ce8452ea", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 33415, "upload_time": "2010-09-07T18:46:27", "url": "https://files.pythonhosted.org/packages/15/29/6923d86de388dc2537149ede1e15ef39f93f9b6abdf748da6aff41e26336/bopen.atcontenttypes-0.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "e46acc4c40433cadd4168a52b199bdd1", "sha256": "da6db2ad7238718838014fe28393c6c65bb66bdbe9a8e68151ff10b18ee0b30c" }, "downloads": -1, "filename": "bopen.atcontenttypes-0.1-py2.6.egg", "has_sig": false, "md5_digest": "e46acc4c40433cadd4168a52b199bdd1", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 33401, "upload_time": "2010-09-07T18:47:20", "url": "https://files.pythonhosted.org/packages/d7/fc/59f7090084c4abf49c424d83e2d07d001ce6c1599b4592f2c4eb4b895236/bopen.atcontenttypes-0.1-py2.6.egg" } ] }