class TestIDFromTitle(FunctionalTestCase): """Browsertests to make sure ATImages derive their default IDs from their titles""" # TODO: Merge into TestATImageFunctional, below. def afterSetUp(self): self.userId = 'fred' self.password = '******' self.portal.acl_users.userFolderAddUser(self.userId, self.password, ['Manager'], []) self.browser = Browser() self._log_in() def _log_in(self): """Log in as someone who can add new Images.""" self.browser.open(self.portal.absolute_url()) self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = self.userId self.browser.getControl('Password').value = self.password self.browser.getControl('Log in').click() def _make_image(self, title, filename='canoneye.jpg'): """Add a new Image at the root of the Plone site.""" self.browser.open(self.portal.absolute_url() + '/createObject?type_name=Image') self.browser.getControl('Title').value = title image = self.browser.getControl(name='image_file') image.filename = filename TEST_JPEG_FILE.seek(0) image.value = TEST_JPEG_FILE self.browser.getControl('Save').click() def test_image_id_from_filename_and_title(self): # Get ID from filename: self._make_image('') self.assertTrue('canoneye.jpg' in self.browser.url) # Get ID from title. # As a side effect, make sure the ID validator doesn't overzealously # deny our upload of something else called canoneye.jpg, even though # we're not going to compute its ID from its filename. self._make_image('Wonderful Image') self.assertTrue('/wonderful-image' in self.browser.url) def test_image_id_from_unicode_title(self): self._make_image('', filename=u'Pictüre 1.png'.encode('utf-8')) normalized = 'Picture%201.png' self.assertTrue(normalized in self.browser.url)
class TestIDFromTitle(FunctionalTestCase): """Browsertests to make sure ATImages derive their default IDs from their titles""" # TODO: Merge into TestATImageFunctional, below. def afterSetUp(self): self.userId = 'fred' self.password = '******' self.portal.acl_users.userFolderAddUser(self.userId, self.password, ['Manager'], []) self.browser = Browser() self._log_in() def _log_in(self): """Log in as someone who can add new Images.""" self.browser.open(self.portal.absolute_url()) self.browser.getLink('Log in').click() self.browser.getControl('Login Name').value = self.userId self.browser.getControl('Password').value = self.password self.browser.getControl('Log in').click() def _make_image(self, title, filename='canoneye.jpg'): """Add a new Image at the root of the Plone site.""" self.browser.open(self.portal.absolute_url() + '/createObject?type_name=Image') self.browser.getControl('Title').value = title image = self.browser.getControl(name='image_file') image.filename = filename TEST_JPEG_FILE.seek(0) image.value = TEST_JPEG_FILE self.browser.getControl('Save').click() def test_image_id_from_filename_and_title(self): # Get ID from filename: self._make_image('') self.failUnless('canoneye.jpg' in self.browser.url) # Get ID from title. # As a side effect, make sure the ID validator doesn't overzealously # deny our upload of something else called canoneye.jpg, even though # we're not going to compute its ID from its filename. self._make_image('Wonderful Image') self.failUnless('/wonderful-image' in self.browser.url) def test_image_id_from_unicode_title(self): self._make_image('', filename=u'Pictüre 1.png'.encode('utf-8')) normalized = 'Picture%201.png' self.failUnless(normalized in self.browser.url)
class FunctionalTestCase(TestCase, ptc.FunctionalTestCase): def _setup(self): ptc.PloneTestCase._setup(self) # Replace normal mailhost with mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost('MailHost') sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # Make sure our mock mailhost does not give a mailhost_warning # in the overview-controlpanel. self.configure_mail_host(u'mock', '*****@*****.**') def _clear(self, call_close_hook=0): self.portal.MailHost = self.portal._original_MailHost sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(aq_base(self.portal._original_MailHost), provided=IMailHost) ptc.PloneTestCase._clear(self) def get_smtp_host(self): if IMailSchema is None: # Plone 4 return self.portal.MailHost.smtp_host else: # Plone 5.0 and higher registry = getUtility(IRegistry) mail_settings = registry.forInterface(IMailSchema, prefix='plone', check=False) return mail_settings.smtp_host def configure_mail_host(self, smtp_host, address=None): if IMailSchema is None: # Plone 4 self.portal.MailHost.smtp_host = smtp_host if address is not None: self.portal.email_from_address = address else: # Plone 5.0 and higher registry = getUtility(IRegistry) mail_settings = registry.forInterface(IMailSchema, prefix='plone', check=False) if not isinstance(smtp_host, unicode): # must be unicode smtp_host = smtp_host.decode('utf-8') mail_settings.smtp_host = smtp_host if address is not None: if isinstance(address, unicode): # must be ascii address = address.encode('utf-8') mail_settings.email_from_address = address def afterSetUp(self): """Add some extra content and do some setup. """ # We need to do this as Manager: self.setRoles(['Manager']) # Add some news items: sample_text = "<p>Have I got news for <em>you</em>!</p>" self.portal.news.invokeFactory('News Item', 'first', title="First News", text=sample_text) self.portal.news.invokeFactory('News Item', 'second', title="Second News", text=sample_text) # Set fullname and email address of test user: member = self.portal.portal_membership.getAuthenticatedMember() member.setMemberProperties({ 'fullname': 'Test User', 'email': '*****@*****.**' }) # Add extra members: self.addMember('maurits', 'Maurits van Rees', '*****@*****.**') self.addMember('reinout', 'Reinout van Rees', '*****@*****.**') # Setup test browser: try: from Testing.testbrowser import Browser Browser # pyflakes except ImportError: from Products.Five.testbrowser import Browser self.browser = Browser() self.browser.handleErrors = False self.browser.addHeader('Accept-Language', 'en-US') self.portal.error_log._ignored_exceptions = () # No more Manager: self.setRoles([]) def addMember(self, username, fullname, email): self.portal.portal_membership.addMember(username, ptc.default_password, [], []) member = self.portal.portal_membership.getMemberById(username) member.setMemberProperties({'fullname': fullname, 'email': email}) def browser_login(self, user=None): if not user: user = ptc.default_user self.browser.open(self.portal.absolute_url() + '/login_form') self.browser.getLink('Log in').click() self.browser.getControl(name='__ac_name').value = user self.browser.getControl(name='__ac_password').value = \ ptc.default_password self.browser.getControl(name='submit').click()
class FunctionalTestCase(TestCase, ptc.FunctionalTestCase): def _setup(self): ptc.PloneTestCase._setup(self) # Replace normal mailhost with mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost('MailHost') sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # Make sure our mock mailhost does not give a mailhost_warning # in the overview-controlpanel. self.configure_mail_host(u'mock', '*****@*****.**') def _clear(self, call_close_hook=0): self.portal.MailHost = self.portal._original_MailHost sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(aq_base(self.portal._original_MailHost), provided=IMailHost) ptc.PloneTestCase._clear(self) def get_smtp_host(self): if IMailSchema is None: # Plone 4 return self.portal.MailHost.smtp_host else: # Plone 5.0 and higher registry = getUtility(IRegistry) mail_settings = registry.forInterface( IMailSchema, prefix='plone', check=False) return mail_settings.smtp_host def configure_mail_host(self, smtp_host, address=None): if IMailSchema is None: # Plone 4 self.portal.MailHost.smtp_host = smtp_host if address is not None: self.portal.email_from_address = address else: # Plone 5.0 and higher registry = getUtility(IRegistry) mail_settings = registry.forInterface( IMailSchema, prefix='plone', check=False) if not isinstance(smtp_host, unicode): # must be unicode smtp_host = smtp_host.decode('utf-8') mail_settings.smtp_host = smtp_host if address is not None: if isinstance(address, unicode): # must be ascii address = address.encode('utf-8') mail_settings.email_from_address = address def afterSetUp(self): """Add some extra content and do some setup. """ # We need to do this as Manager: self.setRoles(['Manager']) # Add some news items: sample_text = "<p>Have I got news for <em>you</em>!</p>" self.portal.news.invokeFactory( 'News Item', 'first', title="First News", text=sample_text) self.portal.news.invokeFactory( 'News Item', 'second', title="Second News", text=sample_text) # Set fullname and email address of test user: member = self.portal.portal_membership.getAuthenticatedMember() member.setMemberProperties({'fullname': 'Test User', 'email': '*****@*****.**'}) # Add extra members: self.addMember('maurits', 'Maurits van Rees', '*****@*****.**') self.addMember('reinout', 'Reinout van Rees', '*****@*****.**') # Setup test browser: try: from Testing.testbrowser import Browser Browser # pyflakes except ImportError: from Products.Five.testbrowser import Browser self.browser = Browser() self.browser.handleErrors = False self.browser.addHeader('Accept-Language', 'en-US') self.portal.error_log._ignored_exceptions = () # No more Manager: self.setRoles([]) def addMember(self, username, fullname, email): self.portal.portal_membership.addMember( username, ptc.default_password, [], []) member = self.portal.portal_membership.getMemberById(username) member.setMemberProperties({'fullname': fullname, 'email': email}) def browser_login(self, user=None): if not user: user = ptc.default_user self.browser.open(self.portal.absolute_url() + '/login_form') self.browser.getLink('Log in').click() self.browser.getControl(name='__ac_name').value = user self.browser.getControl(name='__ac_password').value = \ ptc.default_password self.browser.getControl(name='submit').click()