def _createContent(self, portal): login(portal, PRIVILEGED_USER) portal.invokeFactory('Folder', 'mailtest') storage = queryUtility(IFriendlyNameStorage) target = IUUID(portal.get('mailtest')) storage.add(target, 'mailtest') logout
def test_create_and_populate_partners_group(self): helpers.login(self.app, SITE_OWNER_NAME) group = create_and_populate_partners_group() self.assertTrue(group is not None) self.assertEquals(group.getId(), "Official Campaign Partners") self.assertEquals(group.getProperty('title'), "Official Campaign Partners")
def setUp(self): self.portal = self.layer["portal"] login(self.layer['app'], SITE_OWNER_NAME) add_number_of_each_review_type( self.portal, 1, rez_classes=[ReviewMonograph, ReviewJournal]) self.publication = self.portal["sample-reviews"]["newspapera"] self.review_mono = self.portal.portal_catalog.search( {"portal_type" :"Review Monograph", "path" :{ "query": "/".join(self.publication.getPhysicalPath()) } } )[0].getObject() pg = IParentGetter(self.review_mono) self.issue_mono = pg.get_parent_object_of_type('Issue') self.review_jour = self.portal.portal_catalog.search( {"portal_type" :"Review Journal", "path" :{ "query": "/".join(self.publication.getPhysicalPath()) } } )[0].getObject() pg = IParentGetter(self.review_jour) self.issue_jour = pg.get_parent_object_of_type('Issue')
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] self.installer = api.portal.get_tool('portal_quickinstaller') intids = getUtility(IIntIds) login(self.portal, TEST_USER_NAME) container = api.content.create(self.portal, type='Folder', id='container') self.content1 = api.content.create(container, type='member', id='johndoe', title="John Doe", birth_date=datetime.date(1980, 07, 24), amount=100, subscription='silver', languages=('en', 'fr'), photo=NamedImage(open(TEST_IMAGE).read(), contentType='image/png', filename=u'logoplone.png'), ) self.content2 = api.content.create(container, type='member', id='johnsmith', title="John Smith", birth_date=datetime.date(1981, 07, 24), amount=100, languages=('en', 'es'), photo=None, relatedItems=[RelationValue(intids.getId(self.content1))])
def setUp(self): self.portal = self.layer["portal"] alsoProvides(self.portal.REQUEST, IRecensioLayer) login(self.layer['app'], SITE_OWNER_NAME) self.pub = self.portal.unrestrictedTraverse( '/plone/rezensionen/zeitschriften/francia-recensio') self.test_volume_id = self.pub.invokeFactory( 'Volume', id='test-volume') self.test_volume = self.pub.get(self.test_volume_id) newid = self.test_volume.invokeFactory('Issue', id='test-issue') self.test_issue = self.test_volume.get(newid) newid = self.test_issue.invokeFactory( 'Review Monograph', id='test-review') self.test_review = self.test_issue.get(newid) # why is RootPhysicalNavigationBreadcrumbs not registered? Doing it # manually here from plone.app.layout.navigation.interfaces import INavigationRoot from Products.CMFPlone.browser.navigation import RootPhysicalNavigationBreadcrumbs from Products.CMFPlone.browser.interfaces import INavigationBreadcrumbs from zope.publisher.interfaces.http import IHTTPRequest sm = self.portal.getSiteManager() sm.registerAdapter(factory=RootPhysicalNavigationBreadcrumbs, required=(INavigationRoot, IHTTPRequest), name='breadcrumbs_view', provided=INavigationBreadcrumbs)
def test_view_unavailable(self): login(self.portal, TEST_USER_NAME) self.portal.invokeFactory('Folder', 'folder') folder = getattr(self.portal, 'folder') view = queryMultiAdapter((folder, self.request), name='solgemafullcalendar_view') self.assertTrue(view is None)
def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.qi_tool = getToolByName(self.portal, 'portal_quickinstaller') login(self.app, SITE_OWNER_NAME) self.portal.invokeFactory('Document', 'doc', title="My doc") self.portal.invokeFactory('Document', 'doc2')
def setUp(self): self.portal = self.layer['portal'] self.app = self.layer['app'] setRoles(self.portal, TEST_USER_ID, ['Manager', 'Member']) helpers.login(self.portal, TEST_USER_NAME) self.browser = Browser(self.app) self.rabbitctl = self.layer['rabbitctl']
def test_get_my_profiles_applicant(self): helpers.login(self.portal, 'harold') self.assertEquals(self.hw_view.get_my_profiles(), [{'url': self.org.absolute_url(), 'Title': self.org.Title(), 'portal_type': self.org.portal_type, 'review_state': 'approved_phase_1'}])
def test_create_and_populate_partners_group(self): helpers.login(self.app, SITE_OWNER_NAME) group = create_and_populate_partners_group() self.assertTrue(group is not None) self.assertEquals(group.getId(), "Official Campaign Partners") self.assertEquals( group.getProperty('title'), "Official Campaign Partners")
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] self.installer = api.portal.get_tool('portal_quickinstaller') intids = getUtility(IIntIds) login(self.portal, TEST_USER_NAME) container = api.content.create(self.portal, type='Folder', id='container') self.content1 = api.content.create(container, type='member', id='johndoe', title="John Doe", birth_date=datetime.date(1980, 7, 24), amount=100, subscription='silver', languages=('en', 'fr'), biography=u"Longtemps, je me suis couché de bonne heure", photo=NamedImage(open(TEST_IMAGE).read(), contentType='image/png', filename=u'logoplone.png'), ) self.content2 = api.content.create(container, type='member', id='johnsmith', title="John Smith", birth_date=datetime.date(1981, 07, 24), amount=100, languages=('en', 'es'), photo=None, biography=u"""Je forme une entreprise qui n'eut jamais d'exemple et dont l’exécution n'aura point d’imitateur. Je veux montrer à mes semblables un homme dans toute la vérité de la nature ; et cet homme ce sera moi.""", relatedItems=[RelationValue(intids.getId(self.content1))])
def test_site_with_one_package_and_one_image(self): portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ['Manager']) login(portal, TEST_USER_NAME) ideeSejour = getattr(portal, 'idee-sejour') package = api.content.create( type='Package', id='package1', title='My Package', container=ideeSejour) api.content.transition(obj=package, transition='publish') api.content.create( type='Image', id='img1', title='My Image', container=package) api.content.create( type='Vignette', id='vign1', title='My Vignette', container=package) raw_data = self.export_packages_view() if 'DUMP_FILE' in os.environ: with open(testing.PACKAGE_TEST_PATH, 'w') as fd: fd.write(raw_data) data = json.loads(raw_data) self.assertNotEqual([], data) self.assertEqual(len(data), 3)
def setUp(self): super(TestEditDataJson, self).setUp() self.portal = self.layer["portal"] self.request = self.layer["request"] setRoles(self.portal, TEST_USER_ID, ["Manager"]) login(self.portal, TEST_USER_NAME) self.request.set("taxonomy", "collective.taxonomy.test") self.view = self.portal.restrictedTraverse("@@taxonomy-edit-data")
def test_toggle_sets_outdated(self): """Calling the toggle view on a non-outdated object sets it to outdated.""" helpers.login(self.layer['app'], SITE_OWNER_NAME) toggleview = self.testpage.restrictedTraverse('object_toggle_outdated') self.assertFalse(toggleview.outdated) toggleview() self.assertTrue(toggleview.outdated)
def test_toggle_on_file_redirects_to_view(self): """Using the toggle view on a file should not redirect to download but to view.""" helpers.login(self.layer['app'], SITE_OWNER_NAME) toggleview = self.testfile.restrictedTraverse('object_toggle_outdated') toggleview() self.assertTrue( toggleview.request.response.getHeader('Location').endswith('view'))
def test_view_available(self): directlyProvides(self.request, ISolgemaFullcalendarLayer) login(self.portal, TEST_USER_NAME) self.portal.invokeFactory('Folder', 'folder') folder = getattr(self.portal, 'folder') view = queryMultiAdapter((folder, self.request), name='solgemafullcalendar_view') self.assertTrue(view is not None)
def setUp(self): super(TestTool, self).setUp() self.portal = self.layer['portal'] login(self.portal, TEST_USER_NAME) self.workspace = api.content.create(self.portal, 'Folder', 'Workspace') self.folder = api.content.create(self.workspace, 'Folder', 'folder') self.subscriber = ('member', TEST_USER_NAME) self.portal.portal_workflow._default_chain = ('plone_workflow',)
def test_reviewer_rejects_organisation(self): helpers.login(self.portal, 'Site Administrator') self.assertIn('test-organisation', self.organisations.objectIds()) self.org.restrictedTraverse('@@reject')() self.assertNotIn('test-organisation', self.organisations.objectIds()) self.assertEqual(len(self.sent_mails), 1, msg='Mail not sent') self.assertIn('*****@*****.**', self.sent_mails[0]) self.assertIn('rejected', self.sent_mails[0])
def setUp(self): super(TestActions, self).setUp() portal = self.portal = self.layer['portal'] login(portal, TEST_USER_NAME) self.workspace = api.content.create(portal, 'Folder', 'Workspace') self.folder = api.content.create(self.workspace, 'Folder', 'folder') api.user.get(TEST_USER_ID).setProperties({'email': '*****@*****.**'}) portal.email_from_name, portal.email_from_address = 'Test site', '*****@*****.**'
def _clear_export_files(self): login(self.layer['app'], SITE_OWNER_NAME) exporters = [factory() for name, factory in getFactoriesFor(IRecensioExporter)] for exporter in exporters: old_export_file = self.portal.get(exporter.export_filename) if old_export_file: api.content.delete(old_export_file) login(self.portal, TEST_USER_NAME)
def test_get_my_profiles_applicant(self): helpers.login(self.portal, 'harold') self.assertEquals(self.hw_view.get_my_profiles(), [{ 'url': self.org.absolute_url(), 'Title': self.org.Title(), 'portal_type': self.org.portal_type, 'review_state': 'approved_phase_1' }])
def test_delete_action(self): login(self.portal, TEST_USER_NAME) directory = self.portal.mydirectory self.assertIn('rambo', directory) self.portal.REQUEST.form['uids'] = [directory.rambo.UID()] delete_view = directory.unrestrictedTraverse('@@delete_selection') delete_view() self.assertNotIn('rambo', directory)
def test_toggle_clears_outdated(self): """Calling the toggle view on an outdated object sets it to non-outdated.""" helpers.login(self.layer['app'], SITE_OWNER_NAME) IAnnotations(self.testpage)[ANNOTATION_KEY] = True toggleview = self.testpage.restrictedTraverse('object_toggle_outdated') self.assertTrue(toggleview.outdated) toggleview() self.assertFalse(toggleview.outdated)
def test_creator_cannot_submit_incomplete_organisation(self): utils._send_emails = False helpers.login(self.portal, 'Site Administrator') self.wftool.doActionFor(self.org, 'approve_phase_1') utils._send_emails = True helpers.login(self.portal, self.creator_id) self.assertNotIn( 'submit', [a['id'] for a in self.wftool.listActions(object=self.org)])
def test_toggle_on_file_redirects_to_referer(self): """Using the toggle view on a file should redirect to the referer if it is set.""" helpers.login(self.layer['app'], SITE_OWNER_NAME) self.portal.REQUEST.environ['REFERER'] = 'http://nohost/whereicamefrom' toggleview = self.testfile.restrictedTraverse('object_toggle_outdated') toggleview() self.assertEquals( toggleview.request.response.getHeader('Location'), 'http://nohost/whereicamefrom')
def test_delete_conversation_no_testbrowser(self): self._create_message("testuser1", "testuser2", "Message Text", created=now) self.assertEqual(len(self._conversations("testuser1")), 1) self.request.form = {"user": "******"} login(self.portal, "testuser1") view = api.content.get_view(context=self.portal, request=self.request, name="delete-conversation") content = json.loads(view()) self.assertEqual(content, {u"result": True}) self.assertEqual(len(self._conversations("testuser1")), 0) self.request.form = {}
def test_favorite_actions(self): login(self.portal, TEST_USER_NAME) self.portal.doc.restrictedTraverse('@@add-favorite')() storage = IFavoriteStorage(self.portal) self.assertEqual(len(storage.get_favorites()), 1) self.assertEqual(len(storage.list_favorites(TEST_USER_ID)), 1) self.assertEqual(len(storage.list_favorites('toto')), 0) self.portal.doc.restrictedTraverse('@@remove-favorite')() self.assertEqual(len(storage.list_favorites(TEST_USER_ID)), 0) self.assertEqual(len(storage.get_favorites()), 0)
def test_reviewer_rejects_organisation(self): helpers.login(self.portal, 'Site Administrator') self.assertIn( 'test-organisation', self.organisations.objectIds()) self.org.restrictedTraverse('@@reject')() self.assertNotIn( 'test-organisation', self.organisations.objectIds()) self.assertEqual(len(self.sent_mails), 1, msg='Mail not sent') self.assertIn('*****@*****.**', self.sent_mails[0]) self.assertIn('rejected', self.sent_mails[0])
def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] helpers.login(self.app, SITE_OWNER_NAME) self.org = api.content.create(self.portal.get('organisations'), type='osha.hwccontent.organisation', title='Test Organisation', id='test-organisation', key_email=u'*****@*****.**', key_name=u'Harold van Testinger') api.content.transition(self.org, 'approve_phase_1') self.hw_view = self.portal.restrictedTraverse('hw_view')
def test_delete_message_no_testbrowser(self): self._create_message("testuser1", "testuser2", "Message Text", created=now) inbox = self.portal.ploneintranet_messaging["testuser1"] message_id = inbox["testuser2"].keys()[0] self.request.form = {"user": "******", "message": str(message_id)} login(self.portal, "testuser1") view = api.content.get_view(context=self.portal, request=self.request, name="delete-message") content = json.loads(view()) self.assertEqual(content["result"], True) self.assertIn(str(message_id), content["message"]) self.assertNotIn(message_id, inbox["testuser2"]) self.request.form = {}
def setUp(self): self.portal = self.layer['portal'] login(self.layer['app'], SITE_OWNER_NAME) add_number_of_each_review_type( self.portal, 1, rez_classes=[ReviewMonograph, ReviewJournal]) self.newspapera = self.portal['sample-reviews']['newspapera'] self.issue_2_a = self.newspapera['summer']['issue-2'] self.review_a0 = self.issue_2_a.objectValues()[0] self.review_a1 = self.issue_2_a.objectValues()[1] login(self.portal, TEST_USER_NAME)
def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] helpers.login(self.app, SITE_OWNER_NAME) self.org = api.content.create( self.portal.get('organisations'), type='osha.hwccontent.organisation', title='Test Organisation', id='test-organisation', key_email=u'*****@*****.**', key_name=u'Harold van Testinger') api.content.transition(self.org, 'approve_phase_1') self.hw_view = self.portal.restrictedTraverse('hw_view')
def setUp(self): self.portal = self.layer['portal'] helpers.login(self.layer['app'], SITE_OWNER_NAME) self.testfile = api.content.create( self.portal, type='File', title='A Test File', ) self.testpage = api.content.create( self.portal, type='Document', title='A Test Page', )
def ploneSite(self, plone_site_id, db=None, connection=None, environ=None): from zope.site.hooks import setSite, getSite, setHooks setHooks() site = getSite() with z2.zopeApp(db, connection, environ) as app: portal = app[plone_site_id] setSite(portal) login(portal, TEST_USER_NAME) try: yield portal finally: logout() if site is not portal: setSite(site)
def test_json_contacts(self): login(self.portal, TEST_USER_NAME) alsoProvides(self.portal.REQUEST, ICollectiveContactFacetednavLayer) directory = self.portal.mydirectory self.portal.REQUEST.form['type'] = 'organization' json_contacts = json.loads(directory.unrestrictedTraverse('@@json-contacts')()) self.assertEqual(len(json_contacts), 7) self.assertTrue(json_contacts[0].has_key('id')) self.assertEqual(json_contacts[0]['path'], '/plone/mydirectory/armeedeterre') self.portal.REQUEST.form['type'] = 'held_position' json_contacts = json.loads(directory.unrestrictedTraverse('@@json-contacts')()) self.assertEqual(len(json_contacts), 4) self.assertEqual(json_contacts[0]['path'], '/plone/mydirectory/degaulle/adt')
def setUpEnvironment(self, portal): """Set up the local component site, reset skin data and log in as the test user. """ # Set up the local site manager from zope.site.hooks import setSite setSite(portal) # Reset skin data portal.clearCurrentSkin() portal.setupCurrentSkin(portal.REQUEST) # Pseudo-login as the test user from plone.app.testing import helpers helpers.login(portal, TEST_USER_NAME)
def test_reviewer_publishes_organisation(self): utils._send_emails = False helpers.login(self.portal, 'Site Administrator') self.wftool.doActionFor(self.org, 'approve_phase_1') self.org.mission_statement = u'We Care Because We Can' self.wftool.doActionFor(self.org, 'submit') utils._send_emails = True helpers.login(self.portal, 'Site Administrator') self.wftool.doActionFor(self.org, 'publish') self.assertEqual(self.wftool.getInfoFor(self.org, 'review_state'), 'published') self.assertIn('View', [ p['name'] for p in self.org.permissionsOfRole('Anonymous') if p['selected'] ])
def test_subtyper(self): login(self.portal, TEST_USER_NAME) directory = self.portal.mydirectory alsoProvides(self.portal.REQUEST, ICollectiveContactFacetednavLayer) subtyper = directory.unrestrictedTraverse('@@contact_faceted_subtyper') subtyper.enable_actions() self.assertTrue(subtyper.actions_enabled) self.assertFalse(subtyper.can_enable_actions()) self.assertTrue(subtyper.can_disable_actions()) self.assertTrue(directory.unrestrictedTraverse('@@faceted_query').actions_enabled()) subtyper.disable_actions() self.assertFalse(subtyper.actions_enabled) self.assertTrue(subtyper.can_enable_actions()) self.assertFalse(subtyper.can_disable_actions()) self.assertFalse(directory.unrestrictedTraverse('@@faceted_query').actions_enabled())
def setUpEnvironment(self, portal): """Set up the local component site, reset skin data and log in as the test user. """ # Set up the local site manager setSite(portal) # Reset skin data portal.clearCurrentSkin() portal.setupCurrentSkin(portal.REQUEST) notify(BeforeTraverseEvent(portal, portal.REQUEST)) # Pseudo-login as the test user from plone.app.testing import helpers helpers.login(portal, TEST_USER_NAME)
def test_delete_conversation_no_testbrowser(self): self._create_message('testuser1', 'testuser2', 'Message Text', created=now) self.assertEqual(len(self._conversations('testuser1')), 1) self.request.form = { 'user': '******', } login(self.portal, 'testuser1') view = api.content.get_view(context=self.portal, request=self.request, name='delete-conversation') content = json.loads(view()) self.assertEqual(content, {u'result': True}) self.assertEqual(len(self._conversations('testuser1')), 0) self.request.form = {}
def test_favorite_ajax_actions(self): login(self.portal, TEST_USER_NAME) doc = self.portal.doc doc.restrictedTraverse('@@add-favorite-ajax')() storage = IFavoriteStorage(self.portal) self.assertEqual(len(storage.get_favorites()), 1) self.assertEqual(len(storage.list_favorites(TEST_USER_ID)), 1) self.assertEqual(len(storage.list_favorites('toto')), 0) json = JSONDecoder().decode( doc.restrictedTraverse('@@json-get-favorites')()) self.assertEqual(len(json), 1) self.assertEqual(json[0]['title'], "My doc") self.portal.doc.restrictedTraverse('@@remove-favorite-ajax')() self.assertEqual(len(storage.list_favorites(TEST_USER_ID)), 0) self.assertEqual(len(storage.get_favorites()), 0)
def test_reviewer_approves_organisation(self): helpers.login(self.portal, 'Site Administrator') self.assertFalse(api.user.get(self.creator_id)) self.wftool.doActionFor(self.org, 'approve_phase_1') self.assertEqual(self.wftool.getInfoFor(self.org, 'review_state'), 'approved_phase_1') user = api.user.get(self.creator_id) self.assertEqual(user.getProperty('fullname'), 'Harold van Testinger') self.assertEqual(user.getProperty('email'), '*****@*****.**') self.assertEqual( set(self.org.get_local_roles_for_userid(user.getId())), set(('Reader', 'Contributor', 'Editor'))) self.assertNotIn('View', [ p['name'] for p in self.org.permissionsOfRole('Anonymous') if p['selected'] ]) self.assertEqual(len(self.sent_mails), 1, msg='Mail not sent') self.assertIn('*****@*****.**', self.sent_mails[0])
def test_delete_message_no_testbrowser(self): self._create_message('testuser1', 'testuser2', 'Message Text', created=now) inbox = self.portal.plonesocial_messaging['testuser1'] message_id = inbox['testuser2'].keys()[0] self.request.form = { 'user': '******', 'message': str(message_id), } login(self.portal, 'testuser1') view = api.content.get_view(context=self.portal, request=self.request, name='delete-message') content = json.loads(view()) self.assertEqual(content['result'], True) self.assertIn(str(message_id), content['message']) self.assertNotIn(message_id, inbox['testuser2']) self.request.form = {}
def test_creator_submits_organisation(self): utils._send_emails = False helpers.login(self.portal, 'Site Administrator') self.wftool.doActionFor(self.org, 'approve_phase_1') utils._send_emails = True helpers.login(self.portal, self.creator_id) self.org.mission_statement = u'We Care Because We Can' self.assertIn( 'submit', [a['id'] for a in self.wftool.listActions(object=self.org)]) self.wftool.doActionFor(self.org, 'submit') self.assertEqual(self.wftool.getInfoFor(self.org, 'review_state'), 'pending_phase_2') self.assertEqual(len(self.sent_mails), 2, msg='Mail not sent') self.assertIn('*****@*****.**', '\n'.join(self.sent_mails)) self.assertIn(self.portal.email_from_address, '\n'.join(self.sent_mails)) self.assertIn(self.org.absolute_url(), '\n'.join(self.sent_mails))
def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] self.installer = api.portal.get_tool('portal_quickinstaller') intids = getUtility(IIntIds) login(self.portal, TEST_USER_NAME) container = api.content.create(self.portal, type='Folder', id='container') self.content1 = api.content.create( container, type='member', id='johndoe', title="John Doe", birth_date=datetime.date(1980, 7, 24), amount=100, subscription='silver', languages=('en', 'fr'), biography=u"Longtemps, je me suis couché de bonne heure", photo=NamedImage(open(TEST_IMAGE).read(), contentType='image/png', filename=u'logoplone.png'), ) self.content2 = api.content.create( container, type='member', id='johnsmith', title="John Smith", birth_date=datetime.date(1981, 7, 24), amount=100, languages=('en', 'es'), photo=None, biography=u"""Je forme une entreprise qui n'eut jamais d'exemple et dont l’exécution n'aura point d’imitateur. Je veux montrer à mes semblables un homme dans toute la vérité de la nature ; et cet homme ce sera moi.""", relatedItems=[RelationValue(intids.getId(self.content1))])
def test_create_partners_group_adds_partner_users(self): helpers.login(self.app, SITE_OWNER_NAME) username, created = create_key_user_if_not_exists(self.org) group = create_and_populate_partners_group() self.assertIn(username, group.getGroupMemberIds())
def tearDown(self): helpers.login(self.app, SITE_OWNER_NAME) api.content.delete(self.org)
def setUp(self): self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) helpers.login(self.portal, TEST_USER_NAME)
def test_get_my_profiles_site_owner(self): helpers.login(self.app, SITE_OWNER_NAME) self.assertEquals(self.hw_view.get_my_profiles(), [])
def test_generate_json(self): login(self.portal, TEST_USER_NAME) import_json_view = self.portal.restrictedTraverse("@@taxonomy-import") input_data = [ { 'key': 'animals', 'translations': {'fr': u'Animaux', 'en': u'Animals'}, 'subnodes': [], }, { 'key': 'plants', 'translations': {'fr': u'Végétaux', 'en': u'Plants'}, 'subnodes': [], }, ] output = import_json_view.generate_data_for_taxonomy(input_data, 'fr') self.assertEqual( output, [(u'/Animaux', 'animals'), (u'/Végétaux', 'plants')]) input_data[0]['subnodes'] = [ { 'key': 'birds', 'translations': {'fr': u'Oiseaux', 'en': u'Birds'}, 'subnodes': [ { 'key': 'eagles', 'translations': {'fr': u'Aigles', 'en': u'Eagles'}, 'subnodes': [] }, { 'key': 'penguins', 'translations': {'fr': u'Manchots', 'en': u'Penguins'}, 'subnodes': [] }, ], }, { 'key': 'mammals', 'translations': {'fr': u'Mammifères', 'en': u'Mammals'}, 'subnodes': [ { 'key': 'cows', 'translations': {'fr': u'Vaches', 'en': u'Cows'}, 'subnodes': [] }, { 'key': 'lions', 'translations': {'fr': u'Lions', 'en': u'Lions'}, 'subnodes': [] }, ], }, { 'key': 'reptiles', 'translations': {'fr': u'Reptiles', 'en': u'Reptiles'}, 'subnodes': [ { 'key': 'pythons', 'translations': {'fr': u'Pythons', 'en': u'Pythons'}, 'subnodes': [] }, ], }, ] output = import_json_view.generate_data_for_taxonomy(input_data, 'fr') self.assertEqual( output, [(u'/Animaux', 'animals'), (u'/Animaux/Oiseaux', 'birds'), (u'/Animaux/Oiseaux/Aigles', 'eagles'), (u'/Animaux/Oiseaux/Manchots', 'penguins'), (u'/Animaux/Mammifères', 'mammals'), (u'/Animaux/Mammifères/Vaches', 'cows'), (u'/Animaux/Mammifères/Lions', 'lions'), (u'/Animaux/Reptiles', 'reptiles'), (u'/Animaux/Reptiles/Pythons', 'pythons'), (u'/Végétaux', 'plants')])
def test_generate_json(self): login(self.portal, TEST_USER_NAME) import_json_view = self.portal.restrictedTraverse("@@taxonomy-import") input_data = [ { "key": "animals", "translations": { "fr": u"Animaux", "en": u"Animals" }, "subnodes": [], }, { "key": "plants", "translations": { "fr": u"Végétaux", "en": u"Plants" }, "subnodes": [], }, ] output = import_json_view.generate_data_for_taxonomy(input_data, "fr") self.assertEqual(output, [(u"\u241fAnimaux", "animals"), (u"\u241fVégétaux", "plants")]) input_data[0]["subnodes"] = [ { "key": "birds", "translations": { "fr": u"Oiseaux", "en": u"Birds" }, "subnodes": [ { "key": "eagles", "translations": { "fr": u"Aigles", "en": u"Eagles" }, "subnodes": [], }, { "key": "penguins", "translations": { "fr": u"Manchots", "en": u"Penguins" }, "subnodes": [], }, ], }, { "key": "mammals", "translations": { "fr": u"Mammifères", "en": u"Mammals" }, "subnodes": [ { "key": "cows", "translations": { "fr": u"Vaches", "en": u"Cows" }, "subnodes": [], }, { "key": "lions", "translations": { "fr": u"Lions", "en": u"Lions" }, "subnodes": [], }, ], }, { "key": "reptiles", "translations": { "fr": u"Reptiles", "en": u"Reptiles" }, "subnodes": [ { "key": "pythons", "translations": { "fr": u"Pythons", "en": u"Pythons" }, "subnodes": [], }, ], }, ] output = import_json_view.generate_data_for_taxonomy(input_data, "fr") self.assertEqual( output, [ (u"\u241fAnimaux", "animals"), (u"\u241fAnimaux\u241fOiseaux", "birds"), (u"\u241fAnimaux\u241fOiseaux\u241fAigles", "eagles"), (u"\u241fAnimaux\u241fOiseaux\u241fManchots", "penguins"), (u"\u241fAnimaux\u241fMammifères", "mammals"), (u"\u241fAnimaux\u241fMammifères\u241fVaches", "cows"), (u"\u241fAnimaux\u241fMammifères\u241fLions", "lions"), (u"\u241fAnimaux\u241fReptiles", "reptiles"), (u"\u241fAnimaux\u241fReptiles\u241fPythons", "pythons"), (u"\u241fVégétaux", "plants"), ], )
def tearDown(self): helpers.login(self.app, SITE_OWNER_NAME) if 'test-organisation' in self.organisations.objectIds(): api.content.delete(self.org) api.user.delete(self.creator_id)